From 2767e36e2c38d09c6f1dba51dfd92fef1c12c2e0 Mon Sep 17 00:00:00 2001 From: Waterpicker Date: Wed, 18 Jan 2017 18:43:19 -0600 Subject: [PATCH 1/3] Current code --- .../zixiken/dimdoors/blocks/BlockDimDoor.java | 12 ++++- .../dimdoors/blocks/BlockDimDoorBase.java | 50 ++++++++++++------- .../dimdoors/blocks/BlockDimDoorGold.java | 3 +- .../dimdoors/blocks/BlockDimDoorPersonal.java | 3 +- .../blocks/BlockDimDoorTransient.java | 3 +- .../dimdoors/blocks/BlockDimDoorUnstable.java | 3 +- .../dimdoors/blocks/BlockDimDoorWarp.java | 3 +- .../dimdoors/blocks/BlockTransTrapdoor.java | 5 +- .../com/zixiken/dimdoors/blocks/IDimDoor.java | 8 ++- .../com/zixiken/dimdoors/shared/Location.java | 39 ++++++++++++--- .../dimdoors/shared/TeleportHelper.java | 31 ++++++++++++ .../tileentities/DDTileEntityBase.java | 5 ++ .../tileentities/TileEntityDimDoor.java | 15 +++++- 13 files changed, 140 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/zixiken/dimdoors/shared/TeleportHelper.java diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java index 9d344e4b..abf8728e 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java @@ -1,8 +1,12 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; +import com.zixiken.dimdoors.shared.Location; +import com.zixiken.dimdoors.shared.RiftRegistry; +import com.zixiken.dimdoors.tileentities.DDTileEntityBase; import net.minecraft.block.material.Material; import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -19,7 +23,13 @@ public class BlockDimDoor extends BlockDimDoorBase { } @Override - public void placeLink(World world, BlockPos pos) { + public void placeLink(Location location) { + TileEntity te = location.getTileEntity(); + + if(te != null && te instanceof DDTileEntityBase) { + int id = ((DDTileEntityBase) te).riftID; + RiftRegistry.Instance.pair(id, id); + } } @Override diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java index 61c52506..4ca42083 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java @@ -3,7 +3,9 @@ package com.zixiken.dimdoors.blocks; import java.util.Random; import com.zixiken.dimdoors.DimDoors; +import com.zixiken.dimdoors.shared.Location; import com.zixiken.dimdoors.shared.RiftRegistry; +import com.zixiken.dimdoors.shared.TeleportHelper; import com.zixiken.dimdoors.tileentities.DDTileEntityBase; import com.zixiken.dimdoors.tileentities.TileEntityDimDoor; import javax.annotation.Nullable; @@ -22,6 +24,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Teleporter; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -34,7 +37,21 @@ public abstract class BlockDimDoorBase extends BlockDoor implements IDimDoor, IT @Override public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) { - enterDimDoor(world, pos, entity); + IBlockState down = world.getBlockState(pos.down()); + if (!world.isRemote && down.getBlock() == this) { + if (down.getValue(BlockDoor.OPEN) + && entity instanceof EntityPlayer + && isEntityFacingDoor(down, (EntityLivingBase) entity)) { + enterDimDoor(world, pos, entity); + this.toggleDoor(world, pos, false); + DimDoors.log(BlockDimDoorBase.class, "RiftID = " + getRiftTile(world, pos, world.getBlockState(pos)).riftID + " Derp"); + } + } else { + BlockPos up = pos.up(); + if (world.getBlockState(up).getBlock() == this) { + enterDimDoor(world, up, entity); + } + } } @Override @@ -66,8 +83,6 @@ public abstract class BlockDimDoorBase extends BlockDoor implements IDimDoor, IT @Override public void onBlockAdded(World world, BlockPos pos, IBlockState state) { if (state.getValue(BlockDoor.HALF) == EnumDoorHalf.UPPER) { - world.setTileEntity(pos, createNewTileEntity(world, 0)); - updateAttachedTile(world, pos); } } @@ -113,24 +128,25 @@ public abstract class BlockDimDoorBase extends BlockDoor implements IDimDoor, IT @Override public TileEntity createNewTileEntity(World world, int metadata) { - return new TileEntityDimDoor(); + TileEntityDimDoor dimDoor = new TileEntityDimDoor(); + updateAttachedTile(world, dimDoor.getPos()); + placeLink(new Location(world, dimDoor.getPos())); + + return dimDoor; } @Override public void enterDimDoor(World world, BlockPos pos, Entity entity) { - // Check that this is the top block of the door - IBlockState state = world.getBlockState(pos.down()); - if (!world.isRemote && state.getBlock() == this) { - if (state.getValue(BlockDoor.OPEN) - && entity instanceof EntityPlayer - && isEntityFacingDoor(state, (EntityLivingBase) entity)) { - this.toggleDoor(world, pos, false); - //DimDoors.log("RiftID = " + getRiftTile(world, pos, world.getBlockState(pos)).riftID); - } - } else { - BlockPos up = pos.up(); - if (world.getBlockState(up).getBlock() == this) { - enterDimDoor(world, up, entity); + TileEntity te = world.getTileEntity(pos); + + if(te != null && te instanceof DDTileEntityBase) { + DDTileEntityBase base = (DDTileEntityBase) te; + Location loc = RiftRegistry.Instance.getRiftLocation(base.pairedRiftID); + + if(loc != null && loc.getTileEntity() instanceof DDTileEntityBase) { + loc = ((DDTileEntityBase) loc.getTileEntity()).getTeleportTarget(); + + TeleportHelper.teleport(entity, loc); } } } diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java index e9fbc467..f33dc5df 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java @@ -1,6 +1,7 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; +import com.zixiken.dimdoors.shared.Location; import com.zixiken.dimdoors.tileentities.TileEntityDimDoorGold; import net.minecraft.block.material.Material; @@ -21,7 +22,7 @@ public class BlockDimDoorGold extends BlockDimDoorBase { } @Override - public void placeLink(World world, BlockPos pos) { + public void placeLink(Location location) { } @Override diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java index b5b320d2..244fcc5e 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java @@ -1,6 +1,7 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; +import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraft.util.math.BlockPos; @@ -18,7 +19,7 @@ public class BlockDimDoorPersonal extends BlockDimDoorBase { } @Override - public void placeLink(World world, BlockPos pos) { + public void placeLink(Location location) { } @Override diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java index 9058d4ea..d42c56a2 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java @@ -1,5 +1,6 @@ package com.zixiken.dimdoors.blocks; +import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; @@ -41,7 +42,7 @@ public class BlockDimDoorTransient extends BlockDimDoorBase { } @Override - public void placeLink(World world, BlockPos pos) { + public void placeLink(Location location) { } @Override diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java index 7b5f06a4..523c967d 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java @@ -1,6 +1,7 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; +import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Items; @@ -23,7 +24,7 @@ public class BlockDimDoorUnstable extends BlockDimDoorBase { } @Override - public void placeLink(World world, BlockPos pos) { + public void placeLink(Location location) { } @Override diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java index fb295c11..da7ab04e 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java @@ -1,6 +1,7 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; +import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraft.util.math.BlockPos; @@ -18,7 +19,7 @@ public class BlockDimDoorWarp extends BlockDimDoorBase { } @Override - public void placeLink(World world, BlockPos pos) { + public void placeLink(Location location) { } @Override diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java index c88cab07..dbce359b 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java @@ -3,6 +3,7 @@ package com.zixiken.dimdoors.blocks; import java.util.Random; import com.zixiken.dimdoors.DimDoors; +import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.Block; import net.minecraft.block.BlockTrapDoor; import net.minecraft.block.ITileEntityProvider; @@ -77,7 +78,7 @@ public class BlockTransTrapdoor extends BlockTrapDoor implements IDimDoor, ITile @Override public void onBlockAdded(World world, BlockPos pos, IBlockState state) { - this.placeLink(world, pos); + this.placeLink(new Location(world, pos)); world.setTileEntity(pos, createNewTileEntity(world, getMetaFromState(state))); } @@ -87,7 +88,7 @@ public class BlockTransTrapdoor extends BlockTrapDoor implements IDimDoor, ITile } @Override - public void placeLink(World world, BlockPos pos) { + public void placeLink(Location location) { } @Override diff --git a/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java b/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java index 3d10582a..532606eb 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java @@ -1,5 +1,6 @@ package com.zixiken.dimdoors.blocks; +import com.zixiken.dimdoors.shared.Location; import net.minecraft.entity.Entity; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; @@ -23,12 +24,9 @@ public interface IDimDoor { /** * called when a door is placed to determine how it will place a link * - * @param world - * @param x - * @param y - * @param z + * @param location */ - public void placeLink(World world, BlockPos pos); + public void placeLink(Location location); public Item getItemDoor(); diff --git a/src/main/java/com/zixiken/dimdoors/shared/Location.java b/src/main/java/com/zixiken/dimdoors/shared/Location.java index a570e4bb..fee26e83 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/Location.java +++ b/src/main/java/com/zixiken/dimdoors/shared/Location.java @@ -1,5 +1,6 @@ package com.zixiken.dimdoors.shared; +import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -13,22 +14,44 @@ import net.minecraftforge.common.DimensionManager; */ public class Location { - public int dimensionID; - public BlockPos pos; + private int dimensionID; + private BlockPos pos; - Location(int dimID, int x, int y, int z) { - this.dimensionID = dimID; - pos = new BlockPos(x, y, z); + public Location(World world, BlockPos pos) { + this(world.provider.getDimension(), pos); } - Location(int dimID, BlockPos pos) { + public Location(World world, int x, int y, int z) { + this(world, new BlockPos(x,y,z)); + } + + public Location(int dimID, int x, int y, int z) { + this(dimID, new BlockPos(x, y, z)); + } + + public Location(int dimID, BlockPos pos) { this.dimensionID = dimID; this.pos = pos.up(0); //copyOf } public TileEntity getTileEntity() { - World world = DimensionManager.getWorld(dimensionID); //@todo HOW? - return world.getTileEntity(pos); + return getWorld().getTileEntity(pos); + } + + public IBlockState getBlockState() { + return getWorld().getBlockState(getPos()); + } + + public BlockPos getPos() { + return pos; + } + + public World getWorld() { + return DimensionManager.getWorld(dimensionID); //@todo HOW? + } + + public int getDimensionID() { + return dimensionID; } static Location getLocation(TileEntity tileEntity) { diff --git a/src/main/java/com/zixiken/dimdoors/shared/TeleportHelper.java b/src/main/java/com/zixiken/dimdoors/shared/TeleportHelper.java new file mode 100644 index 00000000..2796bb0a --- /dev/null +++ b/src/main/java/com/zixiken/dimdoors/shared/TeleportHelper.java @@ -0,0 +1,31 @@ +package com.zixiken.dimdoors.shared; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.Teleporter; +import net.minecraft.world.WorldServer; + +public class TeleportHelper extends Teleporter { + + Location location; + + public TeleportHelper(Location location) { + super((WorldServer) location.getWorld()); + } + + @Override + public void placeInPortal(Entity entityIn, float rotationYaw) { + BlockPos pos = location.getPos(); + entityIn.setPositionAndUpdate(pos.getX() + .5, pos.getY() + .05, pos.getZ() + .5); + } + + public static void teleport(Entity entity, Location location) { + Teleporter tele = new TeleportHelper(location); + if (entity instanceof EntityPlayerMP) { + location.getWorld().getMinecraftServer().getPlayerList().transferPlayerToDimension((EntityPlayerMP) entity, location.getDimensionID(), tele); + } else { + location.getWorld().getMinecraftServer().getPlayerList().transferEntityToWorld(entity, entity.world.provider.getDimension(), (WorldServer) entity.world, (WorldServer) location.getWorld(), tele); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java index d0113207..97490d32 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java @@ -1,5 +1,6 @@ package com.zixiken.dimdoors.tileentities; +import com.zixiken.dimdoors.shared.Location; import com.zixiken.dimdoors.shared.RiftRegistry; import java.util.Random; import net.minecraft.block.state.IBlockState; @@ -84,4 +85,8 @@ public abstract class DDTileEntityBase extends TileEntity { this.markDirty(); } } + + public Location getTeleportTarget() { + return new Location(this.getWorld().provider.getDimension(), this.getPos()); + } } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java index 638b62fa..bc8130f4 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java @@ -2,13 +2,17 @@ package com.zixiken.dimdoors.tileentities; import java.util.Random; +import com.zixiken.dimdoors.blocks.BlockDimDoor; +import com.zixiken.dimdoors.shared.Location; +import com.zixiken.dimdoors.shared.RiftRegistry; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; public class TileEntityDimDoor extends DDTileEntityBase { public boolean openOrClosed; - public EnumFacing orientation; + public EnumFacing orientation = EnumFacing.SOUTH; public boolean hasExit; public byte lockStatus; public boolean isDungeonChainLink; @@ -30,7 +34,7 @@ public class TileEntityDimDoor extends DDTileEntityBase { @Override public NBTTagCompound writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); + super.writeToNBT(nbt); nbt.setBoolean("openOrClosed", this.openOrClosed); nbt.setBoolean("hasExit", this.hasExit); @@ -55,4 +59,11 @@ public class TileEntityDimDoor extends DDTileEntityBase { return rgbaColor; } + + /*@Override + public Location getTeleportTarget() { + EnumFacing facing = getWorld().getBlockState(getPos()).getValue(BlockDimDoor.FACING); + + return new Location(world, pos.offset(facing)); + }*/ } From 111f2f9b51258b0b1f2657da61dd24211fb776fe Mon Sep 17 00:00:00 2001 From: Mathijs Riezebos Date: Thu, 19 Jan 2017 04:06:13 +0100 Subject: [PATCH 2/3] Restructured Teleportation Reshaped the teleportation implementation in a way so that it fits my view on the structure. :P Removed redundant methods --- .../zixiken/dimdoors/blocks/BlockDimDoor.java | 16 ---------- .../dimdoors/blocks/BlockDimDoorBase.java | 30 ++++++------------- .../dimdoors/blocks/BlockDimDoorGold.java | 7 ----- .../dimdoors/blocks/BlockDimDoorPersonal.java | 7 ----- .../blocks/BlockDimDoorTransient.java | 6 ---- .../dimdoors/blocks/BlockDimDoorUnstable.java | 10 +------ .../dimdoors/blocks/BlockDimDoorWarp.java | 7 ----- .../dimdoors/blocks/BlockTransTrapdoor.java | 13 +------- .../com/zixiken/dimdoors/blocks/IDimDoor.java | 9 ------ .../com/zixiken/dimdoors/shared/Location.java | 4 +-- .../zixiken/dimdoors/shared/RiftRegistry.java | 5 ++++ .../tileentities/DDTileEntityBase.java | 3 ++ .../tileentities/TileEntityDimDoor.java | 16 ++++++---- .../dimdoors/tileentities/TileEntityRift.java | 5 ++++ .../tileentities/TileEntityTransTrapdoor.java | 7 +++++ 15 files changed, 44 insertions(+), 101 deletions(-) diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java index abf8728e..4634dccf 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoor.java @@ -1,14 +1,8 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; -import com.zixiken.dimdoors.shared.Location; -import com.zixiken.dimdoors.shared.RiftRegistry; -import com.zixiken.dimdoors.tileentities.DDTileEntityBase; import net.minecraft.block.material.Material; import net.minecraft.item.Item; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; public class BlockDimDoor extends BlockDimDoorBase { @@ -22,16 +16,6 @@ public class BlockDimDoor extends BlockDimDoorBase { setRegistryName(ID); } - @Override - public void placeLink(Location location) { - TileEntity te = location.getTileEntity(); - - if(te != null && te instanceof DDTileEntityBase) { - int id = ((DDTileEntityBase) te).riftID; - RiftRegistry.Instance.pair(id, id); - } - } - @Override public Item getItemDoor() { return ModItems.itemDimDoor; diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java index 4ca42083..9466ef16 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java @@ -3,9 +3,7 @@ package com.zixiken.dimdoors.blocks; import java.util.Random; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.shared.Location; import com.zixiken.dimdoors.shared.RiftRegistry; -import com.zixiken.dimdoors.shared.TeleportHelper; import com.zixiken.dimdoors.tileentities.DDTileEntityBase; import com.zixiken.dimdoors.tileentities.TileEntityDimDoor; import javax.annotation.Nullable; @@ -24,7 +22,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.Teleporter; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -42,9 +39,8 @@ public abstract class BlockDimDoorBase extends BlockDoor implements IDimDoor, IT if (down.getValue(BlockDoor.OPEN) && entity instanceof EntityPlayer && isEntityFacingDoor(down, (EntityLivingBase) entity)) { - enterDimDoor(world, pos, entity); this.toggleDoor(world, pos, false); - DimDoors.log(BlockDimDoorBase.class, "RiftID = " + getRiftTile(world, pos, world.getBlockState(pos)).riftID + " Derp"); + enterDimDoor(world, pos, entity); } } else { BlockPos up = pos.up(); @@ -128,26 +124,17 @@ public abstract class BlockDimDoorBase extends BlockDoor implements IDimDoor, IT @Override public TileEntity createNewTileEntity(World world, int metadata) { - TileEntityDimDoor dimDoor = new TileEntityDimDoor(); - updateAttachedTile(world, dimDoor.getPos()); - placeLink(new Location(world, dimDoor.getPos())); - - return dimDoor; + return new TileEntityDimDoor(); } @Override public void enterDimDoor(World world, BlockPos pos, Entity entity) { - TileEntity te = world.getTileEntity(pos); - - if(te != null && te instanceof DDTileEntityBase) { - DDTileEntityBase base = (DDTileEntityBase) te; - Location loc = RiftRegistry.Instance.getRiftLocation(base.pairedRiftID); - - if(loc != null && loc.getTileEntity() instanceof DDTileEntityBase) { - loc = ((DDTileEntityBase) loc.getTileEntity()).getTeleportTarget(); - - TeleportHelper.teleport(entity, loc); - } + DDTileEntityBase riftTile = getRiftTile(world, pos, world.getBlockState(pos)); + if (riftTile.tryTeleport(entity)) { + //player is succesfully teleported + } else { + //@todo some kind of message that teleporting wasn't successfull + //probably should only happen on personal dimdoors } } @@ -183,6 +170,7 @@ public abstract class BlockDimDoorBase extends BlockDoor implements IDimDoor, IT } } + //returns the DDTileEntityBase that is the tile entity belonging to the door block "state" at this "pos" in the "world" public DDTileEntityBase getRiftTile(World world, BlockPos pos, IBlockState state) { TileEntity tileEntity; if (state.getValue(BlockDoor.HALF) == EnumDoorHalf.LOWER) { diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java index f33dc5df..8eaaa901 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorGold.java @@ -1,13 +1,10 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; -import com.zixiken.dimdoors.shared.Location; import com.zixiken.dimdoors.tileentities.TileEntityDimDoorGold; - import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockDimDoorGold extends BlockDimDoorBase { @@ -21,10 +18,6 @@ public class BlockDimDoorGold extends BlockDimDoorBase { setRegistryName(ID); } - @Override - public void placeLink(Location location) { - } - @Override public Item getItemDoor() { return ModItems.itemDimDoorGold; diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java index 244fcc5e..c34146bd 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorPersonal.java @@ -1,11 +1,8 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; -import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.material.Material; import net.minecraft.item.Item; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; public class BlockDimDoorPersonal extends BlockDimDoorBase { @@ -18,10 +15,6 @@ public class BlockDimDoorPersonal extends BlockDimDoorBase { setRegistryName(ID); } - @Override - public void placeLink(Location location) { - } - @Override public Item getItemDoor() { return ModItems.itemDimDoorPersonal; diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java index d42c56a2..cc087a34 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorTransient.java @@ -1,13 +1,11 @@ package com.zixiken.dimdoors.blocks; -import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -41,10 +39,6 @@ public class BlockDimDoorTransient extends BlockDimDoorBase { } } - @Override - public void placeLink(Location location) { - } - @Override public Item getItemDoor() { return null; diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java index 523c967d..d712672f 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorUnstable.java @@ -1,15 +1,11 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; -import com.zixiken.dimdoors.shared.Location; +import java.util.Random; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Items; import net.minecraft.item.Item; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.Random; public class BlockDimDoorUnstable extends BlockDimDoorBase { @@ -23,10 +19,6 @@ public class BlockDimDoorUnstable extends BlockDimDoorBase { setLightLevel(.0F); } - @Override - public void placeLink(Location location) { - } - @Override public Item getItemDoor() { return ModItems.itemDimDoorChaos; diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java index da7ab04e..36107f84 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorWarp.java @@ -1,11 +1,8 @@ package com.zixiken.dimdoors.blocks; import com.zixiken.dimdoors.items.ModItems; -import com.zixiken.dimdoors.shared.Location; import net.minecraft.block.material.Material; import net.minecraft.item.Item; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; public class BlockDimDoorWarp extends BlockDimDoorBase { @@ -18,10 +15,6 @@ public class BlockDimDoorWarp extends BlockDimDoorBase { setRegistryName(ID); } - @Override - public void placeLink(Location location) { - } - @Override public Item getItemDoor() { return ModItems.itemDimDoorWarp; diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java index dbce359b..b39d2c6f 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockTransTrapdoor.java @@ -3,7 +3,7 @@ package com.zixiken.dimdoors.blocks; import java.util.Random; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.shared.Location; +import com.zixiken.dimdoors.tileentities.TileEntityTransTrapdoor; import net.minecraft.block.Block; import net.minecraft.block.BlockTrapDoor; import net.minecraft.block.ITileEntityProvider; @@ -21,7 +21,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; -import com.zixiken.dimdoors.tileentities.TileEntityTransTrapdoor; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -76,21 +75,11 @@ public class BlockTransTrapdoor extends BlockTrapDoor implements IDimDoor, ITile } } - @Override - public void onBlockAdded(World world, BlockPos pos, IBlockState state) { - this.placeLink(new Location(world, pos)); - world.setTileEntity(pos, createNewTileEntity(world, getMetaFromState(state))); - } - @Override public TileEntity createNewTileEntity(World world, int metadata) { return new TileEntityTransTrapdoor(); } - @Override - public void placeLink(Location location) { - } - @Override @SideOnly(Side.CLIENT) public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { diff --git a/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java b/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java index 532606eb..e6510563 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/IDimDoor.java @@ -1,9 +1,7 @@ package com.zixiken.dimdoors.blocks; -import com.zixiken.dimdoors.shared.Location; import net.minecraft.entity.Entity; import net.minecraft.item.Item; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -21,13 +19,6 @@ public interface IDimDoor { */ public void enterDimDoor(World world, BlockPos pos, Entity entity); - /** - * called when a door is placed to determine how it will place a link - * - * @param location - */ - public void placeLink(Location location); - public Item getItemDoor(); /** diff --git a/src/main/java/com/zixiken/dimdoors/shared/Location.java b/src/main/java/com/zixiken/dimdoors/shared/Location.java index fee26e83..ee9191f7 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/Location.java +++ b/src/main/java/com/zixiken/dimdoors/shared/Location.java @@ -47,14 +47,14 @@ public class Location { } public World getWorld() { - return DimensionManager.getWorld(dimensionID); //@todo HOW? + return DimensionManager.getWorld(dimensionID); } public int getDimensionID() { return dimensionID; } - static Location getLocation(TileEntity tileEntity) { + static Location getLocation(TileEntity tileEntity) {//@todo Location is not yet comparable, so a Location begotten by this method, can not be used to find a rift ID in the RiftRegistry World world = tileEntity.getWorld(); int dimID = world.provider.getDimension(); BlockPos blockPos = tileEntity.getPos(); diff --git a/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java b/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java index 21546b94..dc8fff7c 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java +++ b/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java @@ -9,6 +9,7 @@ import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.tileentities.DDTileEntityBase; import java.util.HashMap; import java.util.Map; +import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -118,4 +119,8 @@ public class RiftRegistry { public DDTileEntityBase getLastChangedRift() { return lastBrokenRift; } + + public void teleportEntityToRift(Entity entity, int pairedRiftID) { + TeleportHelper.teleport(entity, getRiftLocation(pairedRiftID)); + } } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java index 97490d32..00d8c28c 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java @@ -4,6 +4,7 @@ import com.zixiken.dimdoors.shared.Location; import com.zixiken.dimdoors.shared.RiftRegistry; import java.util.Random; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; @@ -89,4 +90,6 @@ public abstract class DDTileEntityBase extends TileEntity { public Location getTeleportTarget() { return new Location(this.getWorld().provider.getDimension(), this.getPos()); } + + public abstract boolean tryTeleport(Entity entity); } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java index bc8130f4..e2a029eb 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java @@ -1,12 +1,9 @@ package com.zixiken.dimdoors.tileentities; -import java.util.Random; - -import com.zixiken.dimdoors.blocks.BlockDimDoor; -import com.zixiken.dimdoors.shared.Location; import com.zixiken.dimdoors.shared.RiftRegistry; +import java.util.Random; +import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; public class TileEntityDimDoor extends DDTileEntityBase { @@ -66,4 +63,13 @@ public class TileEntityDimDoor extends DDTileEntityBase { return new Location(world, pos.offset(facing)); }*/ + + @Override + public boolean tryTeleport(Entity entity) { + if (!isPaired) { + //@todo try to automatically pair this door somehow + } + RiftRegistry.Instance.teleportEntityToRift(entity, pairedRiftID); + return true; + } } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java index 6fab7b95..9ecce440 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java @@ -142,4 +142,9 @@ public class TileEntityRift extends DDTileEntityBase implements ITickable { public float[] getRenderColor(Random rand) { return null; } + + @Override + public boolean tryTeleport(Entity entity) { + return false; //@todo, rift blade functionality? + } } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityTransTrapdoor.java b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityTransTrapdoor.java index 0e639d25..82c6f5ea 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityTransTrapdoor.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityTransTrapdoor.java @@ -1,6 +1,7 @@ package com.zixiken.dimdoors.tileentities; import java.util.Random; +import net.minecraft.entity.Entity; public class TileEntityTransTrapdoor extends DDTileEntityBase { @@ -18,4 +19,10 @@ public class TileEntityTransTrapdoor extends DDTileEntityBase { } return rgbaColor; } + + @Override + public boolean tryTeleport(Entity entity) { + //@todo teleport the player somewhere to the Overworld? + return false; + } } From ecc9ea39cf0dce40de1d92d20a989e43dc8188b5 Mon Sep 17 00:00:00 2001 From: Mathijs Riezebos Date: Thu, 19 Jan 2017 04:13:04 +0100 Subject: [PATCH 3/3] Privatized some variables As a contingency against misuse --- .../dimdoors/blocks/BlockDimDoorBase.java | 2 +- .../zixiken/dimdoors/items/ItemDoorBase.java | 6 +++--- .../dimdoors/items/ItemRiftConnectionTool.java | 8 ++++---- .../tileentities/DDTileEntityBase.java | 18 +++++++++++++++--- .../tileentities/TileEntityDimDoor.java | 4 ++-- 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java index 9466ef16..2ff0e9d0 100644 --- a/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java +++ b/src/main/java/com/zixiken/dimdoors/blocks/BlockDimDoorBase.java @@ -166,7 +166,7 @@ public abstract class BlockDimDoorBase extends BlockDoor implements IDimDoor, IT world.setBlockState(pos, ModBlocks.blockRift.getDefaultState()); DDTileEntityBase newRift = (DDTileEntityBase) world.getTileEntity(pos); newRift.loadDataFrom(origRift); - DimDoors.log(this.getClass(), "New Rift rift-ID after breaking door " + newRift.riftID); + DimDoors.log(this.getClass(), "New Rift rift-ID after breaking door " + newRift.getRiftID()); } } diff --git a/src/main/java/com/zixiken/dimdoors/items/ItemDoorBase.java b/src/main/java/com/zixiken/dimdoors/items/ItemDoorBase.java index 66c75817..8afd12f7 100644 --- a/src/main/java/com/zixiken/dimdoors/items/ItemDoorBase.java +++ b/src/main/java/com/zixiken/dimdoors/items/ItemDoorBase.java @@ -108,7 +108,7 @@ public abstract class ItemDoorBase extends ItemDoor { //start logging code if (possibleOldRift instanceof DDTileEntityBase) { // DDTileEntityBase oldRift = (DDTileEntityBase) possibleOldRift; - DimDoors.log(this.getClass(), "Old Rift rift-ID before placement: " + oldRift.riftID); + DimDoors.log(this.getClass(), "Old Rift rift-ID before placement: " + oldRift.getRiftID()); } //end of logging code EnumFacing enumfacing = EnumFacing.fromAngle((double) playerIn.rotationYaw); @@ -123,12 +123,12 @@ public abstract class ItemDoorBase extends ItemDoor { DDTileEntityBase newTileEntityDimDoor = (DDTileEntityBase) worldIn.getTileEntity(pos.up()); if (possibleOldRift instanceof DDTileEntityBase) { // DDTileEntityBase oldRift = (DDTileEntityBase) possibleOldRift; - DimDoors.log(this.getClass(), "Old Rift rift-ID after placement: " + oldRift.riftID); + DimDoors.log(this.getClass(), "Old Rift rift-ID after placement: " + oldRift.getRiftID()); newTileEntityDimDoor.loadDataFrom(oldRift); } else { newTileEntityDimDoor.register(); } - DimDoors.log(this.getClass(), "New Door rift-ID after placement: " + newTileEntityDimDoor.riftID); + DimDoors.log(this.getClass(), "New Door rift-ID after placement: " + newTileEntityDimDoor.getRiftID()); return EnumActionResult.SUCCESS; } else { diff --git a/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java b/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java index d812aa44..6762c1f5 100644 --- a/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java +++ b/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java @@ -61,12 +61,12 @@ public class ItemRiftConnectionTool extends ItemTool { } private ActionResult selectRift(ItemStack stack, World worldIn, DDTileEntityBase rift, EntityPlayer playerIn) { - DimDoors.log(this.getClass(), "Selecting rift with ID: " + rift.riftID); + DimDoors.log(this.getClass(), "Selecting rift with ID: " + rift.getRiftID()); NBTTagCompound compound = stack.getTagCompound(); if (compound.getBoolean("isInConnectMode")) { if (compound.hasKey("RiftID")) { int primaryRiftID = compound.getInteger("RiftID"); - int secondaryRiftID = rift.riftID; + int secondaryRiftID = rift.getRiftID(); if (!worldIn.isRemote) { DimDoors.log(this.getClass(), "Pairing rifts with IDs: " + primaryRiftID + " and " + secondaryRiftID); RiftRegistry.Instance.pair(primaryRiftID, secondaryRiftID); @@ -74,11 +74,11 @@ public class ItemRiftConnectionTool extends ItemTool { compound.removeTag("RiftID"); stack.damageItem(1, playerIn); } else { - compound.setInteger("RiftID", rift.riftID); + compound.setInteger("RiftID", rift.getRiftID()); } } else { if (!worldIn.isRemote) { - RiftRegistry.Instance.unpair(rift.riftID); + RiftRegistry.Instance.unpair(rift.getRiftID()); } stack.damageItem(1, playerIn); } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java index 00d8c28c..9accd999 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java @@ -12,9 +12,9 @@ import net.minecraft.world.World; public abstract class DDTileEntityBase extends TileEntity { - public boolean isPaired = false; - public int riftID = -1; //should not start at 0 - public int pairedRiftID = -1; + private boolean isPaired = false; + private int riftID = -1; //should not start at 0 + private int pairedRiftID = -1; /** * @@ -87,6 +87,18 @@ public abstract class DDTileEntityBase extends TileEntity { } } + public int getRiftID() { + return riftID; + } + + public int getPairedRiftID() { + return pairedRiftID; + } + + public boolean isPaired() { + return isPaired; + } + public Location getTeleportTarget() { return new Location(this.getWorld().provider.getDimension(), this.getPos()); } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java index e2a029eb..3beb516c 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityDimDoor.java @@ -66,10 +66,10 @@ public class TileEntityDimDoor extends DDTileEntityBase { @Override public boolean tryTeleport(Entity entity) { - if (!isPaired) { + if (!isPaired()) { //@todo try to automatically pair this door somehow } - RiftRegistry.Instance.teleportEntityToRift(entity, pairedRiftID); + RiftRegistry.Instance.teleportEntityToRift(entity, getPairedRiftID()); return true; } }