From e15f6d5d55991b3500cb4ccd96a6d190d91df190 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 26 Jun 2022 21:44:22 +0200 Subject: [PATCH] finished arty, conveyor improvements, chute fixes --- src/main/java/api/hbm/energy/PowerNet.java | 7 +- .../java/api/hbm/entity/IRadarDetectable.java | 3 +- src/main/java/com/hbm/blocks/ModBlocks.java | 14 +- .../com/hbm/blocks/machine/FactoryHatch.java | 170 ------- .../com/hbm/blocks/network/CraneInserter.java | 13 +- .../java/com/hbm/config/GeneralConfig.java | 2 + .../java/com/hbm/crafting/ToolRecipes.java | 3 +- .../java/com/hbm/crafting/WeaponRecipes.java | 9 +- .../entity/effect/EntityNukeCloudSmall.java | 2 +- .../missile/EntityMissileBaseAdvanced.java | 1 - .../projectile/EntityArtilleryShell.java | 61 ++- src/main/java/com/hbm/handler/GUIHandler.java | 28 -- .../container/ContainerCoreAdvanced.java | 156 ------- .../container/ContainerCoreTitanium.java | 150 ------- .../hbm/inventory/gui/GUICoreAdvanced.java | 66 --- .../hbm/inventory/gui/GUICoreTitanium.java | 66 --- .../inventory/recipes/AssemblerRecipes.java | 15 +- .../com/hbm/items/weapon/ItemAmmoArty.java | 109 ++++- src/main/java/com/hbm/lib/HbmWorld.java | 3 - src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 7 +- .../hbm/render/item/ItemRenderLibrary.java | 48 +- .../item/weapon/ItemRenderWeaponGlass.java | 8 +- .../machine/TileEntityCoreAdvanced.java | 423 +----------------- .../machine/TileEntityCoreTitanium.java | 237 +--------- .../TileEntityMachineAssemblerBase.java | 11 +- .../machine/TileEntityMachineChemplant.java | 11 +- .../TileEntityMachineChemplantBase.java | 11 +- .../machine/TileEntityMachineMiningDrill.java | 8 + .../network/TileEntityCraneExtractor.java | 13 +- .../network/TileEntityCraneInserter.java | 3 +- .../turret/TileEntityTurretArty.java | 48 +- .../turret/TileEntityTurretBaseNT.java | 2 +- src/main/java/com/hbm/util/ArmorUtil.java | 4 + src/main/resources/assets/hbm/lang/de_DE.lang | 11 +- src/main/resources/assets/hbm/lang/en_US.lang | 11 +- .../hbm/textures/gui/factory_advanced.png | Bin 2250 -> 0 bytes .../hbm/textures/gui/factory_titanium.png | Bin 2246 -> 0 bytes .../hbm/textures/gui/machine/gui_radar.png | Bin 11832 -> 11898 bytes src/main/resources/mcmod.info | 2 +- 40 files changed, 372 insertions(+), 1366 deletions(-) delete mode 100644 src/main/java/com/hbm/inventory/container/ContainerCoreAdvanced.java delete mode 100644 src/main/java/com/hbm/inventory/container/ContainerCoreTitanium.java delete mode 100644 src/main/java/com/hbm/inventory/gui/GUICoreAdvanced.java delete mode 100644 src/main/java/com/hbm/inventory/gui/GUICoreTitanium.java delete mode 100644 src/main/resources/assets/hbm/textures/gui/factory_advanced.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/factory_titanium.png diff --git a/src/main/java/api/hbm/energy/PowerNet.java b/src/main/java/api/hbm/energy/PowerNet.java index 89efb819c..da1edbdf6 100644 --- a/src/main/java/api/hbm/energy/PowerNet.java +++ b/src/main/java/api/hbm/energy/PowerNet.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.hbm.config.GeneralConfig; + import net.minecraft.tileentity.TileEntity; /** @@ -165,7 +167,10 @@ public class PowerNet implements IPowerNet { @Override public void reevaluate() { - //this.destroy();// + if(!GeneralConfig.enableReEval) { + this.destroy(); + return; + } HashMap copy = new HashMap(links); HashMap proxyCopy = new HashMap(proxies); diff --git a/src/main/java/api/hbm/entity/IRadarDetectable.java b/src/main/java/api/hbm/entity/IRadarDetectable.java index 293b2030b..f89fc99d4 100644 --- a/src/main/java/api/hbm/entity/IRadarDetectable.java +++ b/src/main/java/api/hbm/entity/IRadarDetectable.java @@ -14,7 +14,8 @@ public interface IRadarDetectable { MISSILE_15_20("Size 15/20 Custom Missile"), //size 15/20 custom missiles MISSILE_20("Size 20 Custom Missile"), //size 20 custom missiles MISSILE_AB("Anti-Ballistic Missile"), //anti ballistic missile - PLAYER("Player"); //airborne players + PLAYER("Player"), //airborne players + ARTILLERY("Artillery Shell"); //airborne players public String name; diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f6e6a1e25..8bafa0b77 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -797,16 +797,14 @@ public class ModBlocks { public static Block struct_plasma_core; public static Block factory_titanium_hull; - public static Block factory_titanium_furnace; - public static Block factory_titanium_conductor; - public static Block factory_titanium_core; - public static final int guiID_factory_titanium = 24; + @Deprecated public static Block factory_titanium_furnace; + @Deprecated public static Block factory_titanium_conductor; + @Deprecated public static Block factory_titanium_core; public static Block factory_advanced_hull; - public static Block factory_advanced_furnace; - public static Block factory_advanced_conductor; - public static Block factory_advanced_core; - public static final int guiID_factory_advanced = 25; + @Deprecated public static Block factory_advanced_furnace; + @Deprecated public static Block factory_advanced_conductor; + @Deprecated public static Block factory_advanced_core; public static Block reactor_element; public static Block reactor_control; diff --git a/src/main/java/com/hbm/blocks/machine/FactoryHatch.java b/src/main/java/com/hbm/blocks/machine/FactoryHatch.java index e04b8c10d..b86e508a3 100644 --- a/src/main/java/com/hbm/blocks/machine/FactoryHatch.java +++ b/src/main/java/com/hbm/blocks/machine/FactoryHatch.java @@ -45,47 +45,9 @@ public class FactoryHatch extends Block { return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); } - @Override - public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) - { - return Item.getItemFromBlock(this); - } - @Override public void onBlockAdded(World world, int x, int y, int z) { super.onBlockAdded(world, x, y, z); - //this.setDefaultDirection(world, x, y, z); - } - - private void setDefaultDirection(World world, int x, int y, int z) { - if(!world.isRemote) - { - Block block1 = world.getBlock(x, y, z - 1); - Block block2 = world.getBlock(x, y, z + 1); - Block block3 = world.getBlock(x - 1, y, z); - Block block4 = world.getBlock(x + 1, y, z); - - byte b0 = 3; - - if(block1.func_149730_j() && !block2.func_149730_j()) - { - b0 = 3; - } - if(block2.func_149730_j() && !block1.func_149730_j()) - { - b0 = 2; - } - if(block3.func_149730_j() && !block4.func_149730_j()) - { - b0 = 5; - } - if(block4.func_149730_j() && !block3.func_149730_j()) - { - b0 = 4; - } - - world.setBlockMetadataWithNotify(x, y, z, b0, 2); - } } @Override @@ -109,137 +71,5 @@ public class FactoryHatch extends Block { world.setBlockMetadataWithNotify(x, y, z, 4, 2); } } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { - return true; - } else if(!player.isSneaking()) - { - if(this == ModBlocks.factory_titanium_furnace) - { - if(world.getBlockMetadata(x, y, z) == 2) - { - if(world.getTileEntity(x, y, z + 1) instanceof TileEntityCoreTitanium) - { - if(((TileEntityCoreTitanium)world.getTileEntity(x, y, z + 1)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_titanium, world, x, y, z + 1); - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Core not found!")); - } - } - if(world.getBlockMetadata(x, y, z) == 3) - { - if(world.getTileEntity(x, y, z - 1) instanceof TileEntityCoreTitanium) - { - if(((TileEntityCoreTitanium)world.getTileEntity(x, y, z - 1)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_titanium, world, x, y, z - 1); - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Core not found!")); - } - } - if(world.getBlockMetadata(x, y, z) == 4) - { - if(world.getTileEntity(x + 1, y, z) instanceof TileEntityCoreTitanium) - { - if(((TileEntityCoreTitanium)world.getTileEntity(x + 1, y, z)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_titanium, world, x + 1, y, z); - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Core not found!")); - } - } - if(world.getBlockMetadata(x, y, z) == 5) - { - if(world.getTileEntity(x - 1, y, z) instanceof TileEntityCoreTitanium) - { - if(((TileEntityCoreTitanium)world.getTileEntity(x - 1, y, z)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_titanium, world, x - 1, y, z); - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Basic Factory] Error: Factory Core not found!")); - } - } - } - - if(this == ModBlocks.factory_advanced_furnace) - { - if(world.getBlockMetadata(x, y, z) == 2) - { - if(world.getTileEntity(x, y, z + 1) instanceof TileEntityCoreAdvanced) - { - if(((TileEntityCoreAdvanced)world.getTileEntity(x, y, z + 1)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_advanced, world, x, y, z + 1); - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Core not found!")); - } - } - if(world.getBlockMetadata(x, y, z) == 3) - { - if(world.getTileEntity(x, y, z - 1) instanceof TileEntityCoreAdvanced) - { - if(((TileEntityCoreAdvanced)world.getTileEntity(x, y, z - 1)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_advanced, world, x, y, z - 1); - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Core not found!")); - } - } - if(world.getBlockMetadata(x, y, z) == 4) - { - if(world.getTileEntity(x + 1, y, z) instanceof TileEntityCoreAdvanced) - { - if(((TileEntityCoreAdvanced)world.getTileEntity(x + 1, y, z)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_advanced, world, x + 1, y, z); - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Core not found!")); - } - } - if(world.getBlockMetadata(x, y, z) == 5) - { - if(world.getTileEntity(x - 1, y, z) instanceof TileEntityCoreAdvanced) - { - if(((TileEntityCoreAdvanced)world.getTileEntity(x - 1, y, z)).isStructureValid(world)) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_factory_advanced, world, x - 1, y, z); - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Structure not valid!")); - } - } else { - player.addChatMessage(new ChatComponentText("[Advanced Factory] Error: Factory Core not found!")); - } - } - } - return true; - } else { - return false; - } - } } diff --git a/src/main/java/com/hbm/blocks/network/CraneInserter.java b/src/main/java/com/hbm/blocks/network/CraneInserter.java index 4a78bb8e3..e6d8e8475 100644 --- a/src/main/java/com/hbm/blocks/network/CraneInserter.java +++ b/src/main/java/com/hbm/blocks/network/CraneInserter.java @@ -16,6 +16,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -60,7 +61,8 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { if(te instanceof ISidedInventory) { ISidedInventory sided = (ISidedInventory) te; - access = sided.getAccessibleSlotsFromSide(dir.ordinal()); + //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); + access = masquerade(sided, dir.ordinal()); } if(te instanceof IInventory) { @@ -119,6 +121,15 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { } } + public static int[] masquerade(ISidedInventory sided, int side) { + + if(sided instanceof TileEntityFurnace) { + return new int[] {1, 0}; + } + + return sided.getAccessibleSlotsFromSide(side); + } + public static ItemStack addToInventory(IInventory inv, int[] access, ItemStack toAdd, int side) { ISidedInventory sided = inv instanceof ISidedInventory ? (ISidedInventory) inv : null; diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index 3200633b5..d4c85eb53 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -24,6 +24,7 @@ public class GeneralConfig { public static boolean enableReflectorCompat = false; public static boolean enableRenderDistCheck = true; public static boolean enableCustomDashKeybind = false; + public static boolean enableReEval = true; public static int hintPos = 0; public static boolean enable528 = false; @@ -71,6 +72,7 @@ public class GeneralConfig { enableReflectorCompat = config.get(CATEGORY_GENERAL, "1.24_enableReflectorCompat", false).getBoolean(false); enableRenderDistCheck = config.get(CATEGORY_GENERAL, "1.25_enableRenderDistCheck", true).getBoolean(true); enableCustomDashKeybind = config.get(CATEGORY_GENERAL, "1.26_enableCustomDashKeybind", false).getBoolean(false); + enableReEval = config.get(CATEGORY_GENERAL, "1.27_enableReEval", true).getBoolean(true); hintPos = CommonConfig.createConfigInt(config, CATEGORY_GENERAL, "1.27_hudOverlayPosition", "0: Top left\n1: Top right\n2: Center right\n3: Center Left", 0); diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 0911db267..b170fe58a 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -12,12 +12,10 @@ import com.hbm.items.tool.ItemModMinecart.EnumCartBase; import com.hbm.items.tool.ItemModMinecart.EnumMinecart; import com.hbm.main.CraftingManager; -import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.ShapelessRecipes; /** * For mining and utility tools @@ -114,6 +112,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator, 1), new Object[] { " A", "#B#", "#B#", '#', IRON.plate(), 'A', STEEL.plate(), 'B', ModItems.circuit_red_copper }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_range, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', Items.redstone, 'C', ModItems.circuit_gold, 'D', ModItems.designator, 'I', STEEL.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_manual, 1), new Object[] { " A", "#C#", "#B#", '#', POLYMER.ingot(), 'A', PB.plate(), 'B', ModItems.circuit_gold, 'C', ModItems.designator }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_arty_range, 1), new Object[] { "M", "C", "P", 'M', ModItems.magnetron, 'C', ModItems.circuit_gold, 'P', ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.linker, 1), new Object[] { "I I", "ICI", "GGG", 'I', IRON.plate(), 'G', GOLD.plate(), 'C', ModItems.circuit_gold }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.oil_detector, 1), new Object[] { "W I", "WCI", "PPP", 'W', ModItems.wire_gold, 'I', CU.ingot(), 'C', ModItems.circuit_red_copper, 'P', STEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.turret_chip, 1), new Object[] { "WWW", "CPC", "WWW", 'W', ModItems.wire_gold, 'P', POLYMER.ingot(), 'C', ModItems.circuit_gold, }); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index ff616d29a..8c0bec46c 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -2,7 +2,6 @@ package com.hbm.crafting; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.OreDictManager; -import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.fluid.Fluids; import static com.hbm.inventory.OreDictManager.*; @@ -272,6 +271,14 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_shell_apfsds_du, 6), new Object[] { " I ", "GIG", "CCC", 'I', U238.ingot(), 'G', ModItems.cordite, 'C', CU.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_shell_w9, 1), new Object[] { " P ", "NSN", " P ", 'P', PU239.nugget(), 'N', OreDictManager.getReflector(), 'S', ModItems.ammo_shell_explosive }); + //Artillery Shells + CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_arty, 1, 0), new Object[] { "CIC", "CSC", "CCC", 'C', ModItems.cordite, 'I', IRON.block(), 'S', ModItems.hull_small_steel }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_arty, 1, 1), new Object[] { " D ", "DSD", " D ", 'D', ModItems.ball_dynamite, 'S', new ItemStack(ModItems.ammo_arty, 1, 0) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_arty, 1, 2), new Object[] { "TTT", "TST", "TTT", 'T', ModItems.ball_tnt, 'S', new ItemStack(ModItems.ammo_arty, 1, 0) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_arty, 1, 5), new Object[] { " D ", "DSD", " D ", 'D', P_WHITE.ingot(), 'S', new ItemStack(ModItems.ammo_arty, 1, 0) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_arty, 1, 3), new Object[] { " P ", "NSN", " P ", 'P', PU239.nugget(), 'N', OreDictManager.getReflector(), 'S', new ItemStack(ModItems.ammo_arty, 1, 0) }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_arty, 1, 4), new Object[] { new ItemStack(ModItems.ammo_arty, 1, 2), ModItems.boy_bullet, ModItems.boy_target, ModItems.boy_shielding, ModItems.circuit_red_copper, ModItems.ducttape }); + //DGK Belts CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_dgk, 1), new Object[] { "LLL", "GGG", "CCC", 'L', PB.plate(), 'G', ModItems.ballistite, 'C', CU.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_dgk, 1), new Object[] { "LLL", "GGG", "CCC", 'L', PB.plate(), 'G', ModItems.cordite, 'C', CU.ingot() }); diff --git a/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java b/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java index 530d426c0..b2794a939 100644 --- a/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java +++ b/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java @@ -128,7 +128,7 @@ public class EntityNukeCloudSmall extends Entity { @SideOnly(Side.CLIENT) public boolean isInRangeToRenderDist(double distance) { - return distance < 25000; + return true; } public static class Cloudlet { diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileBaseAdvanced.java b/src/main/java/com/hbm/entity/missile/EntityMissileBaseAdvanced.java index 582330105..5c0d93b67 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileBaseAdvanced.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileBaseAdvanced.java @@ -8,7 +8,6 @@ import com.hbm.explosion.ExplosionLarge; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacket; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.machine.TileEntityMachineRadar; import api.hbm.entity.IRadarDetectable; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java b/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java index 1585ade7b..c11471a5e 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java +++ b/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java @@ -1,9 +1,14 @@ package com.hbm.entity.projectile; +import java.util.ArrayList; +import java.util.List; + import com.hbm.entity.logic.IChunkLoader; import com.hbm.items.weapon.ItemAmmoArty; import com.hbm.items.weapon.ItemAmmoArty.ArtilleryShell; +import com.hbm.main.MainRegistry; +import api.hbm.entity.IRadarDetectable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.nbt.NBTTagCompound; @@ -13,8 +18,9 @@ import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.ForgeChunkManager.Ticket; +import net.minecraftforge.common.ForgeChunkManager.Type; -public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoader { +public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoader, IRadarDetectable { private Ticket loaderTicket; @@ -44,6 +50,7 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa @Override protected void entityInit() { + init(ForgeChunkManager.requestTicket(MainRegistry.instance, worldObj, Type.ENTITY)); this.dataWatcher.addObject(10, new Integer(0)); } @@ -89,10 +96,12 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa double dist = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ); if(speed * 18 > dist) { - worldObj.playSoundEffect(this.targetX, this.targetY, this.targetZ, "hbm:turret.mortarWhistle", 5.0F, 1.0F); + worldObj.playSoundEffect(this.targetX, this.targetY, this.targetZ, "hbm:turret.mortarWhistle", 15.0F, 1.0F); this.didWhistle = true; } } + + loadNeighboringChunks((int)Math.floor(posX / 16D), (int)Math.floor(posZ / 16D)); } else { if(this.turnProgress > 0) { @@ -139,6 +148,10 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa this.setDead();*/ this.getType().onImpact(this, mop); + + for(ChunkCoordIntPair chunk : loadedChunks) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } } } @@ -154,14 +167,53 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa } } + List loadedChunks = new ArrayList(); + + public void loadNeighboringChunks(int newChunkX, int newChunkZ) { + if(!worldObj.isRemote && loaderTicket != null) { + + for(ChunkCoordIntPair chunk : loadedChunks) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } + + loadedChunks.clear(); + loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX + (int) Math.ceil((this.posX + this.motionX) / 16D), newChunkZ + (int) Math.ceil((this.posZ + this.motionZ) / 16D))); + /*loadedChunks.add(new ChunkCoordIntPair(newChunkX + 1, newChunkZ + 1)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX - 1, newChunkZ - 1)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX + 1, newChunkZ - 1)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX - 1, newChunkZ + 1)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX + 1, newChunkZ)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ + 1)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX - 1, newChunkZ)); + loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ - 1));*/ + + for(ChunkCoordIntPair chunk : loadedChunks) { + ForgeChunkManager.forceChunk(loaderTicket, chunk); + } + } + } + @Override public void writeEntityToNBT(NBTTagCompound nbt) { super.writeEntityToNBT(nbt); + + nbt.setBoolean("shouldWhistle", this.shouldWhistle); + nbt.setBoolean("didWhistle", this.didWhistle); + nbt.setDouble("targetX", this.targetX); + nbt.setDouble("targetY", this.targetY); + nbt.setDouble("targetZ", this.targetZ); } @Override public void readEntityFromNBT(NBTTagCompound nbt) { super.readEntityFromNBT(nbt); + + this.shouldWhistle = nbt.getBoolean("shouldWhistle"); + this.didWhistle = nbt.getBoolean("didWhistle"); + this.targetX = nbt.getDouble("targetX"); + this.targetY = nbt.getDouble("targetY"); + this.targetZ = nbt.getDouble("targetZ"); } @Override @@ -173,4 +225,9 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa public double getGravityVelocity() { return 9.81 * 0.05; } + + @Override + public RadarTargetType getTargetType() { + return RadarTargetType.ARTILLERY; + } } diff --git a/src/main/java/com/hbm/handler/GUIHandler.java b/src/main/java/com/hbm/handler/GUIHandler.java index 2a93686ba..144dcb6b6 100644 --- a/src/main/java/com/hbm/handler/GUIHandler.java +++ b/src/main/java/com/hbm/handler/GUIHandler.java @@ -218,20 +218,6 @@ public class GUIHandler implements IGuiHandler { return null; } - case ModBlocks.guiID_factory_titanium: { - if(entity instanceof TileEntityCoreTitanium) { - return new ContainerCoreTitanium(player.inventory, (TileEntityCoreTitanium) entity); - } - return null; - } - - case ModBlocks.guiID_factory_advanced: { - if(entity instanceof TileEntityCoreAdvanced) { - return new ContainerCoreAdvanced(player.inventory, (TileEntityCoreAdvanced) entity); - } - return null; - } - case ModBlocks.guiID_reactor_multiblock: { if(entity instanceof TileEntityMachineReactorLarge) { return new ContainerReactorMultiblock(player.inventory, (TileEntityMachineReactorLarge) entity); @@ -1058,20 +1044,6 @@ public class GUIHandler implements IGuiHandler { return null; } - case ModBlocks.guiID_factory_titanium: { - if(entity instanceof TileEntityCoreTitanium) { - return new GUICoreTitanium(player.inventory, (TileEntityCoreTitanium) entity); - } - return null; - } - - case ModBlocks.guiID_factory_advanced: { - if(entity instanceof TileEntityCoreAdvanced) { - return new GUICoreAdvanced(player.inventory, (TileEntityCoreAdvanced) entity); - } - return null; - } - case ModBlocks.guiID_reactor_multiblock: { if(entity instanceof TileEntityMachineReactorLarge) { return new GUIReactorMultiblock(player.inventory, (TileEntityMachineReactorLarge) entity); diff --git a/src/main/java/com/hbm/inventory/container/ContainerCoreAdvanced.java b/src/main/java/com/hbm/inventory/container/ContainerCoreAdvanced.java deleted file mode 100644 index 65282550f..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerCoreAdvanced.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.inventory.SlotMachineOutput; -import com.hbm.tileentity.machine.TileEntityCoreAdvanced; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerCoreAdvanced extends Container { - - private TileEntityCoreAdvanced diFurnace; - private int progress; - private int power; - - public ContainerCoreAdvanced(InventoryPlayer invPlayer, TileEntityCoreAdvanced tedf) { - - diFurnace = tedf; - - //Input Storage - this.addSlotToContainer(new Slot(tedf, 0, 8, 18)); - this.addSlotToContainer(new Slot(tedf, 1, 26, 18)); - this.addSlotToContainer(new Slot(tedf, 2, 44, 18)); - this.addSlotToContainer(new Slot(tedf, 3, 62, 18)); - this.addSlotToContainer(new Slot(tedf, 4, 80, 18)); - this.addSlotToContainer(new Slot(tedf, 5, 98, 18)); - this.addSlotToContainer(new Slot(tedf, 6, 116, 18)); - this.addSlotToContainer(new Slot(tedf, 7, 134, 18)); - this.addSlotToContainer(new Slot(tedf, 8, 152, 18)); - //Inputs - this.addSlotToContainer(new Slot(tedf, 9, 8, 54)); - this.addSlotToContainer(new Slot(tedf, 10, 8, 72)); - //Outputs - this.addSlotToContainer(new SlotMachineOutput(tedf, 11, 134, 54)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 12, 134, 72)); - //Output Storage - this.addSlotToContainer(new SlotMachineOutput(tedf, 13, 8, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 14, 26, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 15, 44, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 16, 62, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 17, 80, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 18, 98, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 19, 116, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 20, 134, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 21, 152, 108)); - //Power Cell - this.addSlotToContainer(new Slot(tedf, 22, 44, 72)); - //More Inputs - this.addSlotToContainer(new Slot(tedf, 23, 26, 54)); - this.addSlotToContainer(new Slot(tedf, 24, 26, 72)); - //More Outputs - this.addSlotToContainer(new SlotMachineOutput(tedf, 25, 152, 54)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 26, 152, 72)); - - 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, 84 + i * 18 + 56)); - } - } - - for(int i = 0; i < 9; i++) - { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); - } - } - - @Override - public void addCraftingToCrafters(ICrafting crafting) { - super.addCraftingToCrafters(crafting); - crafting.sendProgressBarUpdate(this, 0, this.diFurnace.progress); - crafting.sendProgressBarUpdate(this, 1, (int)this.diFurnace.power); - } - - @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 <= 26) { - if (!this.mergeItemStack(var5, 27, this.inventorySlots.size(), true)) - { - return null; - } - } - else if (!this.mergeItemStack(var5, 22, 23, false)) - { - if (!this.mergeItemStack(var5, 9, 11, false)) - if (!this.mergeItemStack(var5, 23, 25, false)) - 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 diFurnace.isUseableByPlayer(player); - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - - for(int i = 0; i < this.crafters.size(); i++) - { - ICrafting par1 = (ICrafting)this.crafters.get(i); - - if(this.progress != this.diFurnace.progress) - { - par1.sendProgressBarUpdate(this, 0, this.diFurnace.progress); - } - - if(this.power != this.diFurnace.power) - { - par1.sendProgressBarUpdate(this, 1, (int)this.diFurnace.power); - } - } - - this.progress = this.diFurnace.progress; - this.power = (int)this.diFurnace.power; - } - - @Override - public void updateProgressBar(int i, int j) { - if(i == 0) - { - diFurnace.progress = j; - } - if(i == 1) - { - diFurnace.power = j; - } - } -} diff --git a/src/main/java/com/hbm/inventory/container/ContainerCoreTitanium.java b/src/main/java/com/hbm/inventory/container/ContainerCoreTitanium.java deleted file mode 100644 index 63c3ddf8a..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerCoreTitanium.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.inventory.SlotMachineOutput; -import com.hbm.tileentity.machine.TileEntityCoreTitanium; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerCoreTitanium extends Container { - - private TileEntityCoreTitanium diFurnace; - private int progress; - private int power; - - public ContainerCoreTitanium(InventoryPlayer invPlayer, TileEntityCoreTitanium tedf) { - - diFurnace = tedf; - - //Input Storage - this.addSlotToContainer(new Slot(tedf, 0, 8, 18)); - this.addSlotToContainer(new Slot(tedf, 1, 26, 18)); - this.addSlotToContainer(new Slot(tedf, 2, 44, 18)); - this.addSlotToContainer(new Slot(tedf, 3, 62, 18)); - this.addSlotToContainer(new Slot(tedf, 4, 80, 18)); - this.addSlotToContainer(new Slot(tedf, 5, 98, 18)); - this.addSlotToContainer(new Slot(tedf, 6, 116, 18)); - this.addSlotToContainer(new Slot(tedf, 7, 134, 18)); - this.addSlotToContainer(new Slot(tedf, 8, 152, 18)); - //Inputs - this.addSlotToContainer(new Slot(tedf, 9, 8, 54)); - this.addSlotToContainer(new Slot(tedf, 10, 8, 72)); - //Outputs - this.addSlotToContainer(new SlotMachineOutput(tedf, 11, 152, 54)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 12, 152, 72)); - //Output Storage - this.addSlotToContainer(new SlotMachineOutput(tedf, 13, 8, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 14, 26, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 15, 44, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 16, 62, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 17, 80, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 18, 98, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 19, 116, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 20, 134, 108)); - this.addSlotToContainer(new SlotMachineOutput(tedf, 21, 152, 108)); - //Power Cell - this.addSlotToContainer(new Slot(tedf, 22, 44, 72)); - - 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, 84 + i * 18 + 56)); - } - } - - for(int i = 0; i < 9; i++) - { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); - } - } - - @Override - public void addCraftingToCrafters(ICrafting crafting) { - super.addCraftingToCrafters(crafting); - crafting.sendProgressBarUpdate(this, 0, this.diFurnace.progress); - crafting.sendProgressBarUpdate(this, 1, (int)this.diFurnace.power); - } - - @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 <= 22) { - if (!this.mergeItemStack(var5, 23, this.inventorySlots.size(), true)) - { - return null; - } - } - else if (!this.mergeItemStack(var5, 22, 23, false)) - { - if (!this.mergeItemStack(var5, 9, 11, false)) - 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 diFurnace.isUseableByPlayer(player); - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - - for(int i = 0; i < this.crafters.size(); i++) - { - ICrafting par1 = (ICrafting)this.crafters.get(i); - - if(this.progress != this.diFurnace.progress) - { - par1.sendProgressBarUpdate(this, 0, this.diFurnace.progress); - } - - if(this.power != this.diFurnace.power) - { - par1.sendProgressBarUpdate(this, 1, (int)this.diFurnace.power); - } - } - - this.progress = this.diFurnace.progress; - this.power = (int)this.diFurnace.power; - } - - @Override - public void updateProgressBar(int i, int j) { - if(i == 0) - { - diFurnace.progress = j; - } - if(i == 1) - { - diFurnace.power = j; - } - } - -} diff --git a/src/main/java/com/hbm/inventory/gui/GUICoreAdvanced.java b/src/main/java/com/hbm/inventory/gui/GUICoreAdvanced.java deleted file mode 100644 index ad88a5601..000000000 --- a/src/main/java/com/hbm/inventory/gui/GUICoreAdvanced.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.hbm.inventory.gui; - -import org.lwjgl.opengl.GL11; - -import com.hbm.inventory.container.ContainerCoreAdvanced; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityCoreAdvanced; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -public class GUICoreAdvanced extends GuiInfoContainer { - - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/factory_advanced.png"); - private TileEntityCoreAdvanced diFurnace; - - public GUICoreAdvanced(InventoryPlayer invPlayer, TileEntityCoreAdvanced tedf) { - super(new ContainerCoreAdvanced(invPlayer, tedf)); - diFurnace = tedf; - - this.xSize = 176; - this.ySize = 222; - } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.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 - public void drawScreen(int mouseX, int mouseY, float f) { - super.drawScreen(mouseX, mouseY, f); - - String[] text = new String[] { "Basically just a larger furnace with a queue." }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); - - String[] text1 = new String[] { "Requires an advanced factory energy cluster as", - "an energy buffer, even if external power is used!" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); - } - - @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(diFurnace.power > 0) { - int i = (int)diFurnace.getPowerScaled(52); - drawTexturedModalRect(guiLeft + 62, guiTop + 72, 0, 240, i, 16); - } - - if(diFurnace.progress > 0) { - int j = diFurnace.getProgressScaled(90); - drawTexturedModalRect(guiLeft + 43, guiTop + 53, 0, 222, j, 18); - } - - this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); - this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); - } -} diff --git a/src/main/java/com/hbm/inventory/gui/GUICoreTitanium.java b/src/main/java/com/hbm/inventory/gui/GUICoreTitanium.java deleted file mode 100644 index 63bf0124e..000000000 --- a/src/main/java/com/hbm/inventory/gui/GUICoreTitanium.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.hbm.inventory.gui; - -import org.lwjgl.opengl.GL11; - -import com.hbm.inventory.container.ContainerCoreTitanium; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityCoreTitanium; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -public class GUICoreTitanium extends GuiInfoContainer { - - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/factory_titanium.png"); - private TileEntityCoreTitanium diFurnace; - - public GUICoreTitanium(InventoryPlayer invPlayer, TileEntityCoreTitanium tedf) { - super(new ContainerCoreTitanium(invPlayer, tedf)); - diFurnace = tedf; - - this.xSize = 176; - this.ySize = 222; - } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.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 - public void drawScreen(int mouseX, int mouseY, float f) { - super.drawScreen(mouseX, mouseY, f); - - String[] text = new String[] { "Basically just a larger furnace with a queue." }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); - - String[] text1 = new String[] { "Requires a basic factory energy cluster as", - "an energy buffer, even if external power is used!" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); - } - - @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(diFurnace.power > 0) { - int i = (int)diFurnace.getPowerScaled(52); - drawTexturedModalRect(guiLeft + 62, guiTop + 72, 0, 240, i, 16); - } - - if(diFurnace.progress > 0) { - int j = diFurnace.getProgressScaled(90); - drawTexturedModalRect(guiLeft + 43, guiTop + 53, 0, 222, j, 18); - } - - this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); - this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); - } -} diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 1d63c2a09..15f788d35 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -298,10 +298,6 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.machine_teleporter, 1), new AStack[] {new OreDictStack(TI.ingot(), 6), new OreDictStack(ALLOY.plate(), 12), new OreDictStack(CMB.plate(), 4), new ComparableStack(ModItems.telepad, 1), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 2), new ComparableStack(ModItems.coil_magnetized_tungsten, 4), },300); makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_transmutator, 1), new AStack[] {new OreDictStack(MAGTUNG.ingot(), 1), new OreDictStack(TI.ingot(), 24), new OreDictStack(ALLOY.plate(), 18), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_desh, 6), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModBlocks.machine_battery, 5), new ComparableStack(ModItems.circuit_gold, 5), },500); makeRecipe(new ComparableStack(ModBlocks.machine_combine_factory, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_PLASTIC.ingot(), 6), new OreDictStack(TI.plate(), 4), new OreDictStack(CU.plate(), 6), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.coil_advanced_alloy, 8), new ComparableStack(ModItems.coil_tungsten, 4), new OreDictStack(MAGTUNG.ingot(), 12), },150); - makeRecipe(new ComparableStack(ModBlocks.factory_advanced_hull, 1), new AStack[] {new OreDictStack(ALLOY.ingot(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.wire_advanced_alloy, 6), },50); - makeRecipe(new ComparableStack(ModBlocks.factory_advanced_furnace, 1), new AStack[] {new OreDictStack(ALLOY.ingot(), 4), new OreDictStack(ALLOY.plate(), 4), new OreDictStack(STEEL.plate(), 8), new ComparableStack(ModItems.coil_advanced_alloy, 2), },100); - makeRecipe(new ComparableStack(ModBlocks.factory_advanced_core, 1), new AStack[] {new OreDictStack(ALLOY.ingot(), 6), new OreDictStack(ALLOY.plate(), 6), new OreDictStack(STEEL.plate(), 8), new ComparableStack(ModItems.coil_advanced_alloy, 2), new ComparableStack(ModItems.motor, 16), new ComparableStack(Blocks.piston, 6), },100); - makeRecipe(new ComparableStack(ModBlocks.factory_advanced_conductor, 1), new AStack[] {new OreDictStack(ALLOY.ingot(), 8), new OreDictStack(ALLOY.plate(), 6), new ComparableStack(ModItems.wire_advanced_alloy, 4), new ComparableStack(ModItems.fuse, 6), },50); makeRecipe(new ComparableStack(ModBlocks.fusion_conductor, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.coil_advanced_alloy, 5), },150); makeRecipe(new ComparableStack(ModBlocks.fusion_center, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.wire_advanced_alloy, 24), },200); makeRecipe(new ComparableStack(ModBlocks.fusion_motor, 1), new AStack[] {new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4), },250); @@ -736,6 +732,17 @@ public class AssemblerRecipes { new ComparableStack(ModBlocks.barrel_steel, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); + makeRecipe(new ComparableStack(ModBlocks.turret_arty, 1), new AStack[] { + new ComparableStack(ModBlocks.machine_battery, 1), + new OreDictStack(STEEL.ingot(), 128), + new OreDictStack(DURA.ingot(), 32), + new ComparableStack(ModItems.motor_desh, 5), + new ComparableStack(ModItems.circuit_targeting_tier4, 1), + new ComparableStack(ModItems.pipes_steel, 1), + new ComparableStack(ModItems.mechanism_launcher_2, 3), + new ComparableStack(ModBlocks.machine_radar, 1), + new ComparableStack(ModItems.crt_display, 1) + }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_silex, 1), new AStack[] { new ComparableStack(Blocks.glass, 12), diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index 1b4cec380..540301887 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -2,16 +2,25 @@ package com.hbm.items.weapon; import java.util.List; +import com.hbm.config.BombConfig; +import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.logic.EntityNukeExplosionMK4; import com.hbm.entity.projectile.EntityArtilleryShell; +import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNukeSmall; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; +import com.hbm.explosion.vanillant.standard.EntityProcessorStandard; +import com.hbm.explosion.vanillant.standard.ExplosionEffectStandard; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; -import com.hbm.util.ParticleUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -20,11 +29,13 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; @@ -32,12 +43,12 @@ import net.minecraft.util.Vec3; public class ItemAmmoArty extends Item { public static ArtilleryShell[] types = new ArtilleryShell[ /* >>> */ 6 /* <<< */ ]; - public int NORMAL = 0; - public int CLASSIC = 1; - public int EXPLOSIVE = 2; - public int MINI_NUKE = 3; - public int NUKE = 4; - public int PHOSPHORUS = 5; + public final int NORMAL = 0; + public final int CLASSIC = 1; + public final int EXPLOSIVE = 2; + public final int MINI_NUKE = 3; + public final int NUKE = 4; + public final int PHOSPHORUS = 5; public ItemAmmoArty() { this.setHasSubtypes(true); @@ -55,6 +66,47 @@ public class ItemAmmoArty extends Item { list.add(new ItemStack(item, 1, MINI_NUKE)); list.add(new ItemStack(item, 1, NUKE)); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + String r = EnumChatFormatting.RED + ""; + String y = EnumChatFormatting.YELLOW + ""; + String b = EnumChatFormatting.BLUE + ""; + + switch(stack.getItemDamage()) { + case NORMAL: + list.add(y + "Strength: 10"); + list.add(y + "Damage modifier: 3x"); + list.add(b + "Does not destroy blocks"); + break; + case CLASSIC: + list.add(y + "Strength: 15"); + list.add(y + "Damage modifier: 5x"); + list.add(b + "Does not destroy blocks"); + break; + case EXPLOSIVE: + list.add(y + "Strength: 15"); + list.add(y + "Damage modifier: 3x"); + list.add(r + "Destroys blocks"); + break; + case PHOSPHORUS: + list.add(y + "Strength: 10"); + list.add(y + "Damage modifier: 3x"); + list.add(r + "Phosphorus splash"); + list.add(b + "Does not destroy blocks"); + break; + case MINI_NUKE: + list.add(y + "Strength: 20"); + list.add(r + "Deals nuclear damage"); + list.add(r + "Destroys blocks"); + case NUKE: + list.add(r + "☠"); + list.add(r + "(that is the best skull and crossbones"); + list.add(r + "minecraft's unicode has to offer)"); + break; + } + } private IIcon[] icons = new IIcon[types.length]; @@ -94,33 +146,58 @@ public class ItemAmmoArty extends Item { this.types[NORMAL] = new ArtilleryShell("ammo_arty") { @Override public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize(); - shell.worldObj.newExplosion(shell, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 15F, false, false); + + ExplosionVNT xnt = new ExplosionVNT(shell.worldObj, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 10F); + xnt.setEntityProcessor(new EntityProcessorStandard().withRangeMod(3F)); + xnt.setPlayerProcessor(new PlayerProcessorStandard()); + xnt.setSFX(new ExplosionEffectStandard()); + xnt.explode(); + shell.setDead(); } }; this.types[CLASSIC] = new ArtilleryShell("ammo_arty_classic") { @Override public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize(); - shell.worldObj.newExplosion(shell, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 25F, false, false); + + ExplosionVNT xnt = new ExplosionVNT(shell.worldObj, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 15F); + xnt.setEntityProcessor(new EntityProcessorStandard().withRangeMod(5F)); + xnt.setPlayerProcessor(new PlayerProcessorStandard()); + xnt.setSFX(new ExplosionEffectStandard()); + xnt.explode(); + shell.setDead(); } }; this.types[EXPLOSIVE] = new ArtilleryShell("ammo_arty_he") { @Override public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize(); - shell.worldObj.newExplosion(shell, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 15F, false, true); + + ExplosionVNT xnt = new ExplosionVNT(shell.worldObj, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 20F); + xnt.setBlockAllocator(new BlockAllocatorStandard(48)); + xnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop()); + xnt.setEntityProcessor(new EntityProcessorStandard().withRangeMod(3F)); + xnt.setPlayerProcessor(new PlayerProcessorStandard()); + xnt.setSFX(new ExplosionEffectStandard()); + xnt.explode(); + shell.setDead(); } }; this.types[MINI_NUKE] = new ArtilleryShell("ammo_arty_mini_nuke") { @Override public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { - //Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize(); ExplosionNukeSmall.explode(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, ExplosionNukeSmall.medium); shell.setDead(); } }; this.types[NUKE] = new ArtilleryShell("ammo_arty_nuke") { @Override public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { + shell.worldObj.spawnEntityInWorld(EntityNukeExplosionMK4.statFac(shell.worldObj, BombConfig.missileRadius, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord)); + EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(shell.worldObj, 1000, BombConfig.missileRadius * 0.005F); + entity2.posX = mop.hitVec.xCoord; + entity2.posY = mop.hitVec.yCoord; + entity2.posZ = mop.hitVec.zCoord; + shell.worldObj.spawnEntityInWorld(entity2); shell.setDead(); } }; @@ -131,7 +208,15 @@ public class ItemAmmoArty extends Item { double x = mop.hitVec.xCoord - vec.xCoord; double y = mop.hitVec.yCoord - vec.yCoord; double z = mop.hitVec.zCoord - vec.zCoord; - shell.worldObj.newExplosion(shell, x, y, z, 15F, true, false); + + ExplosionVNT xnt = new ExplosionVNT(shell.worldObj, x, y, z, 10F); + xnt.setEntityProcessor(new EntityProcessorStandard().withRangeMod(3F)); + xnt.setPlayerProcessor(new PlayerProcessorStandard()); + xnt.setSFX(new ExplosionEffectStandard()); + xnt.explode(); + + ExplosionLarge.spawnShrapnels(shell.worldObj, x, y, z, 15); + ExplosionChaos.burn(shell.worldObj, (int)x, (int)y, (int)z, 12); int radius = 15; List hit = shell.worldObj.getEntitiesWithinAABBExcludingEntity(shell, AxisAlignedBB.getBoundingBox(shell.posX - radius, shell.posY - radius, shell.posZ - radius, shell.posX + radius, shell.posY + radius, shell.posZ + radius)); diff --git a/src/main/java/com/hbm/lib/HbmWorld.java b/src/main/java/com/hbm/lib/HbmWorld.java index eb6556b39..242899b3e 100644 --- a/src/main/java/com/hbm/lib/HbmWorld.java +++ b/src/main/java/com/hbm/lib/HbmWorld.java @@ -1,8 +1,5 @@ package com.hbm.lib; -import com.hbm.world.test.StructureComponentTest; -import com.hbm.world.test.StructureStartTest; -import com.hbm.world.test.WorldGenTest; import com.hbm.world.worldgen.ComponentNTMFeatures; import com.hbm.world.worldgen.MapGenNTMFeatures; import com.hbm.world.worldgen.NTMWorldGenerator; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 4a82c4005..1a03ad993 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4263H1)"; + public static final String VERSION = "1.0.27 BETA (4277)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 650152206..267d7bf61 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -294,12 +294,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.muffler, 1), new Object[] { "III", "IWI", "III", 'I', ModItems.plate_polymer, 'W', Blocks.wool }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_titanium_hull), 1), new Object[] { "PIP", "I I", "PIP", 'P', TI.plate(), 'I', TI.ingot() }); - addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_titanium_furnace), 1), new Object[] { "HMH", "MFM", "HMH", 'H', Item.getItemFromBlock(ModBlocks.factory_titanium_hull), 'M', ModItems.motor, 'F', Item.getItemFromBlock(Blocks.furnace) }); - addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_titanium_conductor), 1), new Object[] { "SWS", "FFF", "SWS", 'S', TI.ingot(), 'W', Item.getItemFromBlock(ModBlocks.red_wire_coated), 'F', ModItems.fuse }); - addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_titanium_core), 1), new Object[] { "HPH", "PCP", "HPH", 'H', Item.getItemFromBlock(ModBlocks.factory_titanium_hull), 'C', ModItems.circuit_aluminium, 'P', Item.getItemFromBlock(Blocks.piston) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.factory_core_titanium), new Object[] { "BRB", "RHR", "BRB", 'B', ItemBattery.getEmptyBattery(ModItems.battery_generic), 'R', REDSTONE.block(), 'H', Item.getItemFromBlock(ModBlocks.factory_titanium_hull) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.factory_core_advanced), new Object[] { "BLB", "SHS", "BLB", 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced), 'S', S.block(), 'L', PB.block(), 'H', Item.getItemFromBlock(ModBlocks.factory_advanced_hull) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.factory_core_advanced), new Object[] { "BSB", "LHL", "BSB", 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced), 'S', S.block(), 'L', PB.block(), 'H', Item.getItemFromBlock(ModBlocks.factory_advanced_hull) }); + addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_advanced_hull), 1), new Object[] { "PIP", "I I", "PIP", 'P', ALLOY.plate(), 'I', ALLOY.ingot() }); addRecipeAuto(new ItemStack(ModItems.arc_electrode, 1), new Object[] { "C", "T", "C", 'C', GRAPHITE.ingot(), 'T', ModItems.bolt_tungsten }); addRecipeAuto(new ItemStack(ModItems.arc_electrode_desh, 1), new Object[] { "C", "T", "C", 'C', DESH.dust(), 'T', ModItems.arc_electrode }); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 64254fb6a..a82248153 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -1292,21 +1292,21 @@ public class ItemRenderLibrary { }}); renderers.put(Item.getItemFromBlock(ModBlocks.machine_assemfac), new ItemRenderBase( ) { - public void renderInventory() { - GL11.glScaled(2.5, 2.5, 2.5); - } - public void renderCommon() { - GL11.glScaled(0.5, 0.5, 0.5); - GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.assemfac_tex); ResourceManager.assemfac.renderPart("Factory"); - for(int i = 1; i < 7; i++) { - ResourceManager.assemfac.renderPart("Pivot" + i); - ResourceManager.assemfac.renderPart("Arm" + i); - ResourceManager.assemfac.renderPart("Piston" + i); - ResourceManager.assemfac.renderPart("Striker" + i); + public void renderInventory() { + GL11.glScaled(2.5, 2.5, 2.5); } - GL11.glShadeModel(GL11.GL_FLAT); - }}); + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.assemfac_tex); ResourceManager.assemfac.renderPart("Factory"); + for(int i = 1; i < 7; i++) { + ResourceManager.assemfac.renderPart("Pivot" + i); + ResourceManager.assemfac.renderPart("Arm" + i); + ResourceManager.assemfac.renderPart("Piston" + i); + ResourceManager.assemfac.renderPart("Striker" + i); + } + GL11.glShadeModel(GL11.GL_FLAT); + }}); renderers.put(Item.getItemFromBlock(ModBlocks.furnace_iron), new ItemRenderBase( ) { public void renderInventory() { @@ -1319,6 +1319,26 @@ public class ItemRenderLibrary { ResourceManager.furnace_iron.renderPart("Main"); ResourceManager.furnace_iron.renderPart("Off"); }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.turret_arty), new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(-3, -4, 0); + GL11.glScaled(3.5, 3.5, 3.5); + } + public void renderCommon() { + GL11.glRotated(-90, 0, 1, 0); + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.turret_arty_tex); + ResourceManager.turret_arty.renderPart("Base"); + ResourceManager.turret_arty.renderPart("Carriage"); + GL11.glTranslated(0, 3, 0); + GL11.glRotated(45, 1, 0, 0); + GL11.glTranslated(0, -3, 0); + ResourceManager.turret_arty.renderPart("Cannon"); + ResourceManager.turret_arty.renderPart("Barrel"); + GL11.glShadeModel(GL11.GL_FLAT); + }}); } private static void bindTexture(ResourceLocation res) { diff --git a/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java b/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java index 02464712e..aa8e186e4 100644 --- a/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java +++ b/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java @@ -2,7 +2,6 @@ package com.hbm.render.item.weapon; import org.lwjgl.opengl.GL11; -import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.items.weapon.gununified.ItemEnergyGunBase; import com.hbm.main.ResourceManager; @@ -12,8 +11,6 @@ import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.item.ItemStack; import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.IItemRenderer.ItemRenderType; -import net.minecraftforge.client.IItemRenderer.ItemRendererHelper; public class ItemRenderWeaponGlass implements IItemRenderer { @@ -52,9 +49,8 @@ public class ItemRenderWeaponGlass implements IItemRenderer { double s0 = 0.5D; GL11.glRotated(25, 0, 0, 1); - GL11.glTranslated(2.5, 0.15, 0.5); - GL11.glRotated(90, 0, -1, 0); - GL11.glRotatef(90, 0, 1, 0); + GL11.glTranslated(2.25, 0.0, 0.125); + GL11.glRotatef(-10, 0, 1, 0); GL11.glScaled(s0, s0, s0); break; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java index a945201d1..27e1b8b90 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java @@ -234,426 +234,11 @@ public class TileEntityCoreAdvanced extends TileEntityLoadedBase implements ISid } @Override - public void updateEntity() { - - if(!worldObj.isRemote) { - if(worldObj.getBlock(xCoord, yCoord + 1, zCoord) == ModBlocks.factory_advanced_conductor) - this.trySubscribe(worldObj, xCoord, yCoord + 2, zCoord, ForgeDirection.UP); - else - this.tryUnsubscribe(worldObj, xCoord, yCoord + 2, zCoord); - - if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) == ModBlocks.factory_advanced_conductor) - this.trySubscribe(worldObj, xCoord, yCoord - 2, zCoord, ForgeDirection.DOWN); - else - this.tryUnsubscribe(worldObj, xCoord, yCoord - 2, zCoord); - } - - if(this.slots[22] != null && this.slots[22].getItem() == ModItems.factory_core_advanced) - { - this.power = (int) ((IBatteryItem)slots[22].getItem()).getCharge(slots[22]); - } else { - this.power = 0; - } - - if(this.slots[9] == null) - { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null && isProcessable(slots[i])) - { - slots[9] = slots[i].copy(); - slots[i] = null; - break; - } - } - } else { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null) - { - if(slots[i].getItem() == slots[9].getItem() && slots[i].getItemDamage() == slots[9].getItemDamage()) - { - if(slots[9].stackSize + slots[i].stackSize <= slots[i].getMaxStackSize()) - { - slots[9].stackSize += slots[i].stackSize; - slots[i] = null; - } else { - int j = slots[9].getMaxStackSize() - slots[9].stackSize; - slots[9].stackSize += j; - slots[i].stackSize -= j; - } - break; - } - } - } - } - - if(this.slots[10] == null) - { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null && isProcessable(slots[i])) - { - slots[10] = slots[i].copy(); - slots[i] = null; - break; - } - } - } else { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null) - { - if(slots[i].getItem() == slots[10].getItem() && slots[i].getItemDamage() == slots[10].getItemDamage()) - { - if(slots[10].stackSize + slots[i].stackSize <= slots[i].getMaxStackSize()) - { - slots[10].stackSize += slots[i].stackSize; - slots[i] = null; - } else { - int j = slots[10].getMaxStackSize() - slots[10].stackSize; - slots[10].stackSize += j; - slots[i].stackSize -= j; - } - break; - } - } - } - } - - if(this.slots[23] == null) - { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null && isProcessable(slots[i])) - { - slots[23] = slots[i].copy(); - slots[i] = null; - break; - } - } - } else { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null) - { - if(slots[i].getItem() == slots[23].getItem() && slots[i].getItemDamage() == slots[23].getItemDamage()) - { - if(slots[23].stackSize + slots[i].stackSize <= slots[i].getMaxStackSize()) - { - slots[23].stackSize += slots[i].stackSize; - slots[i] = null; - } else { - int j = slots[23].getMaxStackSize() - slots[23].stackSize; - slots[23].stackSize += j; - slots[i].stackSize -= j; - } - break; - } - } - } - } - - if(this.slots[24] == null) - { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null && isProcessable(slots[i])) - { - slots[24] = slots[i].copy(); - slots[i] = null; - break; - } - } - } else { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null) - { - if(slots[i].getItem() == slots[24].getItem() && slots[i].getItemDamage() == slots[24].getItemDamage()) - { - if(slots[24].stackSize + slots[i].stackSize <= slots[i].getMaxStackSize()) - { - slots[24].stackSize += slots[i].stackSize; - slots[i] = null; - } else { - int j = slots[24].getMaxStackSize() - slots[24].stackSize; - slots[24].stackSize += j; - slots[i].stackSize -= j; - } - break; - } - } - } - } - - if(this.power > 0 && (isProcessable(slots[9]) || isProcessable(slots[10]) || isProcessable(slots[23]) || isProcessable(slots[24])) && isStructureValid(worldObj)) - { - this.progress += 1; - ((ItemBattery)slots[22].getItem()).dischargeBattery(slots[22], 1); - if(soundCycle == 0) - this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "minecart.base", 1.0F, 0.75F); - soundCycle++; - - if(soundCycle >= 50) - soundCycle = 0; - } else { - this.progress = 0; - } - - if(slots[9] != null && slots[11] != null && (FurnaceRecipes.smelting().getSmeltingResult(slots[9]).getItem() != slots[11].getItem() || FurnaceRecipes.smelting().getSmeltingResult(slots[9]).getItemDamage() != slots[11].getItemDamage())) - { - this.progress = 0; - } - - if(slots[10] != null && slots[12] != null && (FurnaceRecipes.smelting().getSmeltingResult(slots[10]).getItem() != slots[12].getItem() || FurnaceRecipes.smelting().getSmeltingResult(slots[10]).getItemDamage() != slots[12].getItemDamage())) - { - this.progress = 0; - } - - if(slots[23] != null && slots[25] != null && (FurnaceRecipes.smelting().getSmeltingResult(slots[23]).getItem() != slots[25].getItem() || FurnaceRecipes.smelting().getSmeltingResult(slots[23]).getItemDamage() != slots[25].getItemDamage())) - { - this.progress = 0; - } - - if(slots[24] != null && slots[26] != null && (FurnaceRecipes.smelting().getSmeltingResult(slots[24]).getItem() != slots[26].getItem() || FurnaceRecipes.smelting().getSmeltingResult(slots[24]).getItemDamage() != slots[26].getItemDamage())) - { - this.progress = 0; - } - - if(this.progress >= TileEntityCoreAdvanced.processTime) - { - if(this.slots[9] != null && isProcessable(this.slots[9])) - { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(slots[9]); - if(slots[11] == null) - { - slots[11] = itemStack.copy(); - }else if(slots[11].isItemEqual(itemStack)) { - slots[11].stackSize += itemStack.stackSize; - } - if(slots[9].stackSize <= 0) - { - slots[9] = new ItemStack(slots[9].getItem().setFull3D()); - }else{ - slots[9].stackSize--; - } - if(slots[9].stackSize <= 0) - { - slots[9] = null; - } - } - if(this.slots[10] != null && isProcessable(this.slots[10])) - { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(slots[10]); - if(slots[12] == null) - { - slots[12] = itemStack.copy(); - }else if(slots[12].isItemEqual(itemStack)) { - slots[12].stackSize += itemStack.stackSize; - } - if(slots[10].stackSize <= 0) - { - slots[10] = new ItemStack(slots[10].getItem().setFull3D()); - }else{ - slots[10].stackSize--; - } - if(slots[10].stackSize <= 0) - { - slots[10] = null; - } - } - if(this.slots[23] != null && isProcessable(this.slots[23])) - { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(slots[23]); - if(slots[25] == null) - { - slots[25] = itemStack.copy(); - }else if(slots[25].isItemEqual(itemStack)) { - slots[25].stackSize += itemStack.stackSize; - } - if(slots[23].stackSize <= 0) - { - slots[23] = new ItemStack(slots[23].getItem().setFull3D()); - }else{ - slots[23].stackSize--; - } - if(slots[23].stackSize <= 0) - { - slots[23] = null; - } - } - if(this.slots[24] != null && isProcessable(this.slots[24])) - { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(slots[24]); - if(slots[26] == null) - { - slots[26] = itemStack.copy(); - }else if(slots[26].isItemEqual(itemStack)) { - slots[26].stackSize += itemStack.stackSize; - } - if(slots[24].stackSize <= 0) - { - slots[24] = new ItemStack(slots[24].getItem().setFull3D()); - }else{ - slots[24].stackSize--; - } - if(slots[24].stackSize <= 0) - { - slots[24] = null; - } - } - - this.progress = 0; - } - - if(this.slots[11] != null) - { - for(int i = 0; i < 9; i++) - { - int j = i + 13; - if(slots[j] != null) - { - if(slots[j].getItem() == slots[11].getItem() && slots[j].getItemDamage() == slots[11].getItemDamage()) - { - if(slots[j].stackSize < slots[j].getMaxStackSize()) - { - if(slots[j].stackSize + slots[11].stackSize <= slots[11].getMaxStackSize()) - { - slots[j].stackSize += slots[11].stackSize; - slots[11] = null; - break; - } else { - int k = slots[j].getMaxStackSize() - slots[j].stackSize; - if(k < 0) - { - slots[j].stackSize += k; - slots[11].stackSize -= k; - break; - } - } - } - } - } else { - slots[j] = slots[11].copy(); - slots[11] = null; - break; - } - } - } - - if(this.slots[12] != null) - { - for(int i = 0; i < 9; i++) - { - int j = i + 13; - if(slots[j] != null) - { - if(slots[j].getItem() == slots[12].getItem() && slots[j].getItemDamage() == slots[12].getItemDamage()) - { - if(slots[j].stackSize < slots[j].getMaxStackSize()) - { - if(slots[j].stackSize + slots[12].stackSize <= slots[12].getMaxStackSize()) - { - slots[j].stackSize += slots[12].stackSize; - slots[12] = null; - break; - } else { - int k = slots[j].getMaxStackSize() - slots[j].stackSize; - if(k < 0) - { - slots[j].stackSize += k; - slots[12].stackSize -= k; - break; - } - } - } - } - } else { - slots[j] = slots[12].copy(); - slots[12] = null; - break; - } - } - } - - if(this.slots[25] != null) - { - for(int i = 0; i < 9; i++) - { - int j = i + 13; - if(slots[j] != null) - { - if(slots[j].getItem() == slots[25].getItem() && slots[j].getItemDamage() == slots[25].getItemDamage()) - { - if(slots[j].stackSize < slots[j].getMaxStackSize()) - { - if(slots[j].stackSize + slots[25].stackSize <= slots[25].getMaxStackSize()) - { - slots[j].stackSize += slots[25].stackSize; - slots[25] = null; - break; - } else { - int k = slots[j].getMaxStackSize() - slots[j].stackSize; - if(k < 0) - { - slots[j].stackSize += k; - slots[25].stackSize -= k; - break; - } - } - } - } - } else { - slots[j] = slots[25].copy(); - slots[25] = null; - break; - } - } - } - - if(this.slots[26] != null) - { - for(int i = 0; i < 9; i++) - { - int j = i + 13; - if(slots[j] != null) - { - if(slots[j].getItem() == slots[26].getItem() && slots[j].getItemDamage() == slots[26].getItemDamage()) - { - if(slots[j].stackSize < slots[j].getMaxStackSize()) - { - if(slots[j].stackSize + slots[26].stackSize <= slots[26].getMaxStackSize()) - { - slots[j].stackSize += slots[26].stackSize; - slots[26] = null; - break; - } else { - int k = slots[j].getMaxStackSize() - slots[j].stackSize; - if(k < 0) - { - slots[j].stackSize += k; - slots[26].stackSize -= k; - break; - } - } - } - } - } else { - slots[j] = slots[26].copy(); - slots[26] = null; - break; - } - } - } - } + public void updateEntity() { } + @Override - public void setPower(long i) { - if(this.slots[22] != null && this.slots[22].getItem() == ModItems.factory_core_advanced) - { - ((ItemBattery)slots[22].getItem()).setCharge(slots[22], (int)i); - } - } + public void setPower(long i) { } + @Override public long getPower() { return power; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java index 21c51712d..1af5b3cfd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java @@ -236,240 +236,11 @@ public class TileEntityCoreTitanium extends TileEntityLoadedBase implements ISid } @Override - public void updateEntity() { - - if(!worldObj.isRemote) { - if(worldObj.getBlock(xCoord, yCoord + 1, zCoord) == ModBlocks.factory_titanium_conductor) - this.trySubscribe(worldObj, xCoord, yCoord + 2, zCoord, ForgeDirection.UP); - else - this.tryUnsubscribe(worldObj, xCoord, yCoord + 2, zCoord); - - if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) == ModBlocks.factory_titanium_conductor) - this.trySubscribe(worldObj, xCoord, yCoord - 2, zCoord, ForgeDirection.DOWN); - else - this.tryUnsubscribe(worldObj, xCoord, yCoord - 2, zCoord); - } - - if(this.slots[22] != null && this.slots[22].getItem() == ModItems.factory_core_titanium) - { - this.power = (int) ((IBatteryItem)slots[22].getItem()).getCharge(slots[22]); - } else { - this.power = 0; - } - - if(this.slots[9] == null) - { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null && isProcessable(slots[i])) - { - slots[9] = slots[i].copy(); - slots[i] = null; - break; - } - } - } else { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null) - { - if(slots[i].getItem() == slots[9].getItem() && slots[i].getItemDamage() == slots[9].getItemDamage()) - { - if(slots[9].stackSize + slots[i].stackSize <= slots[i].getMaxStackSize()) - { - slots[9].stackSize += slots[i].stackSize; - slots[i] = null; - } else { - int j = 64 - slots[9].stackSize; - slots[9].stackSize += j; - slots[i].stackSize -= j; - } - break; - } - } - } - } - - if(this.slots[10] == null) - { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null && isProcessable(slots[i])) - { - slots[10] = slots[i].copy(); - slots[i] = null; - break; - } - } - } else { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null) - { - if(slots[i].getItem() == slots[10].getItem() && slots[i].getItemDamage() == slots[10].getItemDamage()) - { - if(slots[10].stackSize + slots[i].stackSize <= slots[i].getMaxStackSize()) - { - slots[10].stackSize += slots[i].stackSize; - slots[i] = null; - } else { - int j = 64 - slots[10].stackSize; - slots[10].stackSize += j; - slots[i].stackSize -= j; - } - break; - } - } - } - } - - if(this.power > 0 && (isProcessable(slots[9]) || isProcessable(slots[10])) && isStructureValid(worldObj)) - { - this.progress += 1; - ((ItemBattery)slots[22].getItem()).dischargeBattery(slots[22], 1); - if(soundCycle == 0) - this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "minecart.base", 1.0F, 0.75F); - soundCycle++; - - if(soundCycle >= 50) - soundCycle = 0; - } else { - this.progress = 0; - } - - if(slots[9] != null && slots[11] != null && (FurnaceRecipes.smelting().getSmeltingResult(slots[9]).getItem() != slots[11].getItem() || FurnaceRecipes.smelting().getSmeltingResult(slots[9]).getItemDamage() != slots[11].getItemDamage())) - { - this.progress = 0; - } - - if(slots[10] != null && slots[12] != null && (FurnaceRecipes.smelting().getSmeltingResult(slots[10]).getItem() != slots[12].getItem() || FurnaceRecipes.smelting().getSmeltingResult(slots[10]).getItemDamage() != slots[12].getItemDamage())) - { - this.progress = 0; - } - - if(this.progress >= TileEntityCoreTitanium.processTime) - { - if(this.slots[9] != null && isProcessable(this.slots[9])) - { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(slots[9]); - if(slots[11] == null) - { - slots[11] = itemStack.copy(); - }else if(slots[11].isItemEqual(itemStack)) { - slots[11].stackSize += itemStack.stackSize; - } - if(slots[9].stackSize <= 0) - { - slots[9] = new ItemStack(slots[9].getItem().setFull3D()); - }else{ - slots[9].stackSize--; - } - if(slots[9].stackSize <= 0) - { - slots[9] = null; - } - } - if(this.slots[10] != null && isProcessable(this.slots[10])) - { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(slots[10]); - if(slots[12] == null) - { - slots[12] = itemStack.copy(); - }else if(slots[12].isItemEqual(itemStack)) { - slots[12].stackSize += itemStack.stackSize; - } - if(slots[10].stackSize <= 0) - { - slots[10] = new ItemStack(slots[10].getItem().setFull3D()); - }else{ - slots[10].stackSize--; - } - if(slots[10].stackSize <= 0) - { - slots[10] = null; - } - } - - this.progress = 0; - } - - if(this.slots[11] != null) - { - for(int i = 0; i < 9; i++) - { - int j = i + 13; - if(slots[j] != null) - { - if(slots[j].getItem() == slots[11].getItem() && slots[j].getItemDamage() == slots[11].getItemDamage()) - { - if(slots[j].stackSize < slots[j].getMaxStackSize()) - { - if(slots[j].stackSize + slots[11].stackSize <= slots[11].getMaxStackSize()) - { - slots[j].stackSize += slots[11].stackSize; - slots[11] = null; - break; - } else { - int k = slots[j].getMaxStackSize() - slots[j].stackSize; - if(k < 0) - { - slots[j].stackSize += k; - slots[11].stackSize -= k; - break; - } - } - } - } - } else { - slots[j] = slots[11].copy(); - slots[11] = null; - break; - } - } - } - - if(this.slots[12] != null) - { - for(int i = 0; i < 9; i++) - { - int j = i + 13; - if(slots[j] != null) - { - if(slots[j].getItem() == slots[12].getItem() && slots[j].getItemDamage() == slots[12].getItemDamage()) - { - if(slots[j].stackSize < slots[j].getMaxStackSize()) - { - if(slots[j].stackSize + slots[12].stackSize <= slots[12].getMaxStackSize()) - { - slots[j].stackSize += slots[12].stackSize; - slots[12] = null; - break; - } else { - int k = slots[j].getMaxStackSize() - slots[j].stackSize; - if(k < 0) - { - slots[j].stackSize += k; - slots[12].stackSize -= k; - break; - } - } - } - } - } else { - slots[j] = slots[12].copy(); - slots[12] = null; - break; - } - } - } - } + public void updateEntity() { } + @Override - public void setPower(long i) { - if(this.slots[22] != null && this.slots[22].getItem() == ModItems.factory_core_titanium) - { - ((ItemBattery)slots[22].getItem()).setCharge(slots[22], (int)i); - } - } + public void setPower(long i) { } + @Override public long getPower() { return power; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java index 733ff4993..bdb552293 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java @@ -12,6 +12,7 @@ import com.hbm.util.InventoryUtil; import api.hbm.energy.IEnergyUser; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; @@ -155,6 +156,7 @@ public abstract class TileEntityMachineAssemblerBase extends TileEntityMachineBa if(te instanceof IInventory) { IInventory inv = (IInventory) te; + ISidedInventory sided = inv instanceof ISidedInventory ? (ISidedInventory) inv : null; for(AStack ingredient : recipe) { @@ -163,7 +165,7 @@ public abstract class TileEntityMachineAssemblerBase extends TileEntityMachineBa for(int i = 0; i < inv.getSizeInventory(); i++) { ItemStack stack = inv.getStackInSlot(i); - if(ingredient.matchesRecipe(stack, true)) { + if(ingredient.matchesRecipe(stack, true) && (sided == null || sided.canExtractItem(i, stack, 0))) { for(int j = indices[0]; j <= indices[1]; j++) { @@ -212,6 +214,10 @@ public abstract class TileEntityMachineAssemblerBase extends TileEntityMachineBa if(out != null) { for(int j = 0; j < inv.getSizeInventory(); j++) { + + if(!inv.isItemValidForSlot(j, out)) + continue; + ItemStack target = inv.getStackInSlot(j); if(InventoryUtil.doesStackDataMatch(out, target) && target.stackSize < target.getMaxStackSize() && target.stackSize < inv.getInventoryStackLimit()) { @@ -222,6 +228,9 @@ public abstract class TileEntityMachineAssemblerBase extends TileEntityMachineBa } for(int j = 0; j < inv.getSizeInventory(); j++) { + + if(!inv.isItemValidForSlot(j, out)) + continue; if(inv.getStackInSlot(j) == null && inv.isItemValidForSlot(j, out)) { ItemStack copy = out.copy(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index fc4721ec7..7d6ac89fc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -27,6 +27,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -348,6 +349,7 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements if(te instanceof IInventory) { IInventory inv = (IInventory) te; + ISidedInventory sided = inv instanceof ISidedInventory ? (ISidedInventory) inv : null; for(AStack ingredient : recipe.inputs) { @@ -356,7 +358,7 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements for(int i = 0; i < inv.getSizeInventory(); i++) { ItemStack stack = inv.getStackInSlot(i); - if(ingredient.matchesRecipe(stack, true)) { + if(ingredient.matchesRecipe(stack, true) && (sided == null || sided.canExtractItem(i, stack, 0))) { for(int j = 13; j <= 16; j++) { @@ -405,6 +407,10 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements if(out != null) { for(int j = 0; j < inv.getSizeInventory(); j++) { + + if(!inv.isItemValidForSlot(j, out)) + continue; + ItemStack target = inv.getStackInSlot(j); if(InventoryUtil.doesStackDataMatch(out, target) && target.stackSize < target.getMaxStackSize()) { @@ -416,6 +422,9 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements for(int j = 0; j < inv.getSizeInventory(); j++) { + if(!inv.isItemValidForSlot(j, out)) + continue; + if(inv.getStackInSlot(j) == null && inv.isItemValidForSlot(j, out)) { ItemStack copy = out.copy(); copy.stackSize = 1; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java index bb9b848df..032eff15c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java @@ -18,6 +18,7 @@ import com.hbm.util.InventoryUtil; import api.hbm.energy.IEnergyUser; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -218,6 +219,7 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa if(te instanceof IInventory) { IInventory inv = (IInventory) te; + ISidedInventory sided = inv instanceof ISidedInventory ? (ISidedInventory) inv : null; for(AStack ingredient : recipe.inputs) { @@ -226,7 +228,7 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa for(int i = 0; i < inv.getSizeInventory(); i++) { ItemStack stack = inv.getStackInSlot(i); - if(ingredient.matchesRecipe(stack, true)) { + if(ingredient.matchesRecipe(stack, true) && (sided == null || sided.canExtractItem(i, stack, 0))) { for(int j = indices[0]; j <= indices[1]; j++) { @@ -276,6 +278,10 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa if(out != null) { for(int j = 0; j < inv.getSizeInventory(); j++) { + + if(!inv.isItemValidForSlot(j, out)) + continue; + ItemStack target = inv.getStackInSlot(j); if(InventoryUtil.doesStackDataMatch(out, target) && target.stackSize < target.getMaxStackSize() && target.stackSize < inv.getInventoryStackLimit()) { @@ -287,6 +293,9 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa for(int j = 0; j < inv.getSizeInventory(); j++) { + if(!inv.isItemValidForSlot(j, out)) + continue; + if(inv.getStackInSlot(j) == null && inv.isItemValidForSlot(j, out)) { ItemStack copy = out.copy(); copy.stackSize = 1; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java index e7a56664b..c29bd6b3d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java @@ -234,6 +234,10 @@ public class TileEntityMachineMiningDrill extends TileEntityMachineBase implemen ItemStack sta1 = inventory.getStackInSlot(i).copy(); ItemStack sta2 = slots[slot].copy(); + + if(!inventory.isItemValidForSlot(i, sta2)) + continue; + if(sta1 != null && sta2 != null) { sta1.stackSize = 1; sta2.stackSize = 1; @@ -259,6 +263,10 @@ public class TileEntityMachineMiningDrill extends TileEntityMachineBase implemen return false; ItemStack sta2 = slots[slot].copy(); + + if(!inventory.isItemValidForSlot(i, sta2)) + continue; + if(inventory.getStackInSlot(i) == null && sta2 != null) { sta2.stackSize = 1; slots[slot].stackSize--; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 3360627b8..a6f08ce7b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -21,6 +21,7 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -84,7 +85,8 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I if(te instanceof ISidedInventory) { sided = (ISidedInventory) te; - access = sided.getAccessibleSlotsFromSide(dir.ordinal()); + //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); + access = masquerade(sided, dir.ordinal()); } boolean hasSent = false; @@ -158,6 +160,15 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I } } + public static int[] masquerade(ISidedInventory sided, int side) { + + if(sided instanceof TileEntityFurnace) { + return new int[] {2}; + } + + return sided.getAccessibleSlotsFromSide(side); + } + public void networkUnpack(NBTTagCompound nbt) { this.isWhitelist = nbt.getBoolean("isWhitelist"); this.matcher.modes = new String[this.matcher.modes.length]; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java index 35ce9fdaf..ab8089d07 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java @@ -43,7 +43,8 @@ public class TileEntityCraneInserter extends TileEntityMachineBase implements IG if(te instanceof ISidedInventory) { ISidedInventory sided = (ISidedInventory) te; - access = sided.getAccessibleSlotsFromSide(dir.ordinal()); + //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); + access = CraneInserter.masquerade(sided, dir.ordinal()); } if(te instanceof IInventory) { diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java index 2e147e50d..c35818c77 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.turret; import java.util.ArrayList; import java.util.List; +import com.hbm.blocks.BlockDummyable; import com.hbm.entity.projectile.EntityArtilleryShell; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.inventory.container.ContainerTurretBase; @@ -24,6 +25,7 @@ import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUIProvider { @@ -49,7 +51,12 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI } public void enqueueTarget(double x, double y, double z) { - this.targetQueue.add(Vec3.createVectorHelper(x, y, z)); + + Vec3 pos = this.getTurretPos(); + Vec3 delta = Vec3.createVectorHelper(x - pos.xCoord, y - pos.yCoord, z - pos.zCoord); + if(delta.lengthVector() <= this.getDecetorRange()) { + this.targetQueue.add(Vec3.createVectorHelper(x, y, z)); + } } @Override @@ -111,6 +118,11 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI public double getTurretElevation() { return 90D; } + + @Override + public int getDecetorInterval() { + return mode == MODE_CANNON ? 20 : 200; + } @Override protected void seekNewTarget() { @@ -148,7 +160,7 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI /* * This is done to compensate for the barrel length, as this small deviation has a huge impact in both modes at longer ranges. * The consequence of this is that using the >before< angle of the barrel as an approximation can lead to problems at closer range, - * as the math tries to properly calculate the >after< angle. This should not be a problem due to the etector grace distance being + * as the math tries to properly calculate the >after< angle. This should not be a problem due to the detector grace distance being * rather high, but it is still important to note. */ pos.xCoord += barrel.xCoord; @@ -160,7 +172,7 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI double x = Math.sqrt(delta.xCoord * delta.xCoord + delta.zCoord * delta.zCoord); double y = delta.yCoord; - double v0 = 20; + double v0 = getV0(); double v02 = v0 * v0; double g = 9.81 * 0.05; double upperLower = mode == MODE_CANNON ? -1 : 1; @@ -169,6 +181,10 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI this.turnTowardsAngle(targetPitch, targetYaw); } + public double getV0() { + return mode == MODE_CANNON ? 20D : 50D; + } + public int getShellLoaded() { for(int i = 1; i < 10; i++) { @@ -203,7 +219,7 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI EntityArtilleryShell proj = new EntityArtilleryShell(worldObj); proj.setPositionAndRotation(pos.xCoord + vec.xCoord, pos.yCoord + vec.yCoord, pos.zCoord + vec.zCoord, 0.0F, 0.0F); - proj.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, 20F, 0.0F); + proj.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, (float) getV0(), 0.0F); proj.setTarget((int) tPos.xCoord, (int) tPos.yCoord, (int) tPos.zCoord); proj.setType(type); @@ -213,6 +229,20 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI worldObj.spawnEntityInWorld(proj); } + protected void updateConnections() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + for(int i = 0; i < 2; i++) { + for(int j = 0; j < 4; j++) { + this.trySubscribe(worldObj, xCoord + dir.offsetX * (-1 + j) + rot.offsetX * -3, yCoord + i, zCoord + dir.offsetZ * (-1 + j) + rot.offsetZ * -3, ForgeDirection.SOUTH); + this.trySubscribe(worldObj, xCoord + dir.offsetX * (-1 + j) + rot.offsetX * 2, yCoord + i, zCoord + dir.offsetZ * (-1 + j) + rot.offsetZ * 2, ForgeDirection.NORTH); + this.trySubscribe(worldObj, xCoord + dir.offsetX * -2 + rot.offsetX * (1 - j), yCoord + i, zCoord + dir.offsetZ * -2 + rot.offsetZ * (1 - j), ForgeDirection.EAST); + this.trySubscribe(worldObj, xCoord + dir.offsetX * 3 + rot.offsetX * (1 - j), yCoord + i, zCoord + dir.offsetZ * 3 + rot.offsetZ * (1 - j), ForgeDirection.WEST); + } + } + } + @Override public void updateEntity() { @@ -251,6 +281,8 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI if(!worldObj.isRemote) { + this.updateConnections(); + if(this.target != null && !target.isEntityAlive()) { this.target = null; this.stattrak++; @@ -342,7 +374,9 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI timer++; - if(timer % 40 == 0) { + int delay = mode == MODE_ARTILLERY ? 200 : 40; + + if(timer % delay == 0) { int conf = this.getShellLoaded(); @@ -377,6 +411,10 @@ public class TileEntityTurretArty extends TileEntityTurretBaseNT implements IGUI this.mode++; if(this.mode > 2) this.mode = 0; + + this.tPos = null; + this.targetQueue.clear(); + } else{ super.handleButtonPacket(value, meta); } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 11b8b5412..40155d00a 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -248,7 +248,7 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple return data; } - private void updateConnections() { + protected void updateConnections() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); diff --git a/src/main/java/com/hbm/util/ArmorUtil.java b/src/main/java/com/hbm/util/ArmorUtil.java index 6c42058ef..ff292c09c 100644 --- a/src/main/java/com/hbm/util/ArmorUtil.java +++ b/src/main/java/com/hbm/util/ArmorUtil.java @@ -98,6 +98,10 @@ public class ArmorUtil { return; entity.getEquipmentInSlot(slot + 1).damageItem(amount, entity); + + if(entity.getEquipmentInSlot(slot + 1).stackSize == 0) { + entity.setCurrentItemOrArmor(slot + 1, null); + } } public static void resetFlightTime(EntityPlayer player) { diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index bb61339ef..8ce100638 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -318,6 +318,7 @@ container.soyuzLauncher=Soyuz-Startplatform container.storageDrum=Atommüll-Lagertrommel container.teleLinker=TelLink-Gerät container.teleporter=Teleporter +container.turretArty=Greg container.turretChekhov=Tschechows Gewehr container.turretFriendly=Mister Friendly container.turretFritz=Fritz @@ -678,6 +679,12 @@ item.ammo_9mm_ap.name=9mm Patrone (Panzerbrechend) item.ammo_9mm_chlorophyte.name=9mm Patrone (Grünalgen) item.ammo_9mm_du.name=9mm Patrone (DU) item.ammo_9mm_rocket.name=9mm Rakete +item.ammo_arty.name=16" Artilleriegranate +item.ammo_arty_classic.name=16" Artilleriegranate (Das Factorio-Spezial) +item.ammo_arty_he.name=16" Artilleriegranate (HE) +item.ammo_arty_mini_nuke.name=16" Mikroatomgranate +item.ammo_arty_nuke.name=16" Atomare Artilleriegranate +item.ammo_arty_phosphorus.name=16" Phosphor-Artilleriegranate item.ammo_cell.name=Energiezelle item.ammo_container.name=Munitionsbehälter item.ammo_dart.name=Plastikdart (Withernd) @@ -1049,7 +1056,7 @@ item.cape_schrabidium.name=Cape (Schrabidisch) item.cape_vertice.name=Lord Vertices Cape item.cart.crate.name=Stahlkistenlore item.cart.destroyer.name=Schuttzerstörende Lore -item.cart.empty.name=Stählerne Lore +item.cart.empty.name=Lore item.casing_357.name=.357 Magnum-Hülse (x24) item.casing_44.name=.44 Magnum-Hülse (x24) item.casing_50.name=Großkaliberhülse (x12) @@ -1279,6 +1286,7 @@ item.desh_pickaxe.name=Arbeitslegierungsspitzhacke item.desh_shovel.name=Arbeitslegierungsschaufel item.desh_sword.name=Arbeitslegierungsschwert item.designator.name=Kurzdistanz Zielmarkierer +item.designator_arty_range.name=Weitstrecken Artilleriefernbedienung item.designator_manual.name=Manueller Zielmarkierer item.designator_range.name=Weitstrecken-Zielmarkierer item.detonator.name=Fernzünder @@ -3676,6 +3684,7 @@ tile.tile_lab_cracked.name=Gesprungene Laborfliesen tile.tnt_ntm.name=Echtes TNT tile.toxic_block.name=Stereotypischer grüner Schleim tile.transition_seal.name=Übergangssiegel +tile.turret_arty.name=Artilleriegeschütz "Greg" tile.turret_cheapo.name=Billigsdorfer Gatling-Geschütz tile.turret_chekhov.name=Schweres MG-Geschütz "Tschechows Gewehr" tile.turret_cwis.name=Phalanx Mk-15 CIWS diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f93d66595..9c5f71776 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -495,6 +495,7 @@ container.soyuzLauncher=Soyuz Launch Platform container.storageDrum=Nuclear Waste Disposal Drum container.teleLinker=TelLink Device container.teleporter=Teleporter +container.turretArty=Greg container.turretChekhov=Chekhov's Gun container.turretFriendly=Mister Friendly container.turretFritz=Fritz @@ -892,6 +893,12 @@ item.ammo_9mm_ap.name=9mm Round (Armor Piercing) item.ammo_9mm_chlorophyte.name=9mm Round (Chlorophyte) item.ammo_9mm_du.name=9mm Round (DU) item.ammo_9mm_rocket.name=9mm Rocket +item.ammo_arty.name=16" Artillery Shell +item.ammo_arty_classic.name=16" Artillery Shell (The Factorio Special) +item.ammo_arty_he.name=16" High Explosive Artillery Shell +item.ammo_arty_mini_nuke.name=16" Micro Nuclear Artillery Shell +item.ammo_arty_nuke.name=16" Nuclear Artillery Shell +item.ammo_arty_phosphorus.name=16" Phosphorus Shell item.ammo_cell.name=Energy Cell item.ammo_container.name=Ammo Container item.ammo_dart.name=Plastic Dart (Withering) @@ -1281,7 +1288,7 @@ item.cape_schrabidium.name=Cape (Schrabidic) item.cape_vertice.name=Lord Vertice's Cape item.cart.crate.name=Crate Cart item.cart.destroyer.name=Scrap Destroying Cart -item.cart.empty.name=Steel Minecart +item.cart.empty.name=Minecart item.casing_357.name=.357 Magnum Casing (x24) item.casing_44.name=.44 Magnum Casing (x24) item.casing_50.name=Large Caliber Casing (x12) @@ -1518,6 +1525,7 @@ item.desh_pickaxe.name=Worker's Alloy Pickaxe item.desh_shovel.name=Worker's Alloy Shovel item.desh_sword.name=Worker's Alloy Sword item.designator.name=Short Range Target Designator +item.designator_arty_range.name=Long Range Artillery Remote item.designator_manual.name=Manual Target Designator item.designator_range.name=Long Range Target Designator item.detonator.name=Detonator @@ -4090,6 +4098,7 @@ tile.tile_lab_cracked.name=Cracked Laboratory Tiles tile.tnt_ntm.name=Actual TNT tile.toxic_block.name=Stereotypical Green Ooze tile.transition_seal.name=Transition Seal +tile.turret_arty.name=Artillery Turret "Greg" tile.turret_cheapo.name=Cheapo Gatling Sentry tile.turret_chekhov.name=Heavy Machine Gun Turret "Chekhov's Gun" tile.turret_cwis.name=Phalanx Mk-15 CIWS diff --git a/src/main/resources/assets/hbm/textures/gui/factory_advanced.png b/src/main/resources/assets/hbm/textures/gui/factory_advanced.png deleted file mode 100644 index 9868c4b8a99e724c17373e2638604331117870f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2250 zcmeHIeKeG56u<9`(S$UqQ?u2nX{F6NzCuna^P0$zChIF^+A)(9VW=iV%=D!!qU^{i zS)FWK>uX6xWajKLl+TT(e56PwWl*Vc3})X^^w0je|84iY@43Hw&vWnd+~4y&_epeT zIM35rssjM?T;c zEkNsqs{;5f2J#}I=m3<4LFFDO3x-~M=(mH{HZWuf?@d9u7F4UDW*6Mw35}lc_YRP` zLdRCqyo?LTL z_#O;T?125B1w55=j4*2FM$r8Z0q9q0e&jW+Sb{mpd?#PNXZT)z6!%~tL~w(7d^27k zpJHuhVYVUEDxQJ$7Yi3h2d`+hqEjB(Ye7ojrYr6#yJOAul>#n%b&7&S_o;6pCms>6 ze17%C^-aZrhFe+>Z{IvH+RAUN%qA19ZBhhPMdl>rW61sP?7JwWb(j#bsVS2_x|jlC z8yjn100VcJKoYk1l)kgyTW=%-#g&F_CYp9PExFJ3&teE_#gE~Q3#!REXWfV`<}{JW z80pJ5F~LR(M_H!R0Uj!kUHIJ7=fWzYjrF*{8&Z<(ua%zQlz5_AuFKRX521_J@+RDl zFT@Qt>nvC2f|Ha)VUM3p9mm}dU9+scfQ73LRzJDE()i}>C3RtOa)?31@a=OlWp1?g z8Jq~}j^x=!NgmwCwe_m^?WHa<8?)JTAjpi`7?W3ufQoZR`1Q&;z(END!edSec! zGGsn$3Nk)28@Ogjf|Xl40vjGCkXJNZ63r%l7=CLO!;^x(AQ2hgwg7W! zcwT|Z*tO)s;Rm0B%RBTeD|5npa5E8f@uOJ`oI4luym#xlI|E2;CD{b@@yVFHLSBi$k?E7A|dC;YkFIrA5+MH_H~3 zCdLZOv9HuUdJvewS4J|C(py=$lD=yh+=(jl6Fnx|AJTe?ku&}S=NIdw&PA7t1BBM` zVptbn1Yy)ECNQ$>jtq^qTSXN;EsK};D_C-Kc3I58gO|_ztKud>;>2H2+eZUEA}D8m!R(xHvH!3u&C={{ZD` B8Mpud diff --git a/src/main/resources/assets/hbm/textures/gui/factory_titanium.png b/src/main/resources/assets/hbm/textures/gui/factory_titanium.png deleted file mode 100644 index 2e24e9a2062b7d039621d19c3d8138c9dfe23e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2246 zcmeHIX;4#F6h1E`3Rn?vP)LD61uBk7uz-L;3{*%!8>0ciolPMPU@SopS)MYe7zA8U zj9c7rqY4rQg=l7?D6Nc9#L;L(VVbZnDo{xveJ?IkfAnAf)idwibMHCdopauI&b=?6 z!)8u2Cz}Jn#1PiPWdH~^MZnYqQ~dJCFia8S1AYzws4SYGk0t?_0B3Pn5N7xG_6`pZ z2Ui17hQUn-b9-UF27EhV&RdAP4T;wwp%zjvL)KZ?asdQaAy^IUW(a)_5f5OU0#@Az zt`Y)U;dBn1%YaLp;mRhECP7^s)bOCyA2joz(+hg%z&i>I&jg(_++7U~5zxqmM@!&o zD5!$rRUpWtV8>C|a{zXi!odO%?}X#Iu&)@lNkk%1eSN*bV8F8dCf^wN4;fgzAX$qa z6yY*97i+NpvjBH^ybDIHnSiw-1;9d%zsN67^UW}$tuQE3$lbU>m=^u(dJshOl7-ad z^+G34syo#;(IcCU-7m9476yc+ukCpef9Mp$GB5gQqp#NeND8~aVAxstcr}Ars<^pE zl_VQh-0wJc^5O~7lVH)sS#LvZ76gSqc$dG8vA0RDWe$)C@}*Q?pIuarNkX3;5ev>~ zc|^bzNM!Mrm||oxCjg<;VabJi{&dI6aWjk7A6J>;09+)uPGh&*Cy^v3%V{pxtYT5W zm`TdZ^IgOgXpdXuiMi2{!YM{nkF1c7Y8>NMP_xhMj>;rHshSirkuM!Oy4HRx1y zDdG*Wglq^V?jtG(eb$OYa|t{``-zx%mfS{OjM7lIYeRNXk}xrJr6n3@Z6(&EUB}8a zf@uq2M(Rr_C>bEQue@s}Pq&&1KQyzf8CPEG%5$pup{~Dqoi*bW@ux&@9aSW9f2`0B zo-tS6%H?0zBjx(1tz?b0gl=L_@NBX$JK~7kY`Ij8MCvZNA&gr39K|U9$({6-V>S{S z(<8kg=FzjKJsBJJ9x#19)~KA`Xs2X!PnP#rOP726S-XaNN`1`sme*X{92mS&);P}s zSx&S2ioE%EYsMwCq)@V@lzDVQ=kuLHhYUK&S?S&0OSU8)9BG^0Zt?nA^)q`ydA+5R zpLX`SRr;>0ZB~3#AY1eM$aZZZ(^v(37<8a~nFH6~Q1t>Y9A5hKeF^vv4V14u@IrsA zF&Wf(eX;51))i&B?uj%>P@fdNd0f9?1`fpKONEWATHQ!xZ~-FieSA-l#QeCWoz)eS z?!IxZvAb~8=Qze46{{NZy<)zTq#p9$!KY_*d+_d%8O)Va6}elgtc(b3FgD}o1*#5Z zm;WPY9wHr5-4kR*dR&T#ei=EV9=2dDpJ`$r31LC9mc$s~*r?Jh^8F3u zs7>U!{be1cZo-V9ML8i$^X|lg()@g2Yb6w;vz#3#qrnUt>!OJaOAh8DawcG|6?K-< z{H^E>?7W1xAFiv*930s*wwd;Y+s`CHFI?=Tu~V6zLp}}8xHTk*z3_5i)b_st-yap< diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_radar.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_radar.png index d613e7da2a05e2784a29588a765ead2cb3abf19d..fdb717ce1251aee4cc1cb05d2a48ff102fac41b2 100644 GIT binary patch literal 11898 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