Various Updates #138
@@ -22,11 +22,9 @@ import net.minecraftforge.event.world.WorldEvent;
|
|||||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.ticking.RiftRegenerator;
|
|
||||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
||||||
import StevenDimDoors.mod_pocketDim.world.PocketProvider;
|
import StevenDimDoors.mod_pocketDim.world.PocketProvider;
|
||||||
import StevenDimDoors.mod_pocketDim.world.fortresses.DDNetherFortressGenerator;
|
|
||||||
import cpw.mods.fml.client.FMLClientHandler;
|
import cpw.mods.fml.client.FMLClientHandler;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
@@ -148,30 +146,60 @@ public class EventHookContainer
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ForgeSubscribe(priority = EventPriority.HIGHEST)
|
@ForgeSubscribe(priority = EventPriority.HIGHEST)
|
||||||
public boolean LivingDeathEvent(LivingDeathEvent event)
|
public boolean onDeathWithHighPriority(LivingDeathEvent event)
|
||||||
{
|
{
|
||||||
|
// Teleport the entity to Limbo if it's a player in a pocket dimension and
|
||||||
|
// if Limbo preserves player inventories. We'll check again in a low-priority event handler
|
||||||
|
// to give other mods a chance to save the player if Limbo does _not_ preserve inventories.
|
||||||
|
|
||||||
Entity entity = event.entity;
|
Entity entity = event.entity;
|
||||||
|
|
||||||
if (entity instanceof EntityPlayer && properties.LimboEnabled &&
|
if (entity instanceof EntityPlayer && properties.LimboEnabled &&
|
||||||
entity.worldObj.provider instanceof PocketProvider)
|
entity.worldObj.provider instanceof PocketProvider && properties.LimboReturnsInventoryEnabled)
|
||||||
{
|
{
|
||||||
EntityPlayer player = (EntityPlayer) entity;
|
EntityPlayer player = (EntityPlayer) entity;
|
||||||
if (!properties.LimboReturnsInventoryEnabled)
|
mod_pocketDim.deathTracker.addUsername(player.username);
|
||||||
{
|
revivePlayerInLimbo(player);
|
||||||
player.inventory.clearInventory(-1, -1);
|
|
||||||
}
|
|
||||||
player.extinguish();
|
|
||||||
player.clearActivePotions();
|
|
||||||
ChunkCoordinates coords = LimboProvider.getLimboSkySpawn(player.worldObj.rand);
|
|
||||||
Point4D destination = new Point4D((int) (coords.posX+entity.posX), coords.posY, (int) (coords.posZ+entity.posZ ), mod_pocketDim.properties.LimboDimensionID);
|
|
||||||
DDTeleporter.teleportEntity(player, destination, false);
|
|
||||||
player.setHealth(player.getMaxHealth());
|
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ForgeSubscribe(priority = EventPriority.LOWEST)
|
||||||
|
public boolean onDeathWithLowPriority(LivingDeathEvent event)
|
||||||
|
{
|
||||||
|
// This low-priority handler gives mods a chance to save a player from death before we apply
|
||||||
|
// teleporting them to Limbo _without_ preserving their inventory. We also check if the player
|
||||||
|
// died in a pocket dimension and record it, regardless of whether the player will be sent to Limbo.
|
||||||
|
|
||||||
|
Entity entity = event.entity;
|
||||||
|
|
||||||
|
if (entity instanceof EntityPlayer && entity.worldObj.provider instanceof PocketProvider)
|
||||||
|
{
|
||||||
|
EntityPlayer player = (EntityPlayer) entity;
|
||||||
|
mod_pocketDim.deathTracker.addUsername(player.username);
|
||||||
|
|
||||||
|
if (properties.LimboEnabled && !properties.LimboReturnsInventoryEnabled)
|
||||||
|
{
|
||||||
|
player.inventory.clearInventory(-1, -1);
|
||||||
|
revivePlayerInLimbo(player);
|
||||||
|
event.setCanceled(true);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void revivePlayerInLimbo(EntityPlayer player)
|
||||||
|
{
|
||||||
|
player.extinguish();
|
||||||
|
player.clearActivePotions();
|
||||||
|
player.setHealth(player.getMaxHealth());
|
||||||
|
ChunkCoordinates coords = LimboProvider.getLimboSkySpawn(player.worldObj.rand);
|
||||||
|
Point4D destination = new Point4D((int) (coords.posX + player.posX), coords.posY, (int) (coords.posZ + player.posZ ), mod_pocketDim.properties.LimboDimensionID);
|
||||||
|
DDTeleporter.teleportEntity(player, destination, false);
|
||||||
|
}
|
||||||
|
|
||||||
@ForgeSubscribe
|
@ForgeSubscribe
|
||||||
public void onWorldSave(WorldEvent.Save event)
|
public void onWorldSave(WorldEvent.Save event)
|
||||||
@@ -179,6 +207,11 @@ public class EventHookContainer
|
|||||||
if (event.world.provider.dimensionId == 0)
|
if (event.world.provider.dimensionId == 0)
|
||||||
{
|
{
|
||||||
PocketManager.save();
|
PocketManager.save();
|
||||||
|
|
||||||
|
if (mod_pocketDim.deathTracker.isModified())
|
||||||
|
{
|
||||||
|
mod_pocketDim.deathTracker.writeToFile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user