diff --git a/src/main/java/api/hbm/entity/IRadarDetectableNT.java b/src/main/java/api/hbm/entity/IRadarDetectableNT.java index 19b3f85bf..0b327620c 100644 --- a/src/main/java/api/hbm/entity/IRadarDetectableNT.java +++ b/src/main/java/api/hbm/entity/IRadarDetectableNT.java @@ -15,11 +15,19 @@ 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; diff --git a/src/main/java/api/hbm/entity/RadarEntry.java b/src/main/java/api/hbm/entity/RadarEntry.java index 56bb41df4..91733b81e 100644 --- a/src/main/java/api/hbm/entity/RadarEntry.java +++ b/src/main/java/api/hbm/entity/RadarEntry.java @@ -7,34 +7,39 @@ 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; + /** 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) { + public RadarEntry(String name, int level, int x, int y, int z, int dim, boolean redstone) { this.unlocalizedName = name; this.blipLevel = level; this.posX = x; this.posY = y; this.posZ = z; this.dim = dim; + this.redstone = 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(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, redstone); } 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); + 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.motionY < 0); } 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); + this(player.getDisplayName(), IRadarDetectableNT.PLAYER, (int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ), player.dimension, true); } public void fromBytes(ByteBuf buf) { diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index a7a2b6e3f..caac98962 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -52,7 +52,7 @@ public class ConsumableRecipes { CraftingManager.addShapelessAuto(new ItemStack(ModItems.med_ptsd, 1), new Object[] { ModItems.med_ipecac }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.pancake, 1), new Object[] { REDSTONE.dust(), DIAMOND.dust(), Items.wheat, ModItems.bolt_tungsten, ModItems.wire_copper, STEEL.plate() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.pancake, 1), new Object[] { REDSTONE.dust(), EMERALD.dust(), Items.wheat, ModItems.bolt_tungsten, ModItems.wire_copper, STEEL.plate() }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.chocolate_milk, 1), new Object[] { KEY_ANYPANE, new ItemStack(Items.dye, 1, 3), Items.milk_bucket, KNO.block(), S.dust(), S.dust(), S.dust(), P_RED.dust() }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.chocolate_milk, 1), new Object[] { KEY_ANYPANE, new ItemStack(Items.dye, 1, 3), Items.milk_bucket, Fluids.NITROGLYCERIN.getDict(1_000) }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.loops), new Object[] { ModItems.flame_pony, Items.wheat, Items.sugar }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.loop_stew), new Object[] { ModItems.loops, ModItems.can_smart, Items.bowl }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.coffee), new Object[] { COAL.dust(), Items.milk_bucket, Items.potionitem, Items.sugar }); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java index 8c0ca9511..21657fafb 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java @@ -10,6 +10,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityMachineRadarNT; import api.hbm.entity.IRadarDetectable; +import api.hbm.entity.IRadarDetectableNT; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; @@ -23,7 +24,7 @@ import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.ForgeChunkManager.Ticket; import net.minecraftforge.common.ForgeChunkManager.Type; -public class EntityMissileAntiBallistic extends EntityThrowableInterp implements IChunkLoader, IRadarDetectable { +public class EntityMissileAntiBallistic extends EntityThrowableInterp implements IChunkLoader, IRadarDetectable, IRadarDetectableNT { private Ticket loaderTicket; public Entity tracking; @@ -226,4 +227,29 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements public RadarTargetType getTargetType() { return RadarTargetType.MISSILE_AB; } + + @Override + public String getUnlocalizedName() { + return "radar.target.abm"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER_AB; + } + + @Override + public boolean canBeSeenBy(Object radar) { + return true; + } + + @Override + public boolean paramsApplicable(RadarScanParams params) { + return params.scanMissiles; + } + + @Override + public boolean suppliesRedstone(RadarScanParams params) { + return false; + } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java index aa45fc7ef..9cc8c9456 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java @@ -9,6 +9,7 @@ import com.hbm.explosion.ExplosionLarge; import com.hbm.main.MainRegistry; import api.hbm.entity.IRadarDetectable; +import api.hbm.entity.IRadarDetectableNT; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.item.ItemStack; @@ -23,7 +24,7 @@ import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.ForgeChunkManager.Ticket; import net.minecraftforge.common.ForgeChunkManager.Type; -public abstract class EntityMissileBaseNT extends EntityThrowableInterp implements IChunkLoader, IRadarDetectable { +public abstract class EntityMissileBaseNT extends EntityThrowableInterp implements IChunkLoader, IRadarDetectable, IRadarDetectableNT { public int startX; public int startZ; @@ -62,6 +63,23 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen this.setSize(1.5F, 1.5F); } + + @Override + public boolean canBeSeenBy(Object radar) { + return true; + } + + @Override + public boolean paramsApplicable(RadarScanParams params) { + if(!params.scanMissiles) return false; + return true; + } + + @Override + public boolean suppliesRedstone(RadarScanParams params) { + if(params.smartMode && this.motionY >= 0) return false; + return true; + } @Override protected void entityInit() { diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java index f2ebf4584..7c82eb017 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java @@ -21,6 +21,7 @@ import com.hbm.items.weapon.ItemMissile.WarheadType; import com.hbm.main.MainRegistry; import api.hbm.entity.IRadarDetectable; +import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -233,6 +234,38 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo return RadarTargetType.MISSILE_TIER1; } + @Override + public String getUnlocalizedName() { + + ItemMissile part = (ItemMissile) Item.getItemById(this.dataWatcher.getWatchableObjectInt(10)); + PartSize top = part.top; + PartSize bottom = part.bottom; + + if(top == PartSize.SIZE_10 && bottom == PartSize.SIZE_10) return "radar.target.custom10"; + if(top == PartSize.SIZE_10 && bottom == PartSize.SIZE_15) return "radar.target.custom1015"; + if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_15) return "radar.target.custom15"; + if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_20) return "radar.target.custom1520"; + if(top == PartSize.SIZE_20 && bottom == PartSize.SIZE_20) return "radar.target.custom20"; + + return "radar.target.custom"; + } + + @Override + public int getBlipLevel() { + + ItemMissile part = (ItemMissile) Item.getItemById(this.dataWatcher.getWatchableObjectInt(10)); + PartSize top = part.top; + PartSize bottom = part.bottom; + + if(top == PartSize.SIZE_10 && bottom == PartSize.SIZE_10) return IRadarDetectableNT.TIER10; + if(top == PartSize.SIZE_10 && bottom == PartSize.SIZE_15) return IRadarDetectableNT.TIER10_15; + if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_15) return IRadarDetectableNT.TIER15; + if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_20) return IRadarDetectableNT.TIER15_20; + if(top == PartSize.SIZE_20 && bottom == PartSize.SIZE_20) return IRadarDetectableNT.TIER20; + + return IRadarDetectableNT.TIER1; + } + @Override public List getDebris() { return new ArrayList(); } @Override public ItemStack getDebrisRareDrop() { return null; } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileDoomsday.java b/src/main/java/com/hbm/entity/missile/EntityMissileDoomsday.java index e4f8609b4..63e14e7f3 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileDoomsday.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileDoomsday.java @@ -4,6 +4,7 @@ import java.util.List; import com.hbm.explosion.ExplosionLarge; +import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -108,4 +109,14 @@ public class EntityMissileDoomsday extends EntityMissileBaseNT { public RadarTargetType getTargetType() { return RadarTargetType.MISSILE_TIER4; } + + @Override + public String getUnlocalizedName() { + return "radar.target.doomsday"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER4; + } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java b/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java index 42edb75dd..356588f64 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java @@ -11,6 +11,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import api.hbm.entity.IRadarDetectableNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; @@ -64,4 +65,14 @@ public class EntityMissileShuttle extends EntityMissileBaseNT { public RadarTargetType getTargetType() { return RadarTargetType.MISSILE_TIER3; } + + @Override + public String getUnlocalizedName() { + return "radar.target.shuttle"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER3; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java index e3aee4b0b..d1d6ecba9 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java @@ -13,6 +13,9 @@ import com.hbm.entity.logic.EntityNukeExplosionMK3; import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.explosion.ExplosionNukeSmall; import com.hbm.items.ModItems; + +import api.hbm.entity.IRadarDetectableNT; + import com.hbm.items.ItemAmmoEnums.AmmoFatman; import net.minecraft.item.ItemStack; @@ -38,6 +41,16 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT { public RadarTargetType getTargetType() { return RadarTargetType.MISSILE_TIER0; } + + @Override + public String getUnlocalizedName() { + return "radar.target.tier0"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER0; + } public static class EntityMissileMicro extends EntityMissileTier0 { public EntityMissileMicro(World world) { super(world); } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java index 8fe5cae83..f640def7a 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java @@ -7,6 +7,7 @@ import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; import com.hbm.items.ModItems; +import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -29,6 +30,16 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT { return RadarTargetType.MISSILE_TIER1; } + @Override + public String getUnlocalizedName() { + return "radar.target.tier1"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER1; + } + public static class EntityMissileGeneric extends EntityMissileTier1 { public EntityMissileGeneric(World world) { super(world); } public EntityMissileGeneric(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java index 9296e0448..8c9917324 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java @@ -8,6 +8,7 @@ import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; import com.hbm.items.ModItems; +import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -33,6 +34,16 @@ public abstract class EntityMissileTier2 extends EntityMissileBaseNT { return RadarTargetType.MISSILE_TIER2; } + @Override + public String getUnlocalizedName() { + return "radar.target.tier2"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER2; + } + public static class EntityMissileStrong extends EntityMissileTier2 { public EntityMissileStrong(World world) { super(world); } public EntityMissileStrong(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java index 11c527b0e..17602263a 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java @@ -10,6 +10,7 @@ import com.hbm.explosion.ExplosionThermo; import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.items.ModItems; +import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -34,6 +35,16 @@ public abstract class EntityMissileTier3 extends EntityMissileBaseNT { public RadarTargetType getTargetType() { return RadarTargetType.MISSILE_TIER3; } + + @Override + public String getUnlocalizedName() { + return "radar.target.tier3"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER3; + } public static class EntityMissileBurst extends EntityMissileTier3 { public EntityMissileBurst(World world) { super(world); } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java index 7e859c779..826f4143f 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java @@ -10,6 +10,7 @@ import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionLarge; import com.hbm.items.ModItems; +import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -31,7 +32,17 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { @Override public RadarTargetType getTargetType() { - return RadarTargetType.MISSILE_TIER1; + return RadarTargetType.MISSILE_TIER4; + } + + @Override + public String getUnlocalizedName() { + return "radar.target.tier4"; + } + + @Override + public int getBlipLevel() { + return IRadarDetectableNT.TIER4; } public static class EntityMissileNuclear extends EntityMissileTier4 { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineRadarNT.java b/src/main/java/com/hbm/inventory/container/ContainerMachineRadarNT.java new file mode 100644 index 000000000..0bd1f475b --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineRadarNT.java @@ -0,0 +1,76 @@ +package com.hbm.inventory.container; + +import com.hbm.items.ModItems; +import com.hbm.tileentity.machine.TileEntityMachineRadarNT; + +import api.hbm.energy.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineRadarNT extends Container { + + private TileEntityMachineRadarNT radar; + + public ContainerMachineRadarNT(InventoryPlayer invPlayer, TileEntityMachineRadarNT tedf) { + this.radar = tedf; + + for(int i = 0; i < 8; i++) this.addSlotToContainer(new Slot(tedf, i, 26 + i * 18, 17)); + + this.addSlotToContainer(new Slot(tedf, 8, 26, 44)); + this.addSlotToContainer(new Slot(tedf, 9, 152, 44)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 103 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 161)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(par2 <= 9) { + if(!this.mergeItemStack(var5, 10, this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(var3.getItem() instanceof IBatteryItem || var3.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(var5, 9, 10, false)) { + return null; + } + } else { + if(!this.mergeItemStack(var5, 0, 9, false)) { + return null; + } + } + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return radar.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java index 3674c9ea9..8a937f3af 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java @@ -53,6 +53,8 @@ public class GUIMachineRadarNT extends GuiScreen { 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)); @@ -81,6 +83,8 @@ public class GUIMachineRadarNT extends GuiScreen { 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) { @@ -102,6 +106,7 @@ public class GUIMachineRadarNT extends GuiScreen { 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); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNTSlots.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNTSlots.java new file mode 100644 index 000000000..4cc5406c9 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNTSlots.java @@ -0,0 +1,69 @@ +package com.hbm.inventory.gui; + +import java.util.Arrays; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineRadarNT; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.TileEntityMachineRadarNT; +import com.hbm.util.I18nUtil; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.network.play.client.C0DPacketCloseWindow; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineRadarNTSlots extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_radar_link.png"); + private TileEntityMachineRadarNT radar; + + public GUIMachineRadarNTSlots(InventoryPlayer invPlayer, TileEntityMachineRadarNT tedf) { + super(new ContainerMachineRadarNT(invPlayer, tedf)); + radar = tedf; + + this.xSize = 176; + this.ySize = 184; + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(checkClick(x, y, 5, 5, 8, 8)) { + this.mc.thePlayer.sendQueue.addToSendQueue(new C0DPacketCloseWindow(this.mc.thePlayer.openContainer.windowId)); // closes the server-side GUI component without resetting the client's cursor position + FMLNetworkHandler.openGui(this.mc.thePlayer, MainRegistry.instance, 0, radar.getWorldObj(), radar.xCoord, radar.yCoord, radar.zCoord); + } + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + if(checkClick(mouseX, mouseY, 5, 5, 8, 8)) this.func_146283_a(Arrays.asList(I18nUtil.resolveKeyArray("radar.toggleGui")), mouseX, mouseY); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.radar.hasCustomInventoryName() ? this.radar.getInventoryName() : I18n.format(this.radar.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(radar.power > 0) { + int i = (int) (radar.power * 160 / radar.maxPower); + drawTexturedModalRect(guiLeft + 8, guiTop + 64, 0, 185, i, 16); + } + } + +} diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index e5b244fc5..1ae9a28e9 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -75,6 +75,10 @@ public abstract class GuiInfoContainer extends GuiContainer { return this.func_146978_c(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, x, y); } + 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; + } + /* Getters for external use of the GUI's rect rendering, such as NumberDisplay */ public int getGuiTop() { return this.guiTop; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 89ef0ec5c..9dba6fd2d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -11,8 +11,11 @@ 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.lib.Library; +import com.hbm.main.MainRegistry; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -23,6 +26,7 @@ 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; @@ -70,6 +74,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I public static int chunkLoadCap = 5; public byte[] map = new byte[40_000]; + public boolean clearFlag = false; public List entries = new ArrayList(); @@ -99,12 +104,12 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I } public TileEntityMachineRadarNT() { - super(1); + super(10); } @Override public String getName() { - return ""; + return "container.radar"; } @Override @@ -113,6 +118,8 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I 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); @@ -158,6 +165,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I } this.networkPackNT(50); + if(this.clearFlag) this.clearFlag = false; } else { prevRotation = rotation; if(power > 0) rotation += 5F; @@ -181,15 +189,20 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I buf.writeBoolean(this.jammed); buf.writeInt(entries.size()); for(RadarEntry entry : entries) entry.toBytes(buf); - if(this.showMap) { + if(this.clearFlag) { 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); + 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); + } } } @@ -210,10 +223,14 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I entry.fromBytes(buf); this.entries.add(entry); } - if(buf.readBoolean()) { - int index = buf.readShort(); - for(int i = index * 100; i < (index + 1) * 100; i++) { - this.map[i] = buf.readByte(); + 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(); + } } } } @@ -289,6 +306,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I 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); @@ -303,9 +321,10 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I int power = 0; for(int i = 0; i < entries.size(); i++) { - - if(entries.get(i).blipLevel + 1 > power) { - power = entries.get(i).blipLevel + 1; + RadarEntry e = entries.get(i); + if(!e.redstone) continue; + if(e.blipLevel + 1 > power) { + power = e.blipLevel + 1; } } @@ -340,14 +359,20 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I return this.isUseableByPlayer(player); } + @Override public void receiveControl(NBTTagCompound data) { } + @Override - public void receiveControl(NBTTagCompound data) { + 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); } AxisAlignedBB bb = null; @@ -375,12 +400,18 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I return 65536.0D; } - @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } + @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 @SideOnly(Side.CLIENT) public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUIMachineRadarNT(this); + if(ID == 0) return new GUIMachineRadarNT(this); + if(ID == 1) return new GUIMachineRadarNTSlots(player.inventory, this); + return null; } /** List of lambdas that are supplied a Pair with the entity and radar in question to generate a RadarEntry @@ -422,7 +453,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I Entity e = x.getX(); if(e instanceof IRadarDetectableNT) { IRadarDetectableNT detectable = (IRadarDetectableNT) e; - if(detectable.canBeSeenBy(x.getY()) && detectable.paramsApplicable(x.getZ())) return new RadarEntry(detectable, e); + if(detectable.canBeSeenBy(x.getY()) && detectable.paramsApplicable(x.getZ())) return new RadarEntry(detectable, e, detectable.suppliesRedstone(x.getZ())); } return null; }); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 0d3763b16..88e385bbc 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3439,10 +3439,14 @@ potion.hbm_stability=Stabilität potion.hbm_taint=Verdorben potion.hbm_telekinesis=! ! ! +radar.clearMap=Karte zurücksetzen radar.detectMissiles=Raketen erkennen radar.detectPlayers=Spieler erkennen +radar.detectShells=Geschosse erkennen radar.redMode=Redstone Mode$Ein: Redstonesignal basiert auf Nähe$Aus: Redstonesignal basiert auf Größe +radar.showMap=Karte anzeigen radar.smartMode=Smart Mode$Redstonesignal ignoriert aufsteigende Raketen +radar.toggleGui=Ansicht umschalten rbmk.heat=Komponententemperatur: %s rbmk.boiler.water=Wasser: %s / %s diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f45980c13..d0dc54d01 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3017,7 +3017,7 @@ item.mike_kit.name=Ivy Mike Kit item.mirror_tool.name=Mirror Adjustment Tool item.mirror_tool.linked=Alignment position set! item.mirror_tool.desc=Right-click boiler to memorize the position.$Click on mirrors to turn them towards the boiler. -item.missile_anti_ballistic.name=Anti Ballistic Missile +item.missile_anti_ballistic.name=Anti-Ballistic Missile item.missile_assembly.name=Small Missile Assembly item.missile_bhole.name=Black Hole Missile item.missile_burst.name=Spare Missile @@ -4368,10 +4368,28 @@ potion.hbm_stability=Stability potion.hbm_taint=Tainted potion.hbm_telekinesis=! ! ! +radar.clearMap=Clear Map radar.detectMissiles=Detect Missiles radar.detectPlayers=Detect Players +radar.detectShells=Detect Shells radar.redMode=Redstone Mode$On: Redstone output based on range$Off: Redstone output based on tier +radar.showMap=Show Map radar.smartMode=Smart Mode$Redstone output ignores ascending missiles +radar.toggleGui=Switch View + +radar.target.abm=Anti-Ballsitic Missile +radar.target.custom10=Size 10 Custom Missile +radar.target.custom1015=Size 10/15 Custom Missile +radar.target.custom15=Size 15 Custom Missile +radar.target.custom1520=Size 15/20 Custom Missile +radar.target.custom20=Size 20 Custom Missile +radar.target.doomsday=Doomsday Missile +radar.target.shuttle=Reliant Robin Space Shuttle +radar.target.tier0=Tier 0 Missile +radar.target.tier1=Tier 1 Missile +radar.target.tier2=Tier 2 Missile +radar.target.tier3=Tier 3 Missile +radar.target.tier4=Tier 4 Missile rbmk.heat=Column temperature: %s rbmk.boiler.water=Feedwater: %s / %s diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_link.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_link.png index dafca0ee5..423352af0 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_link.png and b/src/main/resources/assets/hbm/textures/gui/machine/gui_radar_link.png differ 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 095c54c69..572179845 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