package crazypants.enderio.machine.obelisk.inhibitor; import java.util.Map; import java.util.Map.Entry; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import com.enderio.core.common.util.BlockCoord; import com.google.common.collect.Maps; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import crazypants.enderio.GuiHandler; import crazypants.enderio.ModObject; import crazypants.enderio.api.teleport.TeleportEntityEvent; import crazypants.enderio.machine.AbstractMachineEntity; import crazypants.enderio.machine.obelisk.BlockObeliskAbstract; public class BlockInhibitorObelisk extends BlockObeliskAbstract<TileInhibitorObelisk> { public static BlockInhibitorObelisk instance; public static BlockInhibitorObelisk create() { BlockInhibitorObelisk res = new BlockInhibitorObelisk(); res.init(); MinecraftForge.EVENT_BUS.register(res); return instance = res; } protected BlockInhibitorObelisk() { super(ModObject.blockInhibitorObelisk, TileInhibitorObelisk.class); } @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { return ID == getGuiId() ? new ContainerInhibitorObelisk(player.inventory, (AbstractMachineEntity) world.getTileEntity(x, y, z)) : null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == getGuiId()) { TileInhibitorObelisk te = (TileInhibitorObelisk) world.getTileEntity(x, y, z); if(te != null) { return new GuiInhibitorObelisk(te, new ContainerInhibitorObelisk(player.inventory, te)); } } return null; } @Override protected int getGuiId() { return GuiHandler.GUI_ID_INHIBITOR; } public Map<BlockCoord, Float> activeInhibitors = Maps.newHashMap(); @SubscribeEvent public void onTeleport(TeleportEntityEvent event) { for (Entry<BlockCoord, Float> e : activeInhibitors.entrySet()) { BlockCoord bc = e.getKey(); int dist = bc.getDist(new BlockCoord(event.targetX, event.targetY, event.targetZ)); if(dist < e.getValue()) { TileEntity te = bc.getTileEntity(event.entity.worldObj); if(te instanceof TileInhibitorObelisk && ((TileInhibitorObelisk) te).isActive()) { event.setCanceled(true); } } } } }