diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 58c2b2422..1b7256727 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -910,6 +910,7 @@ public class ModBlocks { public static Block machine_teleporter; public static final int guiID_machine_teleporter = 36; + public static Block teleanchor; public static Block machine_reix_mainframe; public static final int guiID_machine_reix_mainframe = 38; @@ -1898,6 +1899,7 @@ public class ModBlocks { machine_combine_factory = new MachineCMBFactory(Material.iron).setBlockName("machine_combine_factory").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_teleporter = new MachineTeleporter(Material.iron).setBlockName("machine_teleporter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + teleanchor = new MachineTeleanchor().setBlockName("teleanchor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_rtg_grey = new MachineRTG(Material.iron).setBlockName("machine_rtg_grey").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg"); //machine_rtg_red = new MachineRTG(Material.iron).setBlockName("machine_rtg_red").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3206,6 +3208,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_schrabidium_transmutator, machine_schrabidium_transmutator.getUnlocalizedName()); GameRegistry.registerBlock(machine_combine_factory, machine_combine_factory.getUnlocalizedName()); GameRegistry.registerBlock(machine_teleporter, machine_teleporter.getUnlocalizedName()); + GameRegistry.registerBlock(teleanchor, teleanchor.getUnlocalizedName()); GameRegistry.registerBlock(machine_satlinker, machine_satlinker.getUnlocalizedName()); GameRegistry.registerBlock(machine_keyforge, machine_keyforge.getUnlocalizedName()); GameRegistry.registerBlock(machine_armor_table, machine_armor_table.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/MachineTeleanchor.java b/src/main/java/com/hbm/blocks/machine/MachineTeleanchor.java new file mode 100644 index 000000000..5b1d5b7db --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineTeleanchor.java @@ -0,0 +1,32 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockBase; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +public class MachineTeleanchor extends BlockBase { + + @SideOnly(Side.CLIENT) private IIcon iconTop; + + public MachineTeleanchor() { + super(Material.iron); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":teleanchor_top"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":teleanchor_side"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return side == 1 ? this.iconTop : this.blockIcon; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java b/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java index 645f3fe18..ac7db1bec 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java @@ -22,9 +22,8 @@ import net.minecraft.world.World; public class MachineTeleporter extends BlockContainer { - @SideOnly(Side.CLIENT) - private IIcon iconTop; - private IIcon iconBottom; + @SideOnly(Side.CLIENT) private IIcon iconTop; + @SideOnly(Side.CLIENT) private IIcon iconBottom; @Override @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/blocks/siege/SiegeShield.java b/src/main/java/com/hbm/blocks/siege/SiegeShield.java index 32bdf2827..3080671bb 100644 --- a/src/main/java/com/hbm/blocks/siege/SiegeShield.java +++ b/src/main/java/com/hbm/blocks/siege/SiegeShield.java @@ -19,7 +19,7 @@ public class SiegeShield extends SiegeBase { @Override public void updateTick(World world, int x, int y, int z, Random rand) { - if(SiegeOrchestrator.siegeMobCount > SiegeOrchestrator.getExpansionThreshold(world) || !SiegeOrchestrator.enableBaseSpawning(world)) + if(SiegeOrchestrator.siegeMobCount > SiegeOrchestrator.getExpansionThreshold(world) || !SiegeOrchestrator.enableBaseSpawning(world) || !SiegeOrchestrator.siegeEnabled(world)) return; int succ = 0; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 0d6b682b9..728a13cda 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2400,6 +2400,7 @@ public class ModItems { public static Item crate_caller; public static Item bomb_caller; public static Item meteor_remote; + public static Item anchor_remote; public static Item remote; //public static Item turret_control; public static Item turret_chip; @@ -4820,6 +4821,7 @@ public class ModItems { crate_caller = new ItemCrateCaller().setUnlocalizedName("crate_caller").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":crate_caller"); bomb_caller = new ItemBombCaller().setUnlocalizedName("bomb_caller").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bomb_caller"); meteor_remote = new ItemMeteorRemote().setUnlocalizedName("meteor_remote").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":meteor_remote"); + anchor_remote = new ItemAnchorRemote().setUnlocalizedName("anchor_remote").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":anchor_remote"); spawn_chopper = new ItemChopper().setUnlocalizedName("chopper").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":chopper"); spawn_worm = new ItemChopper().setUnlocalizedName("spawn_worm").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_worm"); spawn_ufo = new ItemChopper().setUnlocalizedName("spawn_ufo").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_ufo"); @@ -8013,6 +8015,7 @@ public class ModItems { GameRegistry.registerItem(crate_caller, crate_caller.getUnlocalizedName()); GameRegistry.registerItem(bomb_caller, bomb_caller.getUnlocalizedName()); GameRegistry.registerItem(meteor_remote, meteor_remote.getUnlocalizedName()); + GameRegistry.registerItem(anchor_remote, anchor_remote.getUnlocalizedName()); GameRegistry.registerItem(defuser, defuser.getUnlocalizedName()); GameRegistry.registerItem(reacher, reacher.getUnlocalizedName()); GameRegistry.registerItem(bismuth_tool, bismuth_tool.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemBattery.java b/src/main/java/com/hbm/items/machine/ItemBattery.java index 3f281f9e2..4f0fda9a7 100644 --- a/src/main/java/com/hbm/items/machine/ItemBattery.java +++ b/src/main/java/com/hbm/items/machine/ItemBattery.java @@ -17,9 +17,9 @@ import net.minecraft.nbt.NBTTagCompound; public class ItemBattery extends Item implements IBatteryItem { - private long maxCharge; - private long chargeRate; - private long dischargeRate; + protected long maxCharge; + protected long chargeRate; + protected long dischargeRate; public ItemBattery(long dura, long chargeRate, long dischargeRate) { this.maxCharge = dura; diff --git a/src/main/java/com/hbm/items/tool/ItemAnchorRemote.java b/src/main/java/com/hbm/items/tool/ItemAnchorRemote.java new file mode 100644 index 000000000..9fb384f23 --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemAnchorRemote.java @@ -0,0 +1,105 @@ +package com.hbm.items.tool; + +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBattery; +import com.hbm.util.BobMathUtil; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class ItemAnchorRemote extends ItemBattery { + + public ItemAnchorRemote() { + super(1_000_000, 10_000, 0); + } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + + long charge = maxCharge; + + if(itemstack.hasTagCompound()) + charge = getCharge(itemstack); + + if(itemstack.getItem() != ModItems.fusion_core && itemstack.getItem() != ModItems.energy_core) { + list.add("Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE"); + } else { + String charge1 = BobMathUtil.getShortNumber((charge * 100) / this.maxCharge); + list.add("Charge: " + charge1 + "%"); + list.add("(" + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE)"); + } + + list.add("Charge rate: " + BobMathUtil.getShortNumber(chargeRate) + "HE/t"); + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + + if(world.getBlock(x, y, z) == ModBlocks.teleanchor) { + + if(!stack.hasTagCompound()) + stack.stackTagCompound = new NBTTagCompound(); + + stack.stackTagCompound.setInteger("x", x); + stack.stackTagCompound.setInteger("y", y); + stack.stackTagCompound.setInteger("z", z); + + return true; + } + + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + if(player.isSneaking() || world.isRemote) { + return stack; + } + + if(!stack.hasTagCompound()) { + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return stack; + } + + if(this.getCharge(stack) < 10_000) { + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return stack; + } + + int x = stack.stackTagCompound.getInteger("x"); + int y = stack.stackTagCompound.getInteger("y"); + int z = stack.stackTagCompound.getInteger("z"); + + world.getChunkProvider().loadChunk(x >> 4, z >> 4); + + if(world.getBlock(x, y, z) == ModBlocks.teleanchor) { + + if(player.isRiding()) { + player.mountEntity(null); + } + + world.newExplosion(player, x + 0.5, y + 1 + player.height / 2, z + 0.5, 2F, false, false); + world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F); + player.setPositionAndUpdate(x + 0.5, y + 1, z + 0.5); + //world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F); + player.fallDistance = 0.0F; + + for(int i = 0; i < 32; ++i) { + world.spawnParticle("portal", player.posX, player.posY + player.getRNG().nextDouble() * 2.0D, player.posZ, player.getRNG().nextGaussian(), 0.0D, player.getRNG().nextGaussian()); + } + + this.dischargeBattery(stack, 10_000); + + } else { + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + } + + return stack; + } +} diff --git a/src/main/java/com/hbm/items/tool/ItemDiscord.java b/src/main/java/com/hbm/items/tool/ItemDiscord.java index bb29d102e..75f8893de 100644 --- a/src/main/java/com/hbm/items/tool/ItemDiscord.java +++ b/src/main/java/com/hbm/items/tool/ItemDiscord.java @@ -14,33 +14,33 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class ItemDiscord extends Item { - + @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - + MovingObjectPosition pos = Library.rayTrace(player, 100, 1); - + if(pos.typeOfHit == MovingObjectType.BLOCK) { if(!world.isRemote) { - - if(player.isRiding()) - player.mountEntity(null); - - ForgeDirection dir = ForgeDirection.getOrientation(pos.sideHit); - world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F); - - player.setPositionAndUpdate(pos.hitVec.xCoord + dir.offsetX, pos.hitVec.yCoord + dir.offsetY - 1, pos.hitVec.zCoord + dir.offsetZ); - - world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F); - player.fallDistance = 0.0F; + if(player.isRiding()) + player.mountEntity(null); + + ForgeDirection dir = ForgeDirection.getOrientation(pos.sideHit); + + world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F); + + player.setPositionAndUpdate(pos.hitVec.xCoord + dir.offsetX, pos.hitVec.yCoord + dir.offsetY - 1, pos.hitVec.zCoord + dir.offsetZ); + + world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F); + player.fallDistance = 0.0F; } - for (int i = 0; i < 32; ++i) - world.spawnParticle("portal", player.posX, player.posY + player.getRNG().nextDouble() * 2.0D, player.posZ, player.getRNG().nextGaussian(), 0.0D, player.getRNG().nextGaussian()); + for(int i = 0; i < 32; ++i) + world.spawnParticle("portal", player.posX, player.posY + player.getRNG().nextDouble() * 2.0D, player.posZ, player.getRNG().nextGaussian(), 0.0D, player.getRNG().nextGaussian()); } - + return stack; } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 5f4344b4f..5d63e14df 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -896,6 +896,9 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.charger, 16), new Object[] { "G", "S", "C", 'G', Blocks.glowstone, 'S', STEEL.block(), 'C', ModItems.coil_copper_torus }); addRecipeAuto(new ItemStack(ModBlocks.press_preheater), new Object[] { "CCC", "SLS", "TST", 'C', ModItems.board_copper, 'S', Blocks.stone, 'L', Fluids.LAVA.getDict(1000), 'T', W.ingot() }); addRecipeAuto(new ItemStack(ModItems.fluid_identifier_multi), new Object[] { "D", "C", "P", 'D', "dye", 'C', ModItems.circuit_aluminium, 'P', ANY_PLASTIC.ingot() }); + + addShapelessAuto(ItemBattery.getEmptyBattery(ModItems.anchor_remote), new Object[] { DIAMOND.gem(), ModItems.ducttape, ModItems.circuit_red_copper }); + addRecipeAuto(new ItemStack(ModBlocks.teleanchor), new Object[] { "ODO", "EAE", "ODO", 'O', Blocks.obsidian, 'D', DIAMOND.gem(), 'E', ModItems.powder_magic, 'A', ModItems.gem_alexandrite }); addShapelessAuto(new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_RESTORED.ordinal()), new Object[] { new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_DIGAMMA.ordinal()), KEY_TOOL_SCREWDRIVER, ModItems.ducttape, ModItems.armor_polish }); addShapelessAuto(new ItemStack(ModItems.holotape_damaged), new Object[] { DictFrame.fromOne(ModItems.holotape_image, EnumHoloImage.HOLO_RESTORED), ModBlocks.muffler, ModItems.crt_display, ModItems.gem_alexandrite /* placeholder for amplifier */ }); diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java index 98e3b661a..1bb2d49c9 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java @@ -6,6 +6,7 @@ import java.util.List; import com.hbm.inventory.container.ContainerTurretBase; import com.hbm.inventory.gui.GUITurretHIMARS; import com.hbm.items.ModItems; +import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; @@ -15,10 +16,16 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; import net.minecraft.world.World; public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implements IGUIProvider { + public short mode = 0; + public static final short MODE_AUOT = 0; + public static final short MODE_MANUAL = 1; + @Override @SideOnly(Side.CLIENT) public List getAmmoTypesForDisplay() { @@ -50,14 +57,194 @@ public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implem return 1_000_000; } + @Override + public double getBarrelLength() { + return 3D; + } + + @Override + public double getAcceptableInaccuracy() { + return 0; + } + + @Override + public double getHeightOffset() { + return 3D; + } + + @Override + public double getDecetorRange() { + return 5000D; + } + + @Override + public double getDecetorGrace() { + return 32D; + } + + @Override + public double getTurretYawSpeed() { + return 1D; + } + + @Override + public double getTurretPitchSpeed() { + return 0.5D; + } + @Override public boolean doLOSCheck() { return false; } + + @Override + protected void alignTurret() { + + Vec3 pos = this.getTurretPos(); + + Vec3 delta = Vec3.createVectorHelper(tPos.xCoord - pos.xCoord, tPos.yCoord - pos.yCoord, tPos.zCoord - pos.zCoord); + double targetYaw = -Math.atan2(delta.xCoord, delta.zCoord); + double targetPitch = Math.PI / 4D; + + this.turnTowardsAngle(targetPitch, targetYaw); + } + + @Override + public void updateEntity() { + + if(this.mode == this.MODE_MANUAL) { + if(!this.targetQueue.isEmpty()) { + this.tPos = this.targetQueue.get(0); + } + } else { + this.targetQueue.clear(); + } + + if(worldObj.isRemote) { + this.lastRotationPitch = this.rotationPitch; + this.lastRotationYaw = this.rotationYaw; + } + + this.aligned = false; + + if(!worldObj.isRemote) { + + this.updateConnections(); + + if(this.target != null && !target.isEntityAlive()) { + this.target = null; + this.stattrak++; + } + } + + if(target != null && this.mode != this.MODE_MANUAL) { + if(!this.entityInLOS(this.target)) { + this.target = null; + } + } + + if(!worldObj.isRemote) { + + if(target != null) { + this.tPos = this.getEntityPos(target); + } else { + if(this.mode != this.MODE_MANUAL) { + this.tPos = null; + } + } + } + + if(isOn() && hasPower()) { + + if(tPos != null) + this.alignTurret(); + } else { + + this.target = null; + this.tPos = null; + } + + if(!worldObj.isRemote) { + + if(this.target != null && !target.isEntityAlive()) { + this.target = null; + this.tPos = null; + this.stattrak++; + } + + if(isOn() && hasPower()) { + searchTimer--; + + this.setPower(this.getPower() - this.getConsumption()); + + if(searchTimer <= 0) { + searchTimer = this.getDecetorInterval(); + + if(this.target == null && this.mode != this.MODE_MANUAL) + this.seekNewTarget(); + } + } else { + searchTimer = 0; + } + + if(this.aligned) { + this.updateFiringTick(); + } + + this.power = Library.chargeTEFromItems(slots, 10, this.power, this.getMaxPower()); + + NBTTagCompound data = this.writePacket(); + this.networkPack(data, 250); + + } else { + + Vec3 vec = Vec3.createVectorHelper(this.getBarrelLength(), 0, 0); + vec.rotateAroundZ((float) -this.rotationPitch); + vec.rotateAroundY((float) -(this.rotationYaw + Math.PI * 0.5)); + + //this will fix the interpolation error when the turret crosses the 360° point + if(Math.abs(this.lastRotationYaw - this.rotationYaw) > Math.PI) { + + if(this.lastRotationYaw < this.rotationYaw) + this.lastRotationYaw += Math.PI * 2; + else + this.lastRotationYaw -= Math.PI * 2; + } + } + } @Override public void updateFiringTick() { + // *chirp* *chirp* *chirp* + } + + @Override + public void handleButtonPacket(int value, int meta) { + if(meta == 5) { + this.mode++; + if(this.mode > 1) + this.mode = 0; + + this.tPos = null; + this.targetQueue.clear(); + + } else{ + super.handleButtonPacket(value, meta); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.mode = nbt.getShort("mode"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setShort("mode", this.mode); } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 21fbfc7ba..69b6ebdd9 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -843,6 +843,7 @@ item.ams_focus_limiter.name=Beschränkender Stabilisierungsfokus item.ams_lens.name=Stabilisierer-Linse item.ams_muzzle.name=Strahlenemissions-Mündung item.analyzer.name=Analysierer +item.anchor_remote.name=Rückrufgerät item.antiknock.name=Tetraethyblei-Antiklopfmittel item.apple_euphemium.name=Euphemiumapfel item.apple_lead.name=Bleiapfel @@ -3774,6 +3775,7 @@ tile.taint.name=Korrupter Schmutz tile.taint_barrel.name=IMP-Rückstandsfass tile.tape_recorder.name=Tonbandgerät tile.tektite.name=Tektit +tile.teleanchor.name=Teleportations-Anker tile.tesla.name=Teslaspule tile.test_nuke.name=Test Atombombe tile.therm_endo.name=Endothermische Bombe diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 987258ebc..3701a136c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1085,6 +1085,7 @@ item.ams_lens.name=Stabilizer Lens item.ams_muzzle.name=Ray-Emission Muzzle item.ams_muzzle.desc=...it emits an energy-beam thingy. item.analyzer.name=Analyzer +item.anchor_remote.name=Recall Device item.antiknock.name=Tetraethyllead Antiknock Agent item.apple_euphemium.name=Euphemium Apple item.apple_lead.name=Lead Apple @@ -4227,6 +4228,7 @@ tile.taint.name=Taint tile.taint_barrel.name=IMP Residue Barrel tile.tape_recorder.name=Tape Recorder tile.tektite.name=Tektite +tile.teleanchor.name=Teleportation Anchor tile.tesla.name=Tesla Coil tile.test_nuke.name=Test Nuke tile.therm_endo.name=Endothermic Bomb diff --git a/src/main/resources/assets/hbm/textures/blocks/tele_anchor_side.png b/src/main/resources/assets/hbm/textures/blocks/tele_anchor_side.png new file mode 100644 index 000000000..346d3471a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/tele_anchor_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/tele_anchor_top.png b/src/main/resources/assets/hbm/textures/blocks/tele_anchor_top.png new file mode 100644 index 000000000..151bb9f3f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/tele_anchor_top.png differ diff --git a/src/main/resources/assets/hbm/textures/items/anchor_remote.png b/src/main/resources/assets/hbm/textures/items/anchor_remote.png new file mode 100644 index 000000000..3fc5ec420 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/anchor_remote.png differ