Skip to content

Commit

Permalink
Make NPC respawning work only when chunks are loaded
Browse files Browse the repository at this point in the history
  • Loading branch information
mchorse committed Jun 12, 2022
1 parent a726dd0 commit 2e226d2
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
1 change: 1 addition & 0 deletions src/main/java/mchorse/mappet/entities/EntityNpc.java
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,7 @@ public void onDeath(DamageSource cause)
if (this.state.respawn && !this.dieOnLoad)
{
MappetNpcRespawnManager respawnManager = MappetNpcRespawnManager.get(this.world);

respawnManager.addDiedNpc(this);
this.dieOnLoad = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ public void spawn(World world)
EntityNpc npc = new EntityNpc(world);

npc.readEntityFromNBT(this.nbt);
npc.setPosition(posX, posY, posZ);
npc.setPosition(this.posX, this.posY, this.posZ);
npc.setHealth(npc.getMaxHealth());

if (npc.getState().respawnSaveUUID)
{
npc.setUniqueId(UUID.fromString(uuid));
npc.setUniqueId(UUID.fromString(this.uuid));
}

world.spawnEntity(npc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraft.world.storage.WorldSavedData;
import net.minecraftforge.common.util.Constants;

Expand All @@ -16,10 +18,13 @@
public class MappetNpcRespawnManager extends WorldSavedData
{
public static final String DATA_NAME = Mappet.MOD_ID + "_RespawnData";

public final List<DiedNpcHolder> diedNpcHolders = new ArrayList<>();
public final List<DiedNpcHolder> deleteCache = new ArrayList<>();
public MinecraftServer server;

private BlockPos.MutableBlockPos block = new BlockPos.MutableBlockPos();

public MappetNpcRespawnManager(String mapName)
{
super(mapName);
Expand All @@ -29,7 +34,11 @@ public void onTick()
{
for (DiedNpcHolder diedNpcHolder : this.diedNpcHolders)
{
if (diedNpcHolder.respawnTime <= this.server.getWorld(diedNpcHolder.worldID).getTotalWorldTime())
WorldServer world = this.server.getWorld(diedNpcHolder.worldID);

block.setPos(diedNpcHolder.posX, diedNpcHolder.posY, diedNpcHolder.posZ);

if (diedNpcHolder.respawnTime <= world.getTotalWorldTime() && world.isBlockLoaded(block))
{
this.respawnNpc(diedNpcHolder);
}
Expand All @@ -52,7 +61,7 @@ public void addDiedNpc(EntityNpc npc)

public void respawnNpc(DiedNpcHolder diedNpcHolder)
{
diedNpcHolder.spawn(server.getWorld(diedNpcHolder.worldID));
diedNpcHolder.spawn(this.server.getWorld(diedNpcHolder.worldID));

this.deleteCache.add(diedNpcHolder);
}
Expand All @@ -64,7 +73,7 @@ public void removeSpawnedNpcs()
this.diedNpcHolders.remove(diedNpcHolder);
}

clearDeleteCache();
this.clearDeleteCache();
}

public void clearDeleteCache()
Expand Down

0 comments on commit 2e226d2

Please sign in to comment.