diff --git a/changelog b/changelog index 441e8123c..e03539fb7 100644 --- a/changelog +++ b/changelog @@ -1,12 +1,6 @@ -## Added -* Doors! - * Your favorites from 1.12, the 7 remaining doors have finally been ported - * Thanks to KoblizekXD for biting the bullet - ## Changed -* Reduced the blast resistance of the large doors from absurdly high to still very but not quite as high -* Custom missiles are now launchable using the radar -* NTM's structures should no longer spawn in dimensions besides the overworld. Ores will still generate, assuming the config option is set. +* Light oil and cracked light oil can now be refomred into large quantities of aromatic hydrocarbons a well as some reformate gas ## Fixed -* Fixed ancient bug where custom missiles launched using the launch table would not use the accuracy calculation and always be pin-point accurate \ No newline at end of file +* Fixed thorium bedrock ore using the wrong ore dict key, making it unable to be processed via centrifuge or acidizer +* Fixed custom machine NEI slots going out of bounds after the third slot \ No newline at end of file diff --git a/src/main/java/api/hbm/entity/IRadarDetectableNT.java b/src/main/java/api/hbm/entity/IRadarDetectableNT.java index 0b327620c..83c4bf503 100644 --- a/src/main/java/api/hbm/entity/IRadarDetectableNT.java +++ b/src/main/java/api/hbm/entity/IRadarDetectableNT.java @@ -15,31 +15,8 @@ public interface IRadarDetectableNT { public static final int TIER_AB = 10; public static final int PLAYER = 11; public static final int ARTY = 12; - /** Reserved type that shows a unique purple blip. Used for when nothing else applies. */ - public static final int SPECIAL = 13; - /** Name use for radar display, uses I18n for lookup */ public String getUnlocalizedName(); - /** The type of dot to show on the radar as well as the redstone level in tier mode */ public int getBlipLevel(); - /** Whether the object can be seen by this type of radar */ public boolean canBeSeenBy(Object radar); - /** Whether the object is currently visible, as well as whether the radar's setting allow for picking this up */ - public boolean paramsApplicable(RadarScanParams params); - /** Whether this radar entry should be counted for the redstone output */ - public boolean suppliesRedstone(RadarScanParams params); - - public static class RadarScanParams { - public boolean scanMissiles = true; - public boolean scanShells = true; - public boolean scanPlayers = true; - public boolean smartMode = true; - - public RadarScanParams(boolean m, boolean s, boolean p, boolean smart) { - this.scanMissiles = m; - this.scanShells = s; - this.scanPlayers = p; - this.smartMode = smart; - } - } } diff --git a/src/main/java/api/hbm/entity/RadarEntry.java b/src/main/java/api/hbm/entity/RadarEntry.java index 5dcc56845..56bb41df4 100644 --- a/src/main/java/api/hbm/entity/RadarEntry.java +++ b/src/main/java/api/hbm/entity/RadarEntry.java @@ -7,41 +7,34 @@ import net.minecraft.entity.player.EntityPlayer; public class RadarEntry { - /** Name use for radar display, uses I18n for lookup */ public String unlocalizedName; - /** The type of dot to show on the radar as well as the redstone level in tier mode */ public int blipLevel; public int posX; public int posY; public int posZ; public int dim; - public int entityID; - /** Whether this radar entry should be counted for the redstone output */ - public boolean redstone; public RadarEntry() { } //blank ctor for packets - public RadarEntry(String name, int level, int x, int y, int z, int dim, int entityID, boolean redstone) { + public RadarEntry(String name, int level, int x, int y, int z, int dim) { this.unlocalizedName = name; this.blipLevel = level; this.posX = x; this.posY = y; this.posZ = z; this.dim = dim; - this.entityID = entityID; - this.redstone = redstone; } - public RadarEntry(IRadarDetectableNT detectable, Entity entity, boolean redstone) { - this(detectable.getUnlocalizedName(), detectable.getBlipLevel(), (int) Math.floor(entity.posX), (int) Math.floor(entity.posY), (int) Math.floor(entity.posZ), entity.dimension, entity.getEntityId(), redstone); + public RadarEntry(IRadarDetectableNT detectable, Entity entity) { + this(detectable.getUnlocalizedName(), detectable.getBlipLevel(), (int) Math.floor(entity.posX), (int) Math.floor(entity.posY), (int) Math.floor(entity.posZ), entity.dimension); } public RadarEntry(IRadarDetectable detectable, Entity entity) { - this(detectable.getTargetType().name, detectable.getTargetType().ordinal(), (int) Math.floor(entity.posX), (int) Math.floor(entity.posY), (int) Math.floor(entity.posZ), entity.dimension, entity.getEntityId(), entity.motionY < 0); + this(detectable.getTargetType().name, detectable.getTargetType().ordinal(), (int) Math.floor(entity.posX), (int) Math.floor(entity.posY), (int) Math.floor(entity.posZ), entity.dimension); } public RadarEntry(EntityPlayer player) { - this(player.getDisplayName(), IRadarDetectableNT.PLAYER, (int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ), player.dimension, player.getEntityId(), true); + this(player.getDisplayName(), IRadarDetectableNT.PLAYER, (int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ), player.dimension); } public void fromBytes(ByteBuf buf) { @@ -51,7 +44,6 @@ public class RadarEntry { this.posY = buf.readInt(); this.posZ = buf.readInt(); this.dim = buf.readShort(); - this.entityID = buf.readInt(); } public void toBytes(ByteBuf buf) { @@ -61,6 +53,5 @@ public class RadarEntry { buf.writeInt(this.posY); buf.writeInt(this.posZ); buf.writeShort(this.dim); - buf.writeInt(this.entityID); } } diff --git a/src/main/java/com/hbm/handler/CompatHandler.java b/src/main/java/com/hbm/handler/CompatHandler.java index a8fec64c9..07d7fd20a 100644 --- a/src/main/java/com/hbm/handler/CompatHandler.java +++ b/src/main/java/com/hbm/handler/CompatHandler.java @@ -10,14 +10,12 @@ import com.hbm.inventory.fluid.Fluids; * Mostly just functions used across many TEs. */ public class CompatHandler { - public static Object[] steamTypeToInt(FluidType type) { - if(type == Fluids.STEAM) {return new Object[] {0};} //switches break because objects + if(type == Fluids.STEAM) {return new Object[] {0};} else if(type == Fluids.HOTSTEAM) {return new Object[] {1};} else if(type == Fluids.SUPERHOTSTEAM) {return new Object[] {2};} return new Object[] {3}; } - public static FluidType intToSteamType(int arg) { switch(arg) { default: @@ -30,5 +28,4 @@ public class CompatHandler { return Fluids.ULTRAHOTSTEAM; } } - } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java index accefedf1..3c91249bf 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java @@ -5,33 +5,22 @@ import java.util.Arrays; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.machine.TileEntityMachineRadarNT; -import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; -import api.hbm.entity.RadarEntry; import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Vec3; public class GUIMachineRadarNT extends GuiScreen { - public static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_radar_nt.png"); + protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_radar_nt.png"); protected TileEntityMachineRadarNT radar; protected int xSize = 216; protected int ySize = 234; protected int guiLeft; protected int guiTop; - - public int lastMouseX; - public int lastMouseY; public GUIMachineRadarNT(TileEntityMachineRadarNT tile) { this.radar = tile; @@ -44,29 +33,6 @@ public class GUIMachineRadarNT extends GuiScreen { this.guiTop = (this.height - this.ySize) / 2; } - @Override - protected void mouseClicked(int x, int y, int i) { - super.mouseClicked(x, y, i); - - String cmd = null; - - if(checkClick(x, y, -10, 88, 8, 8)) cmd = "missiles"; - if(checkClick(x, y, -10, 98, 8, 8)) cmd = "shells"; - if(checkClick(x, y, -10, 108, 8, 8)) cmd = "players"; - if(checkClick(x, y, -10, 118, 8, 8)) cmd = "smart"; - if(checkClick(x, y, -10, 128, 8, 8)) cmd = "red"; - if(checkClick(x, y, -10, 138, 8, 8)) cmd = "map"; - if(checkClick(x, y, -10, 158, 8, 8)) cmd = "gui1"; - if(checkClick(x, y, -10, 178, 8, 8)) cmd = "clear"; - - if(cmd != null) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean(cmd, true); - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, radar.xCoord, radar.yCoord, radar.zCoord)); - } - } - @Override public void drawScreen(int mouseX, int mouseY, float f) { this.drawDefaultBackground(); @@ -74,192 +40,24 @@ public class GUIMachineRadarNT extends GuiScreen { GL11.glDisable(GL11.GL_LIGHTING); this.drawGuiContainerForegroundLayer(mouseX, mouseY); GL11.glEnable(GL11.GL_LIGHTING); - - this.lastMouseX = mouseX; - this.lastMouseY = mouseY; } - private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - - if(checkClick(mouseX, mouseY, 8, 221, 200, 7)) this.func_146283_a(Arrays.asList(BobMathUtil.getShortNumber(radar.power) + "/" + BobMathUtil.getShortNumber(radar.maxPower) + "HE"), mouseX, mouseY); - - if(checkClick(mouseX, mouseY, -10, 88, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.detectMissiles")), mouseX, mouseY); - if(checkClick(mouseX, mouseY, -10, 98, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.detectShells")), mouseX, mouseY); - if(checkClick(mouseX, mouseY, -10, 108, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.detectPlayers")), mouseX, mouseY); - if(checkClick(mouseX, mouseY, -10, 118, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.smartMode")), mouseX, mouseY); - if(checkClick(mouseX, mouseY, -10, 128, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.redMode")), mouseX, mouseY); - if(checkClick(mouseX, mouseY, -10, 138, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.showMap")), mouseX, mouseY); - if(checkClick(mouseX, mouseY, -10, 158, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.toggleGui")), mouseX, mouseY); - if(checkClick(mouseX, mouseY, -10, 178, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.clearMap")), mouseX, mouseY); - - if(!radar.entries.isEmpty()) { - for(RadarEntry m : radar.entries) { - int x = guiLeft + (int)((m.posX - radar.xCoord) / ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) * (200D - 8D)) + 108; - int z = guiTop + (int)((m.posZ - radar.zCoord) / ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) * (200D - 8D)) + 117; - - if(mouseX + 5 > x && mouseX - 4 <= x && mouseY + 5 > z && mouseY - 4 <= z) { - - String[] text = new String[] { I18nUtil.resolveKey(m.unlocalizedName), m.posX + " / " + m.posZ, "Alt.: " + m.posY }; - this.func_146283_a(Arrays.asList(text), x, z); - return; - } - } - } - - if(checkClick(mouseX, mouseY, 8, 17, 200, 200)) { - int tX = (int) ((lastMouseX - guiLeft - 108) * ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) / 192D + radar.xCoord); - int tZ = (int) ((lastMouseY - guiTop - 117) * ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) / 192D + radar.zCoord); - this.func_146283_a(Arrays.asList(tX + " / " + tZ), lastMouseX, lastMouseY); - } + private void drawGuiContainerForegroundLayer(int x, int y) { + if(checkClick(x, y, -10, 88, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.detectMissiles")), x, y); + if(checkClick(x, y, -10, 98, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.detectShells")), x, y); + if(checkClick(x, y, -10, 108, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.detectPlayers")), x, y); + if(checkClick(x, y, -10, 118, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.smartMode")), x, y); + if(checkClick(x, y, -10, 128, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.redMode")), x, y); + if(checkClick(x, y, -10, 138, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.showMap")), x, y); } private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - drawTexturedModalRect(guiLeft - 14, guiTop + 84, 224, 0, 14, 66); - drawTexturedModalRect(guiLeft - 14, guiTop + 154, 224, 66, 14, 36); - - if(radar.power > 0) { - int i = (int) (radar.power * 200 / radar.maxPower); - drawTexturedModalRect(guiLeft + 8, guiTop + 221, 0, 234, i, 16); - } - - if(radar.scanMissiles ^ (radar.jammed && radar.getWorldObj().rand.nextBoolean())) drawTexturedModalRect(guiLeft - 10, guiTop + 88, 238, 4, 8, 8); - if(radar.scanShells ^ (radar.jammed && radar.getWorldObj().rand.nextBoolean())) drawTexturedModalRect(guiLeft - 10, guiTop + 98, 238, 14, 8, 8); - if(radar.scanPlayers ^ (radar.jammed && radar.getWorldObj().rand.nextBoolean())) drawTexturedModalRect(guiLeft - 10, guiTop + 108, 238, 24, 8, 8); - if(radar.smartMode ^ (radar.jammed && radar.getWorldObj().rand.nextBoolean())) drawTexturedModalRect(guiLeft - 10, guiTop + 118, 238, 34, 8, 8); - if(radar.redMode ^ (radar.jammed && radar.getWorldObj().rand.nextBoolean())) drawTexturedModalRect(guiLeft - 10, guiTop + 128, 238, 44, 8, 8); - if(radar.showMap ^ (radar.jammed && radar.getWorldObj().rand.nextBoolean())) drawTexturedModalRect(guiLeft - 10, guiTop + 138, 238, 54, 8, 8); - - if(radar.power < radar.consumption) return; - - if(radar.jammed) { - for(int i = 0; i < 5; i++) { - for(int j = 0; j < 5; j++) { - drawTexturedModalRect(guiLeft + 8 + i * 40, guiTop + 17 + j * 40, 216, 118 + radar.getWorldObj().rand.nextInt(81), 40, 40); - } - } - return; - } - - if(radar.showMap) { - Tessellator tess = Tessellator.instance; - GL11.glDisable(GL11.GL_TEXTURE_2D); - tess.startDrawingQuads(); - for(int i = 0; i < 40_000; i++) { - int iX = i % 200; - int iZ = i / 200; - byte b = radar.map[i]; - if(b > 0) { - int color = ((b - 50) * 255 / 78) << 8; - tess.setColorOpaque_I(color); - tess.addVertex(guiLeft + 8 + iX, guiTop + 18 + iZ, this.zLevel); - tess.addVertex(guiLeft + 9 + iX, guiTop + 18 + iZ, this.zLevel); - tess.addVertex(guiLeft + 9 + iX, guiTop + 17 + iZ, this.zLevel); - tess.addVertex(guiLeft + 8 + iX, guiTop + 17 + iZ, this.zLevel); - } - } - tess.draw(); - GL11.glEnable(GL11.GL_TEXTURE_2D); - } - - Vec3 tr = Vec3.createVectorHelper(100, 0, 0); - Vec3 tl = Vec3.createVectorHelper(100, 0, 0); - Vec3 bl = Vec3.createVectorHelper(0, -5, 0); - float rot = (float) -Math.toRadians(radar.prevRotation + (radar.rotation - radar.prevRotation) * f + 180F); - tr.rotateAroundZ(rot); - tl.rotateAroundZ(rot + 0.25F); - bl.rotateAroundZ(rot); - - GL11.glDisable(GL11.GL_TEXTURE_2D); - GL11.glEnable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glShadeModel(GL11.GL_SMOOTH); - Tessellator tess = Tessellator.instance; - tess.startDrawingQuads(); - tess.setColorRGBA_I(0x00ff00, 0); tess.addVertex(guiLeft + 108, guiTop + 117, this.zLevel); - tess.setColorRGBA_I(0x00ff00, 255); tess.addVertex(guiLeft + 108 + tr.xCoord, guiTop + 117 + tr.yCoord, this.zLevel); - tess.setColorRGBA_I(0x00ff00, 0); tess.addVertex(guiLeft + 108 + tl.xCoord, guiTop + 117 + tl.yCoord, this.zLevel); - tess.setColorRGBA_I(0x00ff00, 0); tess.addVertex(guiLeft + 108 + bl.xCoord, guiTop + 117 + bl.yCoord, this.zLevel); - tess.draw(); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glDisable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_ALPHA_TEST); - GL11.glShadeModel(GL11.GL_FLAT); - - if(!radar.entries.isEmpty()) { - for(RadarEntry m : radar.entries) { - double x = (m.posX - radar.xCoord) / ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) * (200D - 8D) - 4D; - double z = (m.posZ - radar.zCoord) / ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) * (200D - 8D) - 4D; - int t = m.blipLevel; - drawTexturedModalRectDouble(guiLeft + 108 + x, guiTop + 117 + z, 216, 8 * t, 8, 8); - } - } - } - - public void drawTexturedModalRectDouble(double x, double y, int sourceX, int sourceY, int sizeX, int sizeY) { - float f = 0.00390625F; - float f1 = 0.00390625F; - Tessellator tessellator = Tessellator.instance; - tessellator.startDrawingQuads(); - tessellator.addVertexWithUV(x, y + sizeY, this.zLevel, (sourceX + 0) * f, (sourceY + sizeY) * f1); - tessellator.addVertexWithUV(x + sizeX, y + sizeY, this.zLevel, (sourceX + sizeX) * f, (sourceY + sizeY) * f1); - tessellator.addVertexWithUV(x + sizeX, y, this.zLevel, (sourceX + sizeX) * f, (sourceY + 0) * f1); - tessellator.addVertexWithUV(x, y, this.zLevel, (sourceX + 0) * f, (sourceY + 0) * f1); - tessellator.draw(); } protected boolean checkClick(int x, int y, int left, int top, int sizeX, int sizeY) { return guiLeft + left <= x && guiLeft + left + sizeX > x && guiTop + top < y && guiTop + top + sizeY >= y; } - - @Override - protected void keyTyped(char c, int key) { - if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { - this.mc.thePlayer.closeScreen(); - } - - if(checkClick(lastMouseX, lastMouseY, 8, 17, 200, 200) && c >= '1' && c <= '8') { - - int id = c - '1'; - - if(!radar.entries.isEmpty()) { - for(RadarEntry m : radar.entries) { - int x = guiLeft + (int) ((m.posX - radar.xCoord) / ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) * (200D - 8D)) + 108; - int z = guiTop + (int) ((m.posZ - radar.zCoord) / ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) * (200D - 8D)) + 117; - - if(lastMouseX + 5 > x && lastMouseX - 4 <= x && lastMouseY + 5 > z && lastMouseY - 4 <= z) { - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("launchEntity", m.entityID); - data.setInteger("link", id); - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, radar.xCoord, radar.yCoord, radar.zCoord)); - return; - } - } - } - - int tX = (int) ((lastMouseX - guiLeft - 108) * ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) / 192D + radar.xCoord); - int tZ = (int) ((lastMouseY - guiTop - 117) * ((double) TileEntityMachineRadarNT.radarRange * 2 + 1) / 192D + radar.zCoord); - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("launchPosX", tX); - data.setInteger("launchPosZ", tZ); - data.setInteger("link", id); - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, radar.xCoord, radar.yCoord, radar.zCoord)); - } - } - - @Override - public boolean doesGuiPauseGame() { - return false; - } - - @Override - public void updateScreen() { - super.updateScreen(); - - if(!this.mc.thePlayer.isEntityAlive() || this.mc.thePlayer.isDead) { - this.mc.thePlayer.closeScreen(); - } - } } diff --git a/src/main/java/com/hbm/packet/BufPacket.java b/src/main/java/com/hbm/packet/BufPacket.java index 7ff502c9d..b2a158ef8 100644 --- a/src/main/java/com/hbm/packet/BufPacket.java +++ b/src/main/java/com/hbm/packet/BufPacket.java @@ -28,17 +28,11 @@ public class BufPacket implements IMessage { @Override public void fromBytes(ByteBuf buf) { - this.x = buf.readInt(); - this.y = buf.readInt(); - this.z = buf.readInt(); this.buf = buf; } @Override public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); this.rec.serialize(buf); } diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 9414d49a0..d56e9407a 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -19,6 +19,10 @@ public class PacketDispatcher { wrapper.registerMessage(TEStructurePacket.Handler.class, TEStructurePacket.class, i++, Side.CLIENT); //Mining drill rotation for rendering wrapper.registerMessage(TEDrillPacket.Handler.class, TEDrillPacket.class, i++, Side.CLIENT); + //Mining drill torque for sounds + wrapper.registerMessage(TEDrillSoundPacket.Handler.class, TEDrillSoundPacket.class, i++, Side.CLIENT); + //Missile type for rendering + wrapper.registerMessage(TEMissilePacket.Handler.class, TEMissilePacket.class, i++, Side.CLIENT); //Fluid packet for GUI wrapper.registerMessage(TEFluidPacket.Handler.class, TEFluidPacket.class, i++, Side.CLIENT); //Sound packet that keeps client and server separated @@ -31,6 +35,8 @@ public class PacketDispatcher { wrapper.registerMessage(TESirenPacket.Handler.class, TESirenPacket.class, i++, Side.CLIENT); //Signals server to change ItemStacks wrapper.registerMessage(ItemDesignatorPacket.Handler.class, ItemDesignatorPacket.class, i++, Side.SERVER); + //Siren packet for looped sounds + wrapper.registerMessage(TERadarPacket.Handler.class, TERadarPacket.class, i++, Side.CLIENT); //Signals server to perform orbital strike, among other things wrapper.registerMessage(SatLaserPacket.Handler.class, SatLaserPacket.class, i++, Side.SERVER); //Universal package for sending small info packs back to server diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadar.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadar.java new file mode 100644 index 000000000..805e7c35c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadar.java @@ -0,0 +1,342 @@ +package com.hbm.tileentity.machine; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.WeaponConfig; +import com.hbm.extprop.HbmLivingProps; +import com.hbm.inventory.container.ContainerMachineRadar; +import com.hbm.inventory.gui.GUIMachineRadar; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityTickingBase; + +import api.hbm.energy.IEnergyUser; +import api.hbm.entity.IRadarDetectable; +import api.hbm.entity.IRadarDetectable.RadarTargetType; +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.SimpleComponent; + +@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) +public class TileEntityMachineRadar extends TileEntityTickingBase implements IEnergyUser, IGUIProvider, SimpleComponent { + + public List detectedEntities = new ArrayList(); + public List nearbyMissiles = new ArrayList(); + int pingTimer = 0; + int lastPower; + final static int maxTimer = 80; + + public boolean scanMissiles = true; + public boolean scanPlayers = true; + public boolean smartMode = true; + public boolean redMode = true; + + public boolean jammed = false; + + public float prevRotation; + public float rotation; + + public long power = 0; + public static final int maxPower = 100000; + + @Override + public String getInventoryName() { + return ""; + } + + @Override + public void updateEntity() { + + if(this.yCoord < WeaponConfig.radarAltitude) return; + + if(!worldObj.isRemote) { + + this.updateStandardConnections(worldObj, xCoord, yCoord, zCoord); + + nearbyMissiles.clear(); + + if(power > 0) { + allocateMissiles(); + power -= 500; + + if(power < 0) power = 0; + } + + if(this.lastPower != getRedPower()) worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType()); + + sendMissileData(); + lastPower = getRedPower(); + + if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) != ModBlocks.muffler) { + + pingTimer++; + + if(power > 0 && pingTimer >= maxTimer) { + this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.sonarPing", 5.0F, 1.0F); + pingTimer = 0; + } + } + } else { + prevRotation = rotation; + if(power > 0) rotation += 5F; + + if(rotation >= 360) { + rotation -= 360F; + prevRotation -= 360F; + } + } + } + + public void handleButtonPacket(int value, int meta) { + + switch(meta) { + case 0: this.scanMissiles = !this.scanMissiles; break; + case 1: this.scanPlayers = !this.scanPlayers; break; + case 2: this.smartMode = !this.smartMode; break; + case 3: this.redMode = !this.redMode; break; + } + } + + private void allocateMissiles() { + + nearbyMissiles.clear(); + detectedEntities.clear(); + jammed = false; + + List list = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(xCoord + 0.5 - WeaponConfig.radarRange, 0, zCoord + 0.5 - WeaponConfig.radarRange, xCoord + 0.5 + WeaponConfig.radarRange, 5000, zCoord + 0.5 + WeaponConfig.radarRange)); + + for(Entity e : list) { + + if(e.posY < yCoord + WeaponConfig.radarBuffer) + continue; + + if(e instanceof EntityLivingBase && HbmLivingProps.getDigamma((EntityLivingBase) e) > 0.001) { + this.jammed = true; + nearbyMissiles.clear(); + detectedEntities.clear(); + return; + } + + if(e instanceof EntityPlayer && this.scanPlayers) { + nearbyMissiles.add(new int[] { (int)e.posX, (int)e.posZ, RadarTargetType.PLAYER.ordinal(), (int)e.posY }); + detectedEntities.add(e); + } + + if(e instanceof IRadarDetectable && this.scanMissiles) { + nearbyMissiles.add(new int[] { (int)e.posX, (int)e.posZ, ((IRadarDetectable)e).getTargetType().ordinal(), (int)e.posY }); + + if(!this.smartMode || e.motionY <= 0) + detectedEntities.add(e); + } + } + } + + public int getRedPower() { + + if(!detectedEntities.isEmpty()) { + + /// PROXIMITY /// + if(redMode) { + + double maxRange = WeaponConfig.radarRange * Math.sqrt(2D); + + int power = 0; + + for(int i = 0; i < detectedEntities.size(); i++) { + + Entity e = detectedEntities.get(i); + double dist = Math.sqrt(Math.pow(e.posX - xCoord, 2) + Math.pow(e.posZ - zCoord, 2)); + int p = 15 - (int)Math.floor(dist / maxRange * 15); + + if(p > power) + power = p; + } + + return power; + + /// TIER /// + } else { + + int power = 0; + + for(int i = 0; i < nearbyMissiles.size(); i++) { + + if(nearbyMissiles.get(i)[2] + 1 > power) { + power = nearbyMissiles.get(i)[2] + 1; + } + } + + return power; + } + } + + return 0; + } + + private void sendMissileData() { + + NBTTagCompound data = new NBTTagCompound(); + data.setLong("power", power); + data.setBoolean("scanMissiles", scanMissiles); + data.setBoolean("scanPlayers", scanPlayers); + data.setBoolean("smartMode", smartMode); + data.setBoolean("redMode", redMode); + data.setBoolean("jammed", jammed); + data.setInteger("count", this.nearbyMissiles.size()); + + for(int i = 0; i < this.nearbyMissiles.size(); i++) { + data.setInteger("x" + i, this.nearbyMissiles.get(i)[0]); + data.setInteger("z" + i, this.nearbyMissiles.get(i)[1]); + data.setInteger("type" + i, this.nearbyMissiles.get(i)[2]); + data.setInteger("y" + i, this.nearbyMissiles.get(i)[3]); + } + + this.networkPack(data, 15); + } + + public void networkUnpack(NBTTagCompound data) { + + this.nearbyMissiles.clear(); + this.power = data.getLong("power"); + this.scanMissiles = data.getBoolean("scanMissiles"); + this.scanPlayers = data.getBoolean("scanPlayers"); + this.smartMode = data.getBoolean("smartMode"); + this.redMode = data.getBoolean("redMode"); + this.jammed = data.getBoolean("jammed"); + + int count = data.getInteger("count"); + + for(int i = 0; i < count; i++) { + + int x = data.getInteger("x" + i); + int z = data.getInteger("z" + i); + int type = data.getInteger("type" + i); + int y = data.getInteger("y" + i); + + this.nearbyMissiles.add(new int[] {x, z, type, y}); + } + } + + public long getPowerScaled(long i) { + return (power * i) / maxPower; + } + + @Override + public void setPower(long i) { + power = i; + } + + @Override + public long getPower() { + return power; + } + + @Override + public long getMaxPower() { + return maxPower; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.power = nbt.getLong("power"); + this.scanMissiles = nbt.getBoolean("scanMissiles"); + this.scanPlayers = nbt.getBoolean("scanPlayers"); + this.smartMode = nbt.getBoolean("smartMode"); + this.redMode = nbt.getBoolean("redMode"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setLong("power", power); + nbt.setBoolean("scanMissiles", scanMissiles); + nbt.setBoolean("scanPlayers", scanPlayers); + nbt.setBoolean("smartMode", smartMode); + nbt.setBoolean("redMode", redMode); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return TileEntity.INFINITE_EXTENT_AABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 65536.0D; + } + + // do some opencomputer stuff + + @Override + public String getComponentName() { + return "ntm_radar"; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEnergyInfo(Context context, Arguments args) { + return new Object[] {getPower(), getMaxPower()}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] isJammed(Context context, Arguments args) { + return new Object[] {jammed}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEntities(Context context, Arguments args) { //fuck fuck fuck + if(!jammed) { + List list = new ArrayList(); + list.add(detectedEntities.size()); // small header of how many entities in the list + for (Entity e : detectedEntities) { + list.add(e.posX); // positions + list.add(e.posY); + list.add(e.posZ); + list.add(e.motionX); + list.add(e.motionY); + list.add(e.motionZ); + list.add(e.rotationYaw); // just do rotation so you can calculate DOT + list.add(Math.sqrt(Math.pow(e.posX - xCoord, 2) + Math.pow(e.posZ - zCoord, 2))); // distance + boolean player = e instanceof EntityPlayer; + list.add(player); // isPlayer boolean + if(!player) // missile tier + list.add(((IRadarDetectable) e).getTargetType().ordinal()); + else // player name (hopefully) + list.add(((EntityPlayer) e).getDisplayName()); + } + return new Object[] {list}; // long-ass list (like 9 entries per entity) + } else { + return new Object[] {"Radar jammed!"}; + } + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerMachineRadar(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIMachineRadar(player.inventory, this); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 9e9061ff1..d5911b2a2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -7,45 +7,27 @@ import java.util.function.Function; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; -import com.hbm.blocks.ModBlocks; -import com.hbm.config.WeaponConfig; import com.hbm.extprop.HbmLivingProps; -import com.hbm.interfaces.IControlReceiver; -import com.hbm.inventory.container.ContainerMachineRadarNT; import com.hbm.inventory.gui.GUIMachineRadarNT; -import com.hbm.inventory.gui.GUIMachineRadarNTSlots; -import com.hbm.items.ModItems; -import com.hbm.items.tool.ItemCoordinateBase; import com.hbm.lib.Library; -import com.hbm.main.MainRegistry; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IRadarCommandReceiver; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.util.Tuple.Triplet; -import com.hbm.util.fauxpointtwelve.BlockPos; -import com.hbm.world.WorldUtil; +import com.hbm.util.Tuple.Pair; -import api.hbm.energy.IEnergyUser; import api.hbm.entity.IRadarDetectable; import api.hbm.entity.IRadarDetectableNT; -import api.hbm.entity.IRadarDetectableNT.RadarScanParams; import api.hbm.entity.RadarEntry; -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.WorldServer; @@ -53,7 +35,7 @@ import net.minecraft.world.WorldServer; * Now with SmЯt™ lag-free entity detection! (patent pending) * @author hbm */ -public class TileEntityMachineRadarNT extends TileEntityMachineBase implements IEnergyUser, IGUIProvider, IConfigurableMachine, IControlReceiver { +public class TileEntityMachineRadarNT extends TileEntityMachineBase implements IGUIProvider, IConfigurableMachine { public boolean scanMissiles = true; public boolean scanShells = true; @@ -68,21 +50,12 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I public float rotation; public long power = 0; - - protected int pingTimer = 0; - protected int lastPower; - protected final static int maxTimer = 80; public static int maxPower = 100_000; public static int consumption = 500; public static int radarRange = 1_000; public static int radarBuffer = 30; public static int radarAltitude = 55; - public static int chunkLoadCap = 10; - public static boolean generateChunks = false; - - public byte[] map = new byte[40_000]; - public boolean clearFlag = false; public List entries = new ArrayList(); @@ -98,8 +71,6 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I radarRange = IConfigurableMachine.grab(obj, "I:radarRange", radarRange); radarBuffer = IConfigurableMachine.grab(obj, "I:radarBuffer", radarBuffer); radarAltitude = IConfigurableMachine.grab(obj, "I:radarAltitude", radarAltitude); - chunkLoadCap = IConfigurableMachine.grab(obj, "I:chunkLoadCap", chunkLoadCap); - generateChunks = IConfigurableMachine.grab(obj, "B:generateChunks", generateChunks); } @Override @@ -109,108 +80,65 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I writer.name("I:radarRange").value(radarRange); writer.name("I:radarBuffer").value(radarBuffer); writer.name("I:radarAltitude").value(radarAltitude); - writer.name("B:generateChunks").value(generateChunks); } public TileEntityMachineRadarNT() { - super(10); + super(1); } @Override public String getName() { - return "container.radar"; + return ""; } @Override public void updateEntity() { - if(this.map == null || this.map.length != 40_000) this.map = new byte[40_000]; - if(!worldObj.isRemote) { - this.power = Library.chargeTEFromItems(slots, 9, power, maxPower); - - if(worldObj.getTotalWorldTime() % 20 == 0) this.updateStandardConnections(worldObj, xCoord, yCoord, zCoord); - this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); this.jammed = false; allocateTargets(); - if(this.lastPower != getRedPower()) { - this.markDirty(); - } - lastPower = getRedPower(); + this.networkPackNT(25); + } + } + + protected void allocateTargets() { + this.entries.clear(); + + if(this.yCoord < radarAltitude) return; + if(this.power <= consumption) return; + this.power -= consumption; + + int scan = this.scanRange(); + + for(Entity e : matchingEntities) { - if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) != ModBlocks.muffler) { + if(e.dimension == worldObj.provider.dimensionId && Math.abs(e.posX - (xCoord + 0.5)) <= scan && Math.abs(e.posZ - (zCoord + 0.5)) <= scan && e.posY - yCoord < radarBuffer) { - pingTimer++; - - if(power > 0 && pingTimer >= maxTimer) { - this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.sonarPing", 5.0F, 1.0F); - pingTimer = 0; + if(e instanceof EntityLivingBase && HbmLivingProps.getDigamma((EntityLivingBase) e) > 0.001) { + this.jammed = true; + entries.clear(); + return; } - } - - if(this.showMap) { - int chunkLoads = 0; - for(int i = 0; i < 100; i++) { - int index = (int) (worldObj.getTotalWorldTime() % 400) * 100 + i; - int iX = (index % 200) * radarRange * 2 / 200; - int iZ = index / 200 * radarRange * 2 / 200; + + for(Function, RadarEntry> converter : converters) { - int x = xCoord - radarRange + iX; - int z = zCoord - radarRange + iZ; - - if(worldObj.getChunkProvider().chunkExists(x >> 4, z >> 4)) { - this.map[index] = (byte) MathHelper.clamp_int(worldObj.getHeightValue(x, z), 50, 128); - } else { - if(this.map[index] == 0 && chunkLoads < chunkLoadCap) { - if(this.generateChunks) { - worldObj.getChunkFromChunkCoords(x >> 4, z >> 4); - this.map[index] = (byte) MathHelper.clamp_int(worldObj.getHeightValue(x, z), 50, 128); - chunkLoads++; - } else { - WorldUtil.provideChunk((WorldServer) worldObj, x >> 4, z >> 4); - this.map[index] = (byte) MathHelper.clamp_int(worldObj.getHeightValue(x, z), 50, 128); - if(worldObj.getChunkProvider().chunkExists(x >> 4, z >> 4)) chunkLoads++; - } - } + RadarEntry entry = converter.apply(new Pair(e, this)); + if(entry != null) { + this.entries.add(entry); + break; } } } - - if(slots[8] != null && slots[8].getItem() == ModItems.radar_linker) { - BlockPos pos = ItemCoordinateBase.getPosition(slots[8]); - if(pos != null) { - TileEntity tile = worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); - if(tile instanceof TileEntityMachineRadarScreen) { - TileEntityMachineRadarScreen screen = (TileEntityMachineRadarScreen) tile; - screen.entries.clear(); - screen.entries.addAll(this.entries); - screen.refX = xCoord; - screen.refY = yCoord; - screen.refZ = zCoord; - screen.linked = true; - } - } - } - - this.networkPackNT(50); - if(this.clearFlag) { - this.map = new byte[40_000]; - this.clearFlag = false; - } - } else { - prevRotation = rotation; - if(power > 0) rotation += 5F; - - if(rotation >= 360) { - rotation -= 360F; - prevRotation -= 360F; - } } } + protected int scanRange() { + return radarRange; + } + @Override public void serialize(ByteBuf buf) { buf.writeLong(this.power); @@ -223,21 +151,6 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I buf.writeBoolean(this.jammed); buf.writeInt(entries.size()); for(RadarEntry entry : entries) entry.toBytes(buf); - if(this.clearFlag) { - buf.writeBoolean(true); - } else { - buf.writeBoolean(false); - if(this.showMap) { - buf.writeBoolean(true); - short index = (short) (worldObj.getTotalWorldTime() % 400); - buf.writeShort(index); - for(int i = index * 100; i < (index + 1) * 100; i++) { - buf.writeByte(this.map[i]); - } - } else { - buf.writeBoolean(false); - } - } } @Override @@ -251,193 +164,11 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I this.showMap = buf.readBoolean(); this.jammed = buf.readBoolean(); int count = buf.readInt(); - this.entries.clear(); for(int i = 0; i < count; i++) { RadarEntry entry = new RadarEntry(); entry.fromBytes(buf); this.entries.add(entry); } - if(buf.readBoolean()) { // clear flag - this.map = new byte[40_000]; - } else { - if(buf.readBoolean()) { // map enabled - int index = buf.readShort(); - for(int i = index * 100; i < (index + 1) * 100; i++) { - this.map[i] = buf.readByte(); - } - } - } - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - this.power = nbt.getLong("power"); - this.scanMissiles = nbt.getBoolean("scanMissiles"); - this.scanShells = nbt.getBoolean("scanShells"); - this.scanPlayers = nbt.getBoolean("scanPlayers"); - this.smartMode = nbt.getBoolean("smartMode"); - this.redMode = nbt.getBoolean("redMode"); - this.showMap = nbt.getBoolean("showMap"); - if(nbt.hasKey("map")) this.map = nbt.getByteArray("map"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setLong("power", power); - nbt.setBoolean("scanMissiles", scanMissiles); - nbt.setBoolean("scanShells", scanShells); - nbt.setBoolean("scanPlayers", scanPlayers); - nbt.setBoolean("smartMode", smartMode); - nbt.setBoolean("redMode", redMode); - nbt.setBoolean("showMap", showMap); - nbt.setByteArray("map", map); - } - - protected void allocateTargets() { - this.entries.clear(); - - if(this.yCoord < radarAltitude) return; - if(this.power < consumption) return; - this.power -= consumption; - - int scan = this.scanRange(); - - RadarScanParams params = new RadarScanParams(this.scanMissiles, this.scanShells, this.scanPlayers, this.smartMode); - - for(Entity e : matchingEntities) { - - if(e.dimension == worldObj.provider.dimensionId && Math.abs(e.posX - (xCoord + 0.5)) <= scan && Math.abs(e.posZ - (zCoord + 0.5)) <= scan && e.posY - yCoord > radarBuffer) { - - if(e instanceof EntityLivingBase && HbmLivingProps.getDigamma((EntityLivingBase) e) > 0.001) { - this.jammed = true; - entries.clear(); - return; - } - - for(Function, RadarEntry> converter : converters) { - - RadarEntry entry = converter.apply(new Triplet(e, this, params)); - if(entry != null) { - this.entries.add(entry); - break; - } - } - } - } - } - - public int getRedPower() { - - if(!entries.isEmpty()) { - - /// PROXIMITY /// - if(redMode) { - - double maxRange = WeaponConfig.radarRange * Math.sqrt(2D); - int power = 0; - - for(int i = 0; i < entries.size(); i++) { - RadarEntry e = entries.get(i); - if(!e.redstone) continue; - double dist = Math.sqrt(Math.pow(e.posX - xCoord, 2) + Math.pow(e.posZ - zCoord, 2)); - int p = 15 - (int)Math.floor(dist / maxRange * 15); - - if(p > power) power = p; - } - - return power; - - /// TIER /// - } else { - - int power = 0; - - for(int i = 0; i < entries.size(); i++) { - RadarEntry e = entries.get(i); - if(!e.redstone) continue; - if(e.blipLevel + 1 > power) { - power = e.blipLevel + 1; - } - } - - return power; - } - } - - return 0; - } - - protected int scanRange() { - return radarRange; - } - - @Override - public void setPower(long i) { - power = i; - } - - @Override - public long getPower() { - return power; - } - - @Override - public long getMaxPower() { - return maxPower; - } - - @Override - public boolean hasPermission(EntityPlayer player) { - return this.isUseableByPlayer(player); - } - - @Override public void receiveControl(NBTTagCompound data) { } - - @Override - public void receiveControl(EntityPlayer player, NBTTagCompound data) { - - if(data.hasKey("missiles")) this.scanMissiles = !this.scanMissiles; - if(data.hasKey("shells")) this.scanShells = !this.scanShells; - if(data.hasKey("players")) this.scanPlayers = !this.scanPlayers; - if(data.hasKey("smart")) this.smartMode = !this.smartMode; - if(data.hasKey("red")) this.redMode = !this.redMode; - if(data.hasKey("map")) this.showMap = !this.showMap; - if(data.hasKey("clear")) this.clearFlag = true; - - if(data.hasKey("gui1")) FMLNetworkHandler.openGui(player, MainRegistry.instance, 1, worldObj, xCoord, yCoord, zCoord); - - if(data.hasKey("link")) { - int id = data.getInteger("link"); - ItemStack link = slots[id]; - - if(link != null && link.getItem() == ModItems.radar_linker) { - BlockPos pos = ItemCoordinateBase.getPosition(link); - - if(pos != null) { - TileEntity tile = worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); - if(tile instanceof IRadarCommandReceiver) { - IRadarCommandReceiver rec = (IRadarCommandReceiver) tile; - - if(data.hasKey("launchEntity")) { - Entity entity = worldObj.getEntityByID(data.getInteger("launchEntity")); - if(entity != null) { - if(rec.sendCommandEntity(entity)) { - worldObj.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F); - } - } - } else if(data.hasKey("launchPosX")) { - int x = data.getInteger("launchPosX"); - int z = data.getInteger("launchPosZ"); - if(rec.sendCommandPosition(x, yCoord, z)) { - worldObj.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F); - } - } - } - } - } - } } AxisAlignedBB bb = null; @@ -461,36 +192,22 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() { + public double getMaxRenderDistanceSquared() + { return 65536.0D; } - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { - return false; - } else { - return player.getDistance(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128; - } - } - - @Override - public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - if(ID == 1) return new ContainerMachineRadarNT(player.inventory, this); - return null; - } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } @Override @SideOnly(Side.CLIENT) public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - if(ID == 0) return new GUIMachineRadarNT(this); - if(ID == 1) return new GUIMachineRadarNTSlots(player.inventory, this); - return null; + return new GUIMachineRadarNT(this); } /** List of lambdas that are supplied a Pair with the entity and radar in question to generate a RadarEntry The converters coming first have the highest priority */ - public static List, RadarEntry>> converters = new ArrayList(); + public static List, RadarEntry>> converters = new ArrayList(); public static List classes = new ArrayList(); public static List matchingEntities = new ArrayList(); @@ -501,7 +218,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I public static void updateSystem() { matchingEntities.clear(); - for(WorldServer world : MinecraftServer.getServer().worldServers) { + for(WorldServer world : Minecraft.getMinecraft().getIntegratedServer().worldServers) { for(Object entity : world.loadedEntityList) { for(Class clazz : classes) { if(clazz.isAssignableFrom(entity.getClass())) { @@ -524,25 +241,21 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I public static void registerConverters() { //IRadarDetectableNT converters.add(x -> { - Entity e = x.getX(); + Entity e = x.getKey(); if(e instanceof IRadarDetectableNT) { IRadarDetectableNT detectable = (IRadarDetectableNT) e; - if(detectable.canBeSeenBy(x.getY()) && detectable.paramsApplicable(x.getZ())) return new RadarEntry(detectable, e, detectable.suppliesRedstone(x.getZ())); + if(detectable.canBeSeenBy(x.getValue())) return new RadarEntry(detectable, e); } return null; }); //IRadarDetectable, Legacy converters.add(x -> { - Entity e = x.getX(); - RadarScanParams params = x.getZ(); - if(e instanceof IRadarDetectable && params.scanMissiles) { - return new RadarEntry((IRadarDetectable) e, e); - } + if(x.getKey() instanceof IRadarDetectable) return new RadarEntry((IRadarDetectable) x.getKey(), x.getKey()); return null; }); //Players converters.add(x -> { - if(x.getX() instanceof EntityPlayer && x.getZ().scanPlayers) return new RadarEntry((EntityPlayer) x.getX()); + if(x.getKey() instanceof EntityPlayer) return new RadarEntry((EntityPlayer) x.getKey()); return null; }); } diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_nt.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_nt.png index 572179845..690e1b5f5 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_nt.png and b/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_nt.png differ