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.terraingen.InitMapGenEvent;
import net.minecraftforge.event.world.WorldEvent;
import StevenDimDoors.mod_pocketDim.blocks.TransTrapdoor;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
import StevenDimDoors.mod_pocketDim.core.DimensionType;
import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.items.ItemWarpDoor;
@ -96,15 +98,12 @@ public class EventHookContainer
if(stack.getItem() instanceof ItemWarpDoor)
{
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);
return;
}
data = data.parent();
mod_pocketDim.sendChat(event.entityPlayer,("Something prevents the Warp Door from tunneling out here"));
event.setCanceled(true);
return;
}
}
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)
{
DimLink link = PocketManager.getLink( x, y,z, world);
DimLink link = PocketManager.getLink( x, y, z, world);
if(link==null||player==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)
{
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);
}
@ -97,13 +97,13 @@ public class TransTrapdoor extends BlockTrapDoor implements IDimDoor, ITileEntit
{
if (!world.isRemote && isTrapdoorOpen(world.getBlockMetadata(x, y, z)))
{
this.onPoweredBlockChange(world, x, y, z, false);
DimLink link = PocketManager.getLink(x, y, z, world);
if (link != null)
{
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);
}
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)
{
@ -438,23 +445,38 @@ public class PocketManager
DDProperties properties = DDProperties.instance();
int dimensionID = DimensionManager.getNextFreeDimId();
DimensionManager.registerDimension(dimensionID, properties.PersonalPocketProviderID);
NewDimData data = registerDimension(dimensionID, (InnerDimData) parent, DimensionType.PERSONAL);
personalPocketsMapping.put(playerName, data);
return data;
//register a personal pocket
if(type == DimensionType.PERSONAL)
{
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)
{
if (parent == 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);
return registerPocket(parent, type, null);
}
/**
* Registers a dimension with DD but NOT with forge.

View file

@ -337,7 +337,7 @@ public class PocketBuilder
{
//Register a new dimension
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

View file

@ -15,15 +15,62 @@ public class PrivatePocketRender implements ISimpleBlockRenderingHandler
public PrivatePocketRender(int renderID)
{
super();
PrivatePocketRender.renderID = renderID;
}
@Override
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
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)