Finished implementing Personal Pockets
-any pocket created from within a personal pocket retains personal
status
-exit doors cannot be used in any personal pockets
-personal status is saved with dimData

fixed a bug that let trapdoors get around locks
fixed FoR not rendering properly
-inventory and world
This commit is contained in:
StevenRS11 2014-06-25 15:26:42 -04:00
parent 1410d4b251
commit 0f3d40ba60
5 changed files with 96 additions and 28 deletions

View file

@ -18,8 +18,10 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
import net.minecraftforge.event.terraingen.InitMapGenEvent; import net.minecraftforge.event.terraingen.InitMapGenEvent;
import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.event.world.WorldEvent;
import StevenDimDoors.mod_pocketDim.blocks.TransTrapdoor;
import StevenDimDoors.mod_pocketDim.config.DDProperties; import StevenDimDoors.mod_pocketDim.config.DDProperties;
import StevenDimDoors.mod_pocketDim.core.DDTeleporter; import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
import StevenDimDoors.mod_pocketDim.core.DimensionType;
import StevenDimDoors.mod_pocketDim.core.NewDimData; import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager; import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.items.ItemWarpDoor; import StevenDimDoors.mod_pocketDim.items.ItemWarpDoor;
@ -96,15 +98,12 @@ public class EventHookContainer
if(stack.getItem() instanceof ItemWarpDoor) if(stack.getItem() instanceof ItemWarpDoor)
{ {
NewDimData data = PocketManager.getDimensionData(world); NewDimData data = PocketManager.getDimensionData(world);
while(data.depth()>0)
if(data.getDimensionType() == DimensionType.PERSONAL)
{ {
if(PocketManager.getPersonalPocketMapping().containsValue(data)) mod_pocketDim.sendChat(event.entityPlayer,("Something prevents the Warp Door from tunneling out here"));
{ event.setCanceled(true);
mod_pocketDim.sendChat(event.entityPlayer,("Something prevents the Warp Door from tunneling out here")); return;
event.setCanceled(true);
return;
}
data = data.parent();
} }
} }
if (mod_pocketDim.itemDimensionalDoor.tryToPlaceDoor(stack, event.entityPlayer, world, if (mod_pocketDim.itemDimensionalDoor.tryToPlaceDoor(stack, event.entityPlayer, world,

View file

@ -50,7 +50,7 @@ public class TransTrapdoor extends BlockTrapDoor implements IDimDoor, ITileEntit
public boolean checkCanOpen(World world, int x, int y, int z, EntityPlayer player) public boolean checkCanOpen(World world, int x, int y, int z, EntityPlayer player)
{ {
DimLink link = PocketManager.getLink( x, y,z, world); DimLink link = PocketManager.getLink( x, y, z, world);
if(link==null||player==null) if(link==null||player==null)
{ {
return link==null; return link==null;
@ -78,7 +78,7 @@ public class TransTrapdoor extends BlockTrapDoor implements IDimDoor, ITileEntit
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
{ {
if(this.checkCanOpen(par1World, par3, par3, par4, par5EntityPlayer)) if(this.checkCanOpen(par1World, par2, par3, par4, par5EntityPlayer))
{ {
return super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9); return super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
} }
@ -97,13 +97,13 @@ public class TransTrapdoor extends BlockTrapDoor implements IDimDoor, ITileEntit
{ {
if (!world.isRemote && isTrapdoorOpen(world.getBlockMetadata(x, y, z))) if (!world.isRemote && isTrapdoorOpen(world.getBlockMetadata(x, y, z)))
{ {
this.onPoweredBlockChange(world, x, y, z, false);
DimLink link = PocketManager.getLink(x, y, z, world); DimLink link = PocketManager.getLink(x, y, z, world);
if (link != null) if (link != null)
{ {
DDTeleporter.traverseDimDoor(world, link, entity,this); DDTeleporter.traverseDimDoor(world, link, entity,this);
} }
super.onPoweredBlockChange(world, x, y, z, false);
} }
} }

View file

@ -429,7 +429,14 @@ public class PocketManager
return registerDimension(world.provider.dimensionId, null, DimensionType.ROOT); return registerDimension(world.provider.dimensionId, null, DimensionType.ROOT);
} }
public static NewDimData registerPersonalPocket(NewDimData parent, String playerName) /**
* method to register a new pocket with DD and with forge.
* @param parent
* @param type
* @param playername
* @return
*/
public static NewDimData registerPocket(NewDimData parent, DimensionType type, String playername)
{ {
if (parent == null) if (parent == null)
{ {
@ -438,23 +445,38 @@ public class PocketManager
DDProperties properties = DDProperties.instance(); DDProperties properties = DDProperties.instance();
int dimensionID = DimensionManager.getNextFreeDimId(); int dimensionID = DimensionManager.getNextFreeDimId();
DimensionManager.registerDimension(dimensionID, properties.PersonalPocketProviderID);
NewDimData data = registerDimension(dimensionID, (InnerDimData) parent, DimensionType.PERSONAL); //register a personal pocket
personalPocketsMapping.put(playerName, data); if(type == DimensionType.PERSONAL)
return data; {
if(playername == null)
{
throw new IllegalArgumentException("A personal pocket must be attached to a playername");
}
DimensionManager.registerDimension(dimensionID, properties.PersonalPocketProviderID);
NewDimData data = registerDimension(dimensionID, (InnerDimData) parent, type);
personalPocketsMapping.put(playername, data);
return data;
}
else
{ //register a pocket as personal if its parents are personal, but without a mapping.
if(parent.type == DimensionType.PERSONAL)
{
DimensionManager.registerDimension(dimensionID, properties.PersonalPocketProviderID);
NewDimData data = registerDimension(dimensionID, (InnerDimData) parent, DimensionType.PERSONAL);
return data;
}
//register a standard pocket
DimensionManager.registerDimension(dimensionID, properties.PocketProviderID);
return registerDimension(dimensionID, (InnerDimData) parent, type);
}
} }
public static NewDimData registerPocket(NewDimData parent, DimensionType type) public static NewDimData registerPocket(NewDimData parent, DimensionType type)
{ {
if (parent == null) return registerPocket(parent, type, null);
{
throw new IllegalArgumentException("parent cannot be null. A pocket dimension must always have a parent dimension.");
}
DDProperties properties = DDProperties.instance();
int dimensionID = DimensionManager.getNextFreeDimId();
DimensionManager.registerDimension(dimensionID, properties.PocketProviderID);
return registerDimension(dimensionID, (InnerDimData) parent, type);
} }
/** /**
* Registers a dimension with DD but NOT with forge. * Registers a dimension with DD but NOT with forge.

View file

@ -337,7 +337,7 @@ public class PocketBuilder
{ {
//Register a new dimension //Register a new dimension
NewDimData parent = PocketManager.getDimensionData(link.source().getDimension()); NewDimData parent = PocketManager.getDimensionData(link.source().getDimension());
NewDimData dimension = PocketManager.registerPersonalPocket(parent, player.getEntityName()); NewDimData dimension = PocketManager.registerPocket(parent, DimensionType.PERSONAL, player.getEntityName());
//Load a world //Load a world

View file

@ -15,15 +15,62 @@ public class PrivatePocketRender implements ISimpleBlockRenderingHandler
public PrivatePocketRender(int renderID) public PrivatePocketRender(int renderID)
{ {
super();
PrivatePocketRender.renderID = renderID; PrivatePocketRender.renderID = renderID;
} }
@Override @Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
{ {
Tessellator tessellator = Tessellator.instance;
float f2;
float f3;
int k;
block.setBlockBoundsForItemRender();
renderer.setRenderBoundsFromBlock(block);
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1.0F, 0.0F);
renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata));
tessellator.draw();
} if (renderer.useInventoryTint)
{
k = block.getRenderColor(metadata);
f2 = (float)(k >> 16 & 255) / 255.0F;
f3 = (float)(k >> 8 & 255) / 255.0F;
float f7 = (float)(k & 255) / 255.0F;
//GL11.glColor4f(f2 * par3, f3 * par3, f7 * par3, 1.0F);
}
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 1.0F, 0.0F);
renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata));
tessellator.draw();
if (renderer.useInventoryTint)
{
// GL11.glColor4f(par3, par3, par3, 1.0F);
}
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, -1.0F);
renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, 1.0F);
renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(-1.0F, 0.0F, 0.0F);
renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(1.0F, 0.0F, 0.0F);
renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata));
tessellator.draw();
GL11.glTranslatef(0.5F, 0.5F, 0.5F); }
@Override @Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)