new radar targeting interface, second GUI, target localiaztion

This commit is contained in:
Boblet 2023-11-24 15:00:52 +01:00 committed by Bob
parent e40343b6dd
commit ba014d54f7
22 changed files with 405 additions and 29 deletions

View File

@ -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;

View File

@ -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) {

View File

@ -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 });

View File

@ -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;
}
}

View File

@ -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() {

View File

@ -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<ItemStack> getDebris() { return new ArrayList(); }
@Override public ItemStack getDebrisRareDrop() { return null; }
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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); }

View File

@ -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); }

View File

@ -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); }

View File

@ -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); }

View File

@ -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 {

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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;

View File

@ -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<RadarEntry> 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;
});

View File

@ -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

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB