Changed limbo trips to never kill the player

Solves the player not getting inventory back, especially for special
slots.
This commit is contained in:
StevenRS11
2013-09-06 15:36:12 -04:00
parent 6512327ee8
commit cff13e9bb5
5 changed files with 46 additions and 44 deletions

View File

@@ -1,12 +1,25 @@
package StevenDimDoors.mod_pocketDim; package StevenDimDoors.mod_pocketDim;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.DamageSource;
import net.minecraftforge.client.event.sound.SoundLoadEvent; import net.minecraftforge.client.event.sound.SoundLoadEvent;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.EventPriority;
import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingFallEvent;
import net.minecraftforge.event.entity.player.PlayerDropsEvent; import net.minecraftforge.event.entity.player.PlayerDropsEvent;
import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.event.world.WorldEvent;
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
import StevenDimDoors.mod_pocketDim.core.PocketManager; import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.ticking.RiftRegenerator; import StevenDimDoors.mod_pocketDim.ticking.RiftRegenerator;
import StevenDimDoors.mod_pocketDim.util.Point4D;
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
import StevenDimDoors.mod_pocketDim.world.PocketProvider;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@@ -56,11 +69,19 @@ public class EventHookContainer
event.setCanceled(event.entity.worldObj.provider.dimensionId == properties.LimboDimensionID); event.setCanceled(event.entity.worldObj.provider.dimensionId == properties.LimboDimensionID);
} }
@ForgeSubscribe
public void onPlayerDrops(PlayerDropsEvent event) @ForgeSubscribe(priority=EventPriority.HIGHEST)
public boolean LivingDeathEvent(LivingDeathEvent event)
{ {
//TODO: I have some doubts. Is this triggered even if you die outside Limbo? And do you still drop items that others could pick up? We don't cancel the event. ~SenseiKiwi Entity entity = event.entity;
mod_pocketDim.limboSpawnInventory.put(event.entityPlayer.username, event.drops); if(entity instanceof EntityPlayer&&entity.worldObj.provider instanceof PocketProvider && this.properties.LimboEnabled)
{
ChunkCoordinates coords = LimboProvider.getLimboSkySpawn(entity.worldObj.rand);
DDTeleporter.teleportEntity(entity, new Point4D(coords.posX,coords.posY,coords.posZ,mod_pocketDim.properties.LimboDimensionID));
((EntityLiving) entity).setEntityHealth(20);
event.setCanceled(true);
}
return true;
} }
@ForgeSubscribe @ForgeSubscribe

View File

@@ -38,42 +38,10 @@ public class PlayerRespawnTracker implements IPlayerTracker
} }
@Override @Override
public void onPlayerRespawn(EntityPlayer player) public void onPlayerRespawn(EntityPlayer player) {
{ // TODO Auto-generated method stub
if(player.worldObj.provider.dimensionId==properties.LimboDimensionID)
{
if(!player.worldObj.isRemote && properties.LimboReturnsInventoryEnabled)
{
if(player.username!=null)
{
if(!mod_pocketDim.limboSpawnInventory.isEmpty()&&mod_pocketDim.limboSpawnInventory.containsKey(player.username))
{
for(EntityItem drop : mod_pocketDim.limboSpawnInventory.get(player.username))
{
if(drop.getEntityItem().getItem() instanceof ItemArmor)
{
}
player.inventory.addItemStackToInventory(drop.getEntityItem());
}
}
}
}
}
} }
} }

View File

@@ -479,7 +479,7 @@ public class DDoorBase extends BlockContainer implements IDDoorLogic
*/ */
public int idPicked(World par1World, int par2, int par3, int par4) public int idPicked(World par1World, int par2, int par3, int par4)
{ {
return this.blockID; return this.getDrops();
} }
public int idDropped(int par1, Random par2Random, int par3) public int idDropped(int par1, Random par2Random, int par3)

View File

@@ -12,6 +12,13 @@ public final class Point4D implements Comparable<Point4D>
private final int z; private final int z;
private final int dimension; private final int dimension;
/**
*
* @param x
* @param y
* @param z
* @param dimension
*/
public Point4D(int x, int y, int z, int dimension) public Point4D(int x, int y, int z, int dimension)
{ {
this.x = x; this.x = x;

View File

@@ -1,5 +1,7 @@
package StevenDimDoors.mod_pocketDim.world; package StevenDimDoors.mod_pocketDim.world;
import java.util.Random;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.ChunkCoordinates;
@@ -163,8 +165,7 @@ public class LimboProvider extends WorldProvider
return false; return false;
} }
@Override public static ChunkCoordinates getLimboSkySpawn(Random rand)
public ChunkCoordinates getRandomizedSpawnPoint()
{ {
ChunkCoordinates var5 = new ChunkCoordinates(0,0,0); ChunkCoordinates var5 = new ChunkCoordinates(0,0,0);
@@ -173,11 +174,16 @@ public class LimboProvider extends WorldProvider
int spawnFuzzHalf = spawnFuzz / 2; int spawnFuzzHalf = spawnFuzz / 2;
{ {
var5.posX += this.worldObj.rand.nextInt(spawnFuzz) - spawnFuzzHalf; var5.posX += rand.nextInt(spawnFuzz) - spawnFuzzHalf;
var5.posZ += this.worldObj.rand.nextInt(spawnFuzz) - spawnFuzzHalf; var5.posZ += rand.nextInt(spawnFuzz) - spawnFuzzHalf;
var5.posY = 700; var5.posY = 700;
} }
return var5; return var5;
} }
@Override
public ChunkCoordinates getRandomizedSpawnPoint()
{
return getLimboSkySpawn(this.worldObj.rand);
}
} }