Skip to content

Commit

Permalink
Some fixes (ldtteam#5762)
Browse files Browse the repository at this point in the history
Fix entity AI active too early, causing a crash
Fix respawning missing checks
Remove entity respawning at the TH when actually unloaded
Fix can't spawn at messages appearing for unloaded citizens
  • Loading branch information
someaddons authored Sep 11, 2020
1 parent b0329a5 commit 37de382
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.minecolonies.api.inventory.InventoryCitizen;
import com.minecolonies.api.util.BlockPosUtil;
import com.minecolonies.api.util.Log;
import com.minecolonies.api.util.WorldUtil;
import com.minecolonies.api.util.constant.Suppression;
import com.minecolonies.coremod.MineColonies;
import com.minecolonies.coremod.colony.interactionhandling.ServerCitizenInteraction;
Expand All @@ -31,6 +32,7 @@
import com.minecolonies.coremod.research.AdditionModifierResearchEffect;
import com.minecolonies.coremod.research.MultiplierModifierResearchEffect;
import com.minecolonies.coremod.util.AttributeModifierUtils;
import net.minecraft.entity.Entity;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.PlayerEntity;
Expand Down Expand Up @@ -605,7 +607,11 @@ public void updateEntityIfNecessary()
{
if (getEntity().isPresent())
{
return;
final Entity entity = getEntity().get();
if (entity.isAlive() && entity.addedToChunk && WorldUtil.isEntityBlockLoaded(entity.world, entity.getPosition()))
{
return;
}
}

colony.getCitizenManager().spawnOrCreateCivilian(this, colony.getWorld(), lastPosition, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.minecolonies.api.util.BlockPosUtil;
import com.minecolonies.api.util.WorldUtil;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.PacketBuffer;
Expand Down Expand Up @@ -114,10 +115,14 @@ public void updateEntityIfNecessary()
{
if (getEntity().isPresent())
{
return;
final Entity entity = getEntity().get();
if (entity.isAlive() && entity.addedToChunk && WorldUtil.isEntityBlockLoaded(entity.world, entity.getPosition()))
{
return;
}
}

if (WorldUtil.isEntityBlockLoaded(getColony().getWorld(), getLastPosition()))
if (getLastPosition() != BlockPos.ZERO && WorldUtil.isEntityBlockLoaded(getColony().getWorld(), getLastPosition()))
{
getColony().getVisitorManager().spawnOrCreateCivilian(this, getColony().getWorld(), getLastPosition(), true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
import com.minecolonies.api.entity.citizen.AbstractEntityCitizen;
import com.minecolonies.api.util.EntityUtils;
import com.minecolonies.api.util.NBTUtils;
import com.minecolonies.api.util.WorldUtil;
import com.minecolonies.coremod.MineColonies;
import com.minecolonies.coremod.Network;
import com.minecolonies.coremod.colony.CitizenData;
import com.minecolonies.coremod.colony.Colony;
import com.minecolonies.coremod.colony.buildings.AbstractBuildingGuards;
import com.minecolonies.coremod.colony.buildings.workerbuildings.BuildingHome;
import com.minecolonies.coremod.colony.jobs.AbstractJobGuard;
import com.minecolonies.coremod.entity.citizen.EntityCitizen;
import com.minecolonies.coremod.network.messages.client.colony.ColonyViewCitizenViewMessage;
Expand All @@ -28,7 +28,6 @@
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -227,35 +226,23 @@ public ICitizenData spawnOrCreateCivilian(@Nullable final ICivilianData data, fi
spawnLocation = colony.getBuildingManager().getTownHall().getPosition();
}


BlockPos calculatedSpawn = null;

if (world.getChunkProvider().isChunkLoaded(new ChunkPos(spawnLocation.getX() >> 4, spawnLocation.getZ() >> 4)))
{
calculatedSpawn = EntityUtils.getSpawnPoint(world, spawnLocation);
}

if (calculatedSpawn == null)
if (WorldUtil.isEntityBlockLoaded(colony.getWorld(), spawnLocation))
{
spawnLocation = colony.getBuildingManager().getTownHall().getPosition();
if (world.getChunkProvider().isChunkLoaded(new ChunkPos(spawnLocation.getX() >> 4, spawnLocation.getZ() >> 4)))
final BlockPos calculatedSpawn = EntityUtils.getSpawnPoint(world, spawnLocation);
if (calculatedSpawn != null)
{
calculatedSpawn = EntityUtils.getSpawnPoint(world, spawnLocation);
return spawnCitizenOnPosition((ICitizenData) data, world, force, calculatedSpawn);
}
else
{
LanguageHandler.sendPlayersMessage(colony.getMessagePlayerEntities(),
"com.minecolonies.coremod.citizens.nospace",
spawnLocation.getX(),
spawnLocation.getY(),
spawnLocation.getZ());
}
}

if (calculatedSpawn != null)
{
return spawnCitizenOnPosition((ICitizenData) data, world, force, calculatedSpawn);
}
else
{
LanguageHandler.sendPlayersMessage(colony.getMessagePlayerEntities(),
"com.minecolonies.coremod.citizens.nospace",
spawnLocation.getX(),
spawnLocation.getY(),
spawnLocation.getZ());
}
return (ICitizenData) data;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,6 @@ public EntityCitizen(final EntityType<? extends AgeableEntity> type, final World
this.moveController = new MovementHandler(this);
this.enablePersistence();
this.setCustomNameVisible(MineColonies.getConfig().getCommon().alwaysRenderNameTag.get());
initTasks();

entityStatemachine.addTransition(new TickingTransition<>(EntityState.INIT, () -> true, this::initialize, 40));

Expand Down Expand Up @@ -299,6 +298,7 @@ private EntityState initialize()
this.citizenDataView = colonyView.getCitizen(citizenId);
if (citizenDataView != null)
{
initTasks();
return EntityState.ACTIVE_CLIENT;
}
}
Expand All @@ -309,6 +309,7 @@ private EntityState initialize()
citizenColonyHandler.registerWithColony(citizenColonyHandler.getColonyId(), citizenId);
if (citizenData != null && isAlive() && citizenColonyHandler.getColony() != null)
{
initTasks();
return EntityState.ACTIVE_SERVER;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public void toBytesOverride(@NotNull final PacketBuffer buf)
protected void onExecute(final NetworkEvent.Context ctxIn, final boolean isLogicalServer, final IColony colony, final IBuilding building)
{
final ICitizenData citizenData = colony.getCitizenManager().getCivilian(citizenId);
citizenData.setLastPosition(building.getPosition());
Optional<AbstractEntityCitizen> optionalEntityCitizen = citizenData.getEntity();
if (!optionalEntityCitizen.isPresent())
{
Expand Down

0 comments on commit 37de382

Please sign in to comment.