From 4bc09afb1f93b2f6d2cd3647a02f4c4296a4ab49 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 22 Jul 2023 18:30:32 +0200 Subject: [PATCH 1/7] even more custom machine crap --- src/main/java/com/hbm/blocks/BlockEnums.java | 8 +++ src/main/java/com/hbm/blocks/ModBlocks.java | 15 ++-- .../blocks/machine/BlockCustomMachine.java | 10 +-- .../hbm/config/CustomMachineConfigJSON.java | 65 +++++++++++++++++- .../handler/pollution/PollutionHandler.java | 7 +- .../recipes/loader/SerializableRecipe.java | 24 +++---- src/main/java/com/hbm/items/ModItems.java | 58 ---------------- .../hbm/items/block/ItemCustomMachine.java | 8 +-- .../java/com/hbm/items/food/ItemFlask.java | 4 +- src/main/java/com/hbm/main/MainRegistry.java | 27 ++++++++ .../machine/TileEntityMachineRadar.java | 4 +- src/main/resources/assets/hbm/lang/en_US.lang | 19 +++++ .../textures/blocks/cm_circuit_aluminium.png | Bin 0 -> 525 bytes .../hbm/textures/blocks/cm_circuit_copper.png | Bin 0 -> 569 bytes .../hbm/textures/blocks/cm_circuit_gold.png | Bin 0 -> 532 bytes .../textures/blocks/cm_circuit_red_copper.png | Bin 0 -> 541 bytes .../blocks/cm_circuit_schrabidium.png | Bin 0 -> 581 bytes 17 files changed, 155 insertions(+), 94 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/cm_circuit_aluminium.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/cm_circuit_copper.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/cm_circuit_gold.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/cm_circuit_red_copper.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/cm_circuit_schrabidium.png diff --git a/src/main/java/com/hbm/blocks/BlockEnums.java b/src/main/java/com/hbm/blocks/BlockEnums.java index f1119ce64..6bb64b079 100644 --- a/src/main/java/com/hbm/blocks/BlockEnums.java +++ b/src/main/java/com/hbm/blocks/BlockEnums.java @@ -33,6 +33,14 @@ public class BlockEnums { DESH, BISMUTH } + + public static enum EnumCMCircuit { + ALUMINIUM, + COPPER, + RED_COPPER, + GOLD, + SCHRABIDIUM + } /** DECO / STRUCTURE ENUMS */ //i apologize in advance diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 55b367285..7783f7652 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -868,6 +868,7 @@ public class ModBlocks { public static Block cm_sheet; public static Block cm_engine; public static Block cm_tank; + public static Block cm_circuit; public static Block cm_port; public static Block custom_machine; @@ -2020,12 +2021,13 @@ public class ModBlocks { factory_advanced_furnace = new FactoryHatch(Material.iron).setBlockName("factory_advanced_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":factory_advanced_furnace"); factory_advanced_conductor = new BlockPillar(Material.iron, RefStrings.MODID + ":factory_advanced_conductor").setBlockName("factory_advanced_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":factory_advanced_hull"); - cm_block = new BlockCM(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_block").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_block"); - cm_sheet = new BlockCM(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_sheet").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_sheet"); - cm_engine = new BlockCM(Material.iron, EnumCMEngines.class, true, true).setBlockName("cm_engine").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_engine"); - cm_tank = new BlockCMGlass(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_tank").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_tank"); - cm_port = new BlockCMPort(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_port").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_port"); - custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); + cm_block = new BlockCM(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_block").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_block"); + cm_sheet = new BlockCM(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_sheet").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_sheet"); + cm_engine = new BlockCM(Material.iron, EnumCMEngines.class, true, true).setBlockName("cm_engine").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_engine"); + cm_tank = new BlockCMGlass(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_tank").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_tank"); + cm_circuit = new BlockCM(Material.iron, EnumCMCircuit.class, true, true).setBlockName("cm_circuit").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_circuit"); + cm_port = new BlockCMPort(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_port").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_port"); + custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F); reactor_element = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_element_top", RefStrings.MODID + ":reactor_element_base").setBlockName("reactor_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_element_side"); reactor_control = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_control_top").setBlockName("reactor_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_control_side"); @@ -3351,6 +3353,7 @@ public class ModBlocks { register(cm_sheet); register(cm_engine); register(cm_tank); + register(cm_circuit); register(cm_port); //Multiblock Generators diff --git a/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java b/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java index 469d11f25..e007403ef 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java +++ b/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java @@ -2,6 +2,7 @@ package com.hbm.blocks.machine; import java.util.ArrayList; +import com.hbm.config.CustomMachineConfigJSON; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -49,6 +50,7 @@ public class BlockCustomMachine extends BlockContainer { @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { + if(metadata >= 100) return side == 3 ? this.iconFront : this.blockIcon; return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); } @@ -116,15 +118,14 @@ public class BlockCustomMachine extends BlockContainer { Item item = getItemDropped(metadata, world.rand, fortune); if(item != null) { - ItemStack stack = new ItemStack(item); TileEntityCustomMachine tile = (TileEntityCustomMachine) world.getTileEntity(x, y, z); if(tile != null) { + ItemStack stack = new ItemStack(item, 1, CustomMachineConfigJSON.niceList.indexOf(tile.config) + 100); stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setString("machineType", tile.machineType); + ret.add(stack); } - - ret.add(stack); } return ret; @@ -134,10 +135,9 @@ public class BlockCustomMachine extends BlockContainer { public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { //using the deprecated one to make NEI happy TileEntityCustomMachine tile = (TileEntityCustomMachine) world.getTileEntity(x, y, z); - - ItemStack stack = new ItemStack(this); if(tile != null && tile.machineType != null && !tile.machineType.isEmpty()) { + ItemStack stack = new ItemStack(this, 1, CustomMachineConfigJSON.niceList.indexOf(tile.config) + 100); stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setString("machineType", tile.machineType); return stack; diff --git a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java index 750fb8733..886a7741a 100644 --- a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java +++ b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java @@ -14,15 +14,26 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.blocks.ModBlocks; import com.hbm.config.CustomMachineConfigJSON.MachineConfiguration.ComponentDefinition; +import com.hbm.inventory.OreDictManager; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.ModItems; +import com.hbm.main.CraftingManager; import com.hbm.main.MainRegistry; import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; public class CustomMachineConfigJSON { public static final Gson gson = new Gson(); public static HashMap customMachines = new HashMap(); + public static List niceList = new ArrayList(); public static void initialize() { File folder = MainRegistry.configHbmDir; @@ -59,12 +70,27 @@ public class CustomMachineConfigJSON { writer.name("recipeConsumptionMult").value(1.0D); writer.name("maxPower").value(10_000L); + writer.name("recipeShape").beginArray(); + writer.value("IPI").value("PCP").value("IPI"); + writer.endArray(); + + writer.name("recipeParts").beginArray().setIndent(""); + writer.value("I"); + SerializableRecipe.writeAStack(new OreDictStack(OreDictManager.STEEL.ingot()), writer); + writer.setIndent(""); + writer.value("P"); + SerializableRecipe.writeAStack(new OreDictStack(OreDictManager.STEEL.plate()), writer); + writer.setIndent(""); + writer.value("C"); + SerializableRecipe.writeAStack(new ComparableStack(ModItems.circuit_aluminium), writer); + writer.endArray().setIndent(" "); + writer.name("components").beginArray(); for(int x = -1; x <= 1; x++) { for(int y = -1; y <= 1; y++) { for(int z = 0; z <= 2; z++) { - if(!(x == 0 && y == 0 && z == 1) && !(x == 0 && z == 0)) { + if(!(x == 0 && y == 0 && z == 1) && !(x == 0 && z == 1) && !(x == 0 && y == 0 && z == 0)) { writer.beginObject().setIndent(""); writer.name("block").value(y == 0 ? "hbm:tile.cm_sheet" : "hbm:tile.cm_block"); writer.name("x").value(x); @@ -83,7 +109,7 @@ public class CustomMachineConfigJSON { writer.name("block").value("hbm:tile.cm_port"); writer.name("x").value(0); writer.name("y").value(-1); - writer.name("z").value(0); + writer.name("z").value(1); writer.name("metas").beginArray(); writer.value(0); writer.endArray(); @@ -93,7 +119,7 @@ public class CustomMachineConfigJSON { writer.name("block").value("hbm:tile.cm_port"); writer.name("x").value(0); writer.name("y").value(1); - writer.name("z").value(0); + writer.name("z").value(1); writer.name("metas").beginArray(); writer.value(0); writer.endArray(); @@ -134,6 +160,38 @@ public class CustomMachineConfigJSON { configuration.recipeConsumptionMult = machineObject.get("recipeConsumptionMult").getAsDouble(); configuration.maxPower = machineObject.get("maxPower").getAsLong(); + if(machineObject.has("recipeShape") && machineObject.has("recipeParts")) { + JsonArray recipeShape = machineObject.get("recipeShape").getAsJsonArray(); + JsonArray recipeParts = machineObject.get("recipeParts").getAsJsonArray(); + + Object[] parts = new Object[recipeShape.size() + recipeParts.size()]; + + for(int j = 0; j < recipeShape.size(); j++) { + parts[j] = recipeShape.get(j).getAsString(); + } + + for(int j = 0; j < recipeParts.size(); j++) { + Object o = null; + + if(j % 2 == 0) { + o = recipeParts.get(j).getAsString().charAt(0); //god is dead and we killed him + } else { + AStack a = SerializableRecipe.readAStack(recipeParts.get(j).getAsJsonArray()); + + if(a instanceof ComparableStack) o = ((ComparableStack) a).toStack(); + if(a instanceof OreDictStack) o = ((OreDictStack) a).name; + } + + parts[j + recipeShape.size()] = o; + } + + ItemStack stack = new ItemStack(ModBlocks.custom_machine, 1, i + 100); + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setString("machineType", configuration.unlocalizedName); + + CraftingManager.addRecipeAuto(stack, parts); + } + JsonArray components = machineObject.get("components").getAsJsonArray(); configuration.components = new ArrayList(); @@ -154,6 +212,7 @@ public class CustomMachineConfigJSON { } customMachines.put(configuration.unlocalizedName, configuration); + niceList.add(configuration); } } catch(Exception ex) { diff --git a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java index ef3752953..6f783a4f5 100644 --- a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java +++ b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java @@ -6,6 +6,7 @@ import java.io.FileOutputStream; import java.util.HashMap; import java.util.Locale; import java.util.Map.Entry; +import java.util.UUID; import com.hbm.config.RadiationConfig; @@ -304,6 +305,8 @@ public class PollutionHandler { /// MOB EFFECTS /// /////////////////// + public static final UUID maxHealth = UUID.fromString("25462f6c-2cb2-4ca8-9b47-3a011cc61207"); + public static final UUID attackDamage = UUID.fromString("8f442d7c-d03f-49f6-a040-249ae742eed9"); @SubscribeEvent public void decorateMob(LivingSpawnEvent event) { @@ -320,8 +323,8 @@ public class PollutionHandler { if(living instanceof IMob) { if(data.pollution[PollutionType.SOOT.ordinal()] > RadiationConfig.buffMobThreshold) { - if(living.getEntityAttribute(SharedMonsterAttributes.maxHealth) != null) living.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier("Soot Anger Health Increase", 1D, 1)); - if(living.getEntityAttribute(SharedMonsterAttributes.attackDamage) != null) living.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier("Soot Anger Damage Increase", 1.5D, 1)); + if(living.getEntityAttribute(SharedMonsterAttributes.maxHealth) != null) living.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier(maxHealth, "Soot Anger Health Increase", 1D, 1)); + if(living.getEntityAttribute(SharedMonsterAttributes.attackDamage) != null) living.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier(attackDamage, "Soot Anger Damage Increase", 1.5D, 1)); living.heal(living.getMaxHealth()); } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 5e2f11a98..c719bd86c 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -188,7 +188,7 @@ public abstract class SerializableRecipe { * JSON IO UTIL */ - protected static AStack readAStack(JsonArray array) { + public static AStack readAStack(JsonArray array) { try { String type = array.get(0).getAsString(); int stacksize = array.size() > 2 ? array.get(2).getAsInt() : 1; @@ -206,7 +206,7 @@ public abstract class SerializableRecipe { return new ComparableStack(ModItems.nothing); } - protected static AStack[] readAStackArray(JsonArray array) { + public static AStack[] readAStackArray(JsonArray array) { try { AStack[] items = new AStack[array.size()]; for(int i = 0; i < items.length; i++) { items[i] = readAStack((JsonArray) array.get(i)); } @@ -216,7 +216,7 @@ public abstract class SerializableRecipe { return new AStack[0]; } - protected static void writeAStack(AStack astack, JsonWriter writer) throws IOException { + public static void writeAStack(AStack astack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); if(astack instanceof ComparableStack) { @@ -236,7 +236,7 @@ public abstract class SerializableRecipe { writer.setIndent(" "); } - protected static ItemStack readItemStack(JsonArray array) { + public static ItemStack readItemStack(JsonArray array) { try { Item item = (Item) Item.itemRegistry.getObject(array.get(0).getAsString()); int stacksize = array.size() > 1 ? array.get(1).getAsInt() : 1; @@ -247,7 +247,7 @@ public abstract class SerializableRecipe { return new ItemStack(ModItems.nothing); } - protected static Pair readItemStackChance(JsonArray array) { + public static Pair readItemStackChance(JsonArray array) { try { Item item = (Item) Item.itemRegistry.getObject(array.get(0).getAsString()); int stacksize = array.size() > 2 ? array.get(1).getAsInt() : 1; @@ -259,7 +259,7 @@ public abstract class SerializableRecipe { return new Pair(new ItemStack(ModItems.nothing), 1F); } - protected static ItemStack[] readItemStackArray(JsonArray array) { + public static ItemStack[] readItemStackArray(JsonArray array) { try { ItemStack[] items = new ItemStack[array.size()]; for(int i = 0; i < items.length; i++) { items[i] = readItemStack((JsonArray) array.get(i)); } @@ -269,7 +269,7 @@ public abstract class SerializableRecipe { return new ItemStack[0]; } - protected static Pair[] readItemStackArrayChance(JsonArray array) { + public static Pair[] readItemStackArrayChance(JsonArray array) { try { Pair[] items = new Pair[array.size()]; for(int i = 0; i < items.length; i++) { items[i] = readItemStackChance((JsonArray) array.get(i)); } @@ -279,7 +279,7 @@ public abstract class SerializableRecipe { return new Pair[0]; } - protected static void writeItemStack(ItemStack stack, JsonWriter writer) throws IOException { + public static void writeItemStack(ItemStack stack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); writer.value(Item.itemRegistry.getNameForObject(stack.getItem())); //item name @@ -289,7 +289,7 @@ public abstract class SerializableRecipe { writer.setIndent(" "); } - protected static void writeItemStackChance(Pair stack, JsonWriter writer) throws IOException { + public static void writeItemStackChance(Pair stack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); writer.value(Item.itemRegistry.getNameForObject(stack.getKey().getItem())); //item name @@ -300,7 +300,7 @@ public abstract class SerializableRecipe { writer.setIndent(" "); } - protected static FluidStack readFluidStack(JsonArray array) { + public static FluidStack readFluidStack(JsonArray array) { try { FluidType type = Fluids.fromName(array.get(0).getAsString()); int fill = array.get(1).getAsInt(); @@ -311,7 +311,7 @@ public abstract class SerializableRecipe { return new FluidStack(Fluids.NONE, 0); } - protected static FluidStack[] readFluidArray(JsonArray array) { + public static FluidStack[] readFluidArray(JsonArray array) { try { FluidStack[] fluids = new FluidStack[array.size()]; for(int i = 0; i < fluids.length; i++) { fluids[i] = readFluidStack((JsonArray) array.get(i)); } @@ -321,7 +321,7 @@ public abstract class SerializableRecipe { return new FluidStack[0]; } - protected static void writeFluidStack(FluidStack stack, JsonWriter writer) throws IOException { + public static void writeFluidStack(FluidStack stack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); writer.value(stack.type.getName()); //fluid type diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 91c4863de..eeb17ddfd 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -17,7 +17,6 @@ import com.hbm.items.armor.*; import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart; import com.hbm.items.bomb.*; import com.hbm.items.food.*; -import com.hbm.items.food.ItemConserve.EnumFoodType; import com.hbm.items.machine.*; import com.hbm.items.machine.ItemFELCrystal.EnumWavelengths; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -3452,34 +3451,6 @@ public class ModItems { coffee = new ItemEnergy().setUnlocalizedName("coffee").setTextureName(RefStrings.MODID + ":coffee"); coffee_radium = new ItemEnergy().setUnlocalizedName("coffee_radium").setTextureName(RefStrings.MODID + ":coffee_radium"); chocolate = new ItemPill(0).setUnlocalizedName("chocolate").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":chocolate"); - - //canned_beef = new ItemLemon(8, 5, false).setUnlocalizedName("canned_beef").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_beef"); - //canned_tuna = new ItemLemon(4, 5, false).setUnlocalizedName("canned_tuna").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_tuna"); - //canned_mystery = new ItemLemon(6, 5, false).setUnlocalizedName("canned_mystery").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_mystery"); - //canned_pashtet = new ItemLemon(4, 5, false).setUnlocalizedName("canned_pashtet").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_pashtet"); - //canned_cheese = new ItemLemon(3, 5, false).setUnlocalizedName("canned_cheese").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_cheese"); - //canned_jizz = new ItemLemon(15, 5, false).setUnlocalizedName("canned_jizz").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_jizz"); - //canned_milk = new ItemLemon(5, 5, false).setUnlocalizedName("canned_milk").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_milk"); - //canned_ass = new ItemLemon(6, 5, false).setUnlocalizedName("canned_ass").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_ass"); - //canned_pizza = new ItemLemon(8, 5, false).setUnlocalizedName("canned_pizza").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_pizza"); - //canned_tube = new ItemLemon(2, 5, false).setUnlocalizedName("canned_tube").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_tube"); - //canned_tomato = new ItemLemon(4, 5, false).setUnlocalizedName("canned_tomato").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_tomato"); - //canned_asbestos = new ItemLemon(7, 5, false).setUnlocalizedName("canned_asbestos").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_asbestos"); - //canned_bhole = new ItemLemon(10, 5, false).setUnlocalizedName("canned_bhole").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_bhole"); - //canned_hotdogs = new ItemLemon(5, 5, false).setUnlocalizedName("canned_hotdogs").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_hotdogs"); - //canned_leftovers = new ItemLemon(1, 5, false).setUnlocalizedName("canned_leftovers").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_leftovers"); - //canned_yogurt = new ItemLemon(3, 5, false).setUnlocalizedName("canned_yogurt").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_yogurt"); - //canned_stew = new ItemLemon(5, 5, false).setUnlocalizedName("canned_stew").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_stew"); - //canned_chinese = new ItemLemon(6, 5, false).setUnlocalizedName("canned_chinese").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_chinese"); - //canned_oil = new ItemLemon(3, 5, false).setUnlocalizedName("canned_oil").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_oil"); - //canned_fist = new ItemLemon(6, 5, false).setUnlocalizedName("canned_fist").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_fist"); - //canned_spam = new ItemLemon(8, 5, false).setUnlocalizedName("canned_spam").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_spam"); - //canned_fried = new ItemLemon(10, 5, false).setUnlocalizedName("canned_fried").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_fried"); - //canned_napalm = new ItemLemon(6, 5, false).setUnlocalizedName("canned_napalm").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_napalm"); - //canned_diesel = new ItemLemon(6, 5, false).setUnlocalizedName("canned_diesel").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_diesel"); - //canned_kerosene = new ItemLemon(6, 5, false).setUnlocalizedName("canned_kerosene").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_kerosene"); - //canned_recursion = new ItemLemon(1, 5, false).setUnlocalizedName("canned_recursion").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_recursion"); - //canned_bark = new ItemLemon(2, 5, false).setUnlocalizedName("canned_bark").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned_bark"); canned_conserve = (ItemEnumMulti) new ItemConserve().setUnlocalizedName("canned_conserve").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned"); can_key = new Item().setUnlocalizedName("can_key").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_key"); @@ -8117,35 +8088,6 @@ public class ModItems { GameRegistry.registerItem(mysteryshovel, mysteryshovel.getUnlocalizedName()); GameRegistry.registerItem(memory, memory.getUnlocalizedName()); - //CONSERVE REMAP - addRemap("canned_beef", canned_conserve, EnumFoodType.BEEF); - addRemap("canned_tuna", canned_conserve, EnumFoodType.TUNA); - addRemap("canned_mystery", canned_conserve, EnumFoodType.MYSTERY); - addRemap("canned_pashtet", canned_conserve, EnumFoodType.PASHTET); - addRemap("canned_cheese", canned_conserve, EnumFoodType.CHEESE); - addRemap("canned_jizz", canned_conserve, EnumFoodType.JIZZ); - addRemap("canned_milk", canned_conserve, EnumFoodType.MILK); - addRemap("canned_ass", canned_conserve, EnumFoodType.ASS); - addRemap("canned_pizza", canned_conserve, EnumFoodType.PIZZA); - addRemap("canned_tube", canned_conserve, EnumFoodType.TUBE); - addRemap("canned_tomato", canned_conserve, EnumFoodType.TOMATO); - addRemap("canned_asbestos", canned_conserve, EnumFoodType.ASBESTOS); - addRemap("canned_bhole", canned_conserve, EnumFoodType.BHOLE); - addRemap("canned_hotdogs", canned_conserve, EnumFoodType.HOTDOGS); - addRemap("canned_leftovers", canned_conserve, EnumFoodType.LEFTOVERS); - addRemap("canned_yogurt", canned_conserve, EnumFoodType.YOGURT); - addRemap("canned_stew", canned_conserve, EnumFoodType.STEW); - addRemap("canned_chinese", canned_conserve, EnumFoodType.CHINESE); - addRemap("canned_oil", canned_conserve, EnumFoodType.OIL); - addRemap("canned_fist", canned_conserve, EnumFoodType.FIST); - addRemap("canned_spam", canned_conserve, EnumFoodType.SPAM); - addRemap("canned_fried", canned_conserve, EnumFoodType.FRIED); - addRemap("canned_napalm", canned_conserve, EnumFoodType.NAPALM); - addRemap("canned_diesel", canned_conserve, EnumFoodType.DIESEL); - addRemap("canned_kerosene", canned_conserve, EnumFoodType.KEROSENE); - addRemap("canned_recursion", canned_conserve, EnumFoodType.RECURSION); - addRemap("canned_bark", canned_conserve, EnumFoodType.BARK); - addRemap("rod_zirnox_natural_uranium_fuel", rod_zirnox, EnumZirnoxType.NATURAL_URANIUM_FUEL); addRemap("rod_zirnox_uranium_fuel", rod_zirnox, EnumZirnoxType.URANIUM_FUEL); addRemap("rod_zirnox_th232", rod_zirnox, EnumZirnoxType.TH232); diff --git a/src/main/java/com/hbm/items/block/ItemCustomMachine.java b/src/main/java/com/hbm/items/block/ItemCustomMachine.java index fe62ea56a..434b61c06 100644 --- a/src/main/java/com/hbm/items/block/ItemCustomMachine.java +++ b/src/main/java/com/hbm/items/block/ItemCustomMachine.java @@ -1,7 +1,6 @@ package com.hbm.items.block; import java.util.List; -import java.util.Map.Entry; import com.hbm.config.CustomMachineConfigJSON; import com.hbm.config.CustomMachineConfigJSON.MachineConfiguration; @@ -24,10 +23,11 @@ public class ItemCustomMachine extends ItemBlock { @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list) { - for(Entry entry : CustomMachineConfigJSON.customMachines.entrySet()) { - ItemStack stack = new ItemStack(item); + for(int i = 0; i < CustomMachineConfigJSON.niceList.size(); i++) { + MachineConfiguration conf = CustomMachineConfigJSON.niceList.get(i); + ItemStack stack = new ItemStack(item, 1, i + 100); stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setString("machineType", entry.getKey()); + stack.stackTagCompound.setString("machineType", conf.unlocalizedName); list.add(stack); } } diff --git a/src/main/java/com/hbm/items/food/ItemFlask.java b/src/main/java/com/hbm/items/food/ItemFlask.java index 256fa9eff..9ecdb4fc2 100644 --- a/src/main/java/com/hbm/items/food/ItemFlask.java +++ b/src/main/java/com/hbm/items/food/ItemFlask.java @@ -49,8 +49,8 @@ public class ItemFlask extends ItemEnumMulti { if(stack.getItemDamage() == EnumInfusion.SHIELD.ordinal()) { float infusion = 5F; HbmPlayerProps props = HbmPlayerProps.getData(player); - props.maxShield = Math.min(props.shieldCap, props.shield + infusion); - props.shield += infusion; + props.maxShield = Math.min(props.shieldCap, props.maxShield + infusion); + props.shield = Math.min(props.shield + infusion, props.maxShield); } return stack; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 6e486d7e0..1a039b530 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1132,6 +1132,33 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.gas_duct"); ignoreMappings.add("hbm:tile.dummy_block_assembler"); ignoreMappings.add("hbm:tile.dummy_port_assembler"); + ignoreMappings.add("hbm:item.canned_beef"); + ignoreMappings.add("hbm:item.canned_tuna"); + ignoreMappings.add("hbm:item.canned_mystery"); + ignoreMappings.add("hbm:item.canned_pashtet"); + ignoreMappings.add("hbm:item.canned_cheese"); + ignoreMappings.add("hbm:item.canned_jizz"); + ignoreMappings.add("hbm:item.canned_milk"); + ignoreMappings.add("hbm:item.canned_ass"); + ignoreMappings.add("hbm:item.canned_pizza"); + ignoreMappings.add("hbm:item.canned_tube"); + ignoreMappings.add("hbm:item.canned_tomato"); + ignoreMappings.add("hbm:item.canned_asbestos"); + ignoreMappings.add("hbm:item.canned_bhole"); + ignoreMappings.add("hbm:item.canned_hotdogs"); + ignoreMappings.add("hbm:item.canned_leftovers"); + ignoreMappings.add("hbm:item.canned_yogurt"); + ignoreMappings.add("hbm:item.canned_stew"); + ignoreMappings.add("hbm:item.canned_chinese"); + ignoreMappings.add("hbm:item.canned_oil"); + ignoreMappings.add("hbm:item.canned_fist"); + ignoreMappings.add("hbm:item.canned_spam"); + ignoreMappings.add("hbm:item.canned_fried"); + ignoreMappings.add("hbm:item.canned_napalm"); + ignoreMappings.add("hbm:item.canned_diesel"); + ignoreMappings.add("hbm:item.canned_kerosene"); + ignoreMappings.add("hbm:item.canned_recursion"); + ignoreMappings.add("hbm:item.canned_bark"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadar.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadar.java index fb3d4b4e0..d68ae05e9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadar.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadar.java @@ -184,8 +184,8 @@ public class TileEntityMachineRadar extends TileEntityTickingBase implements IEn for(int i = 0; i < nearbyMissiles.size(); i++) { - if(nearbyMissiles.get(i)[3] + 1 > power) { - power = nearbyMissiles.get(i)[3] + 1; + if(nearbyMissiles.get(i)[2] + 1 > power) { + power = nearbyMissiles.get(i)[2] + 1; } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 3c4bec004..5b786acdb 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4522,6 +4522,25 @@ tile.cluster_depth_titanium.name=Depth Titanium Ore Cluster tile.cluster_depth_tungsten.name=Depth Tungsten Ore Cluster tile.cluster_iron.name=Iron Ore Cluster tile.cluster_titanium.name=Titanium Ore Cluster +tile.cm_block.alloy.name=Advanced Alloy Machine Casing +tile.cm_block.desh.name=Desh Machine Casing +tile.cm_block.steel.name=Steel Machine Casing +tile.cm_block.tcalloy.name=Technetium Steel Machine Casing +tile.cm_engine.bismuth.name=Bismuth Motor Block +tile.cm_engine.desh.name=Desh Motor Block +tile.cm_engine.standard.name=Motor Block +tile.cm_port.alloy.name=Advanced Alloy Port +tile.cm_port.desh.name=Desh Port +tile.cm_port.steel.name=Steel Port +tile.cm_port.tcalloy.name=Technetium Steel Port +tile.cm_sheet.alloy.name=Advanced Alloy Sheet +tile.cm_sheet.desh.name=Desh Sheet +tile.cm_sheet.steel.name=Steel Sheet +tile.cm_sheet.tcalloy.name=Technetium Steel Sheet +tile.cm_tank.alloy.name=Advanced Alloy Tank +tile.cm_tank.desh.name=Desh Tank +tile.cm_tank.steel.name=Steel Tank +tile.cm_tank.tcalloy.name=Technetium Steel Tank tile.cmb_brick.name=CMB Steel Tile tile.cmb_brick_reinforced.name=Reinforced CMB Bricks tile.compact_launcher.name=Compact Launch Pad diff --git a/src/main/resources/assets/hbm/textures/blocks/cm_circuit_aluminium.png b/src/main/resources/assets/hbm/textures/blocks/cm_circuit_aluminium.png new file mode 100644 index 0000000000000000000000000000000000000000..8e44446d37da998b9b1f9b7898df27d0f32081d4 GIT binary patch literal 525 zcmV+o0`mQdP)|-|vHWn!w4u=iYmABGNQ<#u%)%gkgwMivPj=e&=vFpq|es zo6Uyn^@@}dDJ9N1q?8CDkWx~s)v(r56a@fr9MkD^=ytm(V+^<3jmcyJzW+lH^EXcA9 zfc<`ta}K4H!dhDvrD^&h1e8twz1Eu1XoN8aWv#_I$9lak3%`kcgE0nGtJM%fkR%CF z6#Z(bid8o$ih?}PQU23-_}l*lKVY}pVXb}V;BQpT`nHYMnqIH>Hqly(5TY!qy6&g> zXLY;fa)}TEmFIbBV)f26O+Ol{UTCcu3Qf0h^WahI)Di*~zRDr>EY z;~1@V$t6irM%nX?MuQ*-5cB!m9gjzb!y)Zh(I8%Z2TBix`i`?sPhFKA*AH;)CU!dz+*bQc8-VDF4PF2nd1zDJ6dZ6(9S@nnF{6 P00000NkvXXu0mjf4BYEO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/cm_circuit_copper.png b/src/main/resources/assets/hbm/textures/blocks/cm_circuit_copper.png new file mode 100644 index 0000000000000000000000000000000000000000..7217056b0ffc5aa42fd83d1b671674a29fbef56a GIT binary patch literal 569 zcmV-90>=G`P)^yYJng?N)bYU@N**pE`BwRJG`KyUrMcwHDv^(OUCA zvD@t!jYjC>@kqblXS3NLr9?`Ja}FsbLI|XkWHK47wM0<_K($(>R;v*N0ooYDcDv>4 z;0pkg;DP3BdeiOST*Mz9Umxl9dT8fd`oXVwuzkj_G~P+}D_;8EFOTH&d8CwRr4-jB z0K>NzxN8H@I?ONm+&yfcp#;AG=NwvVjkPufwF>9%hj~m?Xv9V5e5=r4zdZ5-Fvg&* zwK(UP1P?Lrnj}&4Nf=|0nM?*D1kKs>rtn%(nm;!Hh@yxv43Wud(m2olSq$G^n3R6A z+wHK{#&_@zl$iB_8i=>h=4_(179qq1l(=4Kr1PgfBYlnDOX6F#v+hc$SVZ4vE3qt zAP5P9jdj?UP<)GNA}f+HrKsP`cefa4Mt2S5RKwhR&pr3d88se{#W{!fo?5MjwU+Nn!dL6Ab))>PT2_TOPXubnL zeJuxN8bSOFz|UXr5fQAl7Vmx0q#pX$M0CzWow6QB{P+aUIjr{{5ka2F$PXvZ-*rQ=C(rb)jxFGAO06Ns^Q%Qf^ic{i}g%FCs=Cv!ynVZf0WVYV)Np`B^zp z9(UVlGzi0xzh~w`YW^HYMT})y_Ef7?j4`O;a44(Qie9fr7=|1U2b^<=2(?;`N~J=Q zB%Dqslv3Q?-BGDj*lxGX=X2CxFp%|n&1SQ~druK8k<27((OQ$HY4JB2V=%^`wdMst W>+OEqo)^~u00001#o6otR}fn^bhjua~jM3;uANRdbsY4Qef<=Q1t+H^st zaX~}x2p4HwBX|%-2nh;H2n@43lL7`7WJ@{CYVX`R=iaktMX%TM)>@o%#Bq$)n*YIO zvtc|Qqj$R;G$ddq=yDwDY z2!PtpKWCyJUs-Q=hnJ7v@ZO`f);Q z%6VVHT7f9UU017B>h=10x8nt443$s|G5-Di)Ke;zP)Z@X-L9WZCbZja>h(IWudi5Z z@!k{1F;NterYZaV9w7w9Vv#6{SS%I{heJfC)A6&}jQMZ|Kfmyo-f#n7I z3M4#0O%QS)F)uGKXsyv&6JtbcjZzA&HH}7t5CUac0?_GnI5;?<+wG#g z_biu7_V)I0&hdM(V0U+yR;$I%&JKB=^XuV(EX&CAoIKB2E|(k~9Wk9wu`$LtMwoAIrk#$16*AZW5il(2_aNTi@{(W zH$(vUBLD1*2tUuy@!n%Y2*emUxx1?p6A3kvui(AMHX03-Qe5}@IOjecsFT%|lx0a# z6zKFc3B4~2tYd#RdA;o}QivA&?p?#<(`gTC~=bWm)}3V+_U^wATCu9`*x9 T5G-_o00000NkvXXu0mjfTbKk` literal 0 HcmV?d00001 From 33bd961e0c0647ef4787ac07245779df7152348c Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 24 Jul 2023 12:03:13 +0200 Subject: [PATCH 2/7] toora loora --- changelog | 29 ++++++++--- gradle.properties | 2 +- .../hbm/blocks/generic/BlockStorageCrate.java | 36 ++++++++++++- .../blocks/machine/BlockCustomMachine.java | 52 +++++++++++++++++++ .../hbm/config/CustomMachineConfigJSON.java | 6 +-- .../com/hbm/items/machine/ItemRBMKRod.java | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 20 +++++++ .../hbm/tileentity/TileEntityProxyBase.java | 6 +-- .../machine/TileEntityCustomMachine.java | 3 +- src/main/resources/assets/hbm/lang/en_US.lang | 5 ++ 11 files changed, 143 insertions(+), 20 deletions(-) diff --git a/changelog b/changelog index ec89d27e1..e06e326bf 100644 --- a/changelog +++ b/changelog @@ -1,11 +1,24 @@ ## Added -* Rubber ball - * can be thrown at people -* New chlorine processing chain - * Involves 240 processing steps of washing, electrolyzing, centrifuging and treating chlorocalcite +* Custom machines + * Simple processing multiblocks that can be created via config + * The config found in `hbmConfig/hbmCustomMachines.json` defines the input and output slots, fluid amount, speed and consumption multipliers as well as the multiblock + * The config in `hbmRecipes/hbmCustomMachines.json` defines the recipes for all multiblocks with inputs, outputs base speed and consumption rates + * Currently, custom machine recipes do not show up in NEI, a handler will be added soon + * All recipes are shaped, even the fluid types, this was done to improve performance + * Item inputs have filter slots for automation, this allows the right ingredients to be inserted into the right slot easily. For simple machines, this slot can be left empty so any item can be inserted. + * By default, the standard config creates one custom machine with one recipe called the paper press, turning sawdust and water into paper + * More examples can be found in the configs attached to this github release + * Custom machines can also be configured as generators, using up item and fluid inputs and turning them into energy + * While changing the configs and adding/removing machines in an existing world is possible, this is not recommended because of potential ID shifts of the machines, breaking existing custom machines in the world + * With custom machines, quite a few otherwise unused construction blocks have been added which are recommended to be used for custom machines as they come in tiers, have reasonable cost and mesh well visually with the multiblocks + * However, using them is not mandatory, the only functional block is the port which is most likely needed for automation, although the machine's controller itself also serves as a port ## Changed -* Glyphids now have a higher tracking range, being 256 blocks -* Standard glyphids now have a base health of 100 -* Glyphid scouts are now immune to fire and explosive damage, have a 50% damage reduction against projectiles and have passive regeneration -* Increased hive block blast resistance, they can no longer be blown up wiith conventional explosives +* Additional OC compat for fluid gauges +* Crates now display their contents when in item form + +## Fixed +* Hopefully fixed an issue where pollution-based mob buffs apply multiple times, resulting in near-unkillable mobs +* Fixed exploit allowing the cap for shield infusions to be bypassed +* Fixed tier detection mode in the radar detecting the Y-position instead of the actual tier +* Fixed missing parenthesis in sigmoid curve's description \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index aca4be12e..a5787a31d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4663 +mod_build_number=4670 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index 8e8f5097f..718f26c54 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -1,9 +1,12 @@ package com.hbm.blocks.generic; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Random; import com.hbm.blocks.IBlockMulti; +import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.items.tool.ItemLock; @@ -36,7 +39,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public class BlockStorageCrate extends BlockContainer implements IBlockMulti { +public class BlockStorageCrate extends BlockContainer implements IBlockMulti, ITooltipProvider { @SideOnly(Side.CLIENT) private IIcon iconTop; @@ -282,4 +285,35 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti { public int getComparatorInputOverride(World world, int x, int y, int z, int side) { return Container.calcRedstoneFromInventory((IInventory) world.getTileEntity(x, y, z)); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + if(stack.hasTagCompound()) { + + List contents = new ArrayList(); + int amount = 0; + + for(int i = 0; i < 100; i++) { //whatever the biggest container is, i can't be bothered to check + ItemStack content = ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i)); + + if(content != null) { + amount++; + + if(contents.size() < 10) { + contents.add(EnumChatFormatting.AQUA + " - " + content.getDisplayName() + (content.stackSize > 1 ? (" x" + content.stackSize) : "")); + } + } + } + + if(!contents.isEmpty()) { + list.add(EnumChatFormatting.AQUA + "Contains:"); + list.addAll(contents); + amount -= contents.size(); + + if(amount > 0) { + list.add(EnumChatFormatting.AQUA + "...and " + amount + " more."); + } + } + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java b/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java index e007403ef..0dac71ca5 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java +++ b/src/main/java/com/hbm/blocks/machine/BlockCustomMachine.java @@ -1,6 +1,7 @@ package com.hbm.blocks.machine; import java.util.ArrayList; +import java.util.Random; import com.hbm.config.CustomMachineConfigJSON; import com.hbm.items.ModItems; @@ -11,11 +12,14 @@ import com.hbm.tileentity.machine.TileEntityCustomMachine; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -145,4 +149,52 @@ public class BlockCustomMachine extends BlockContainer { return super.getPickBlock(target, world, x, y, z); } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + + ISidedInventory sided = (ISidedInventory) world.getTileEntity(x, y, z); + Random rand = world.rand; + + if(sided != null) { + for(int i1 = 0; i1 < sided.getSizeInventory(); ++i1) { + + if(i1 >= 10 && i1 <= 15) + continue; // do NOT drop the filters + + ItemStack itemstack = sided.getStackInSlot(i1); + + if(itemstack != null) { + float f = rand.nextFloat() * 0.8F + 0.1F; + float f1 = rand.nextFloat() * 0.8F + 0.1F; + float f2 = rand.nextFloat() * 0.8F + 0.1F; + + while(itemstack.stackSize > 0) { + int j1 = rand.nextInt(21) + 10; + + if(j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; + } + + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + + if(itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } + + float f3 = 0.05F; + entityitem.motionX = (float) rand.nextGaussian() * f3; + entityitem.motionY = (float) rand.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) rand.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } + + world.func_147453_f(x, y, z, block); + } + + super.breakBlock(world, x, y, z, block, meta); + } } diff --git a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java index 886a7741a..79a659261 100644 --- a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java +++ b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java @@ -90,7 +90,7 @@ public class CustomMachineConfigJSON { for(int x = -1; x <= 1; x++) { for(int y = -1; y <= 1; y++) { for(int z = 0; z <= 2; z++) { - if(!(x == 0 && y == 0 && z == 1) && !(x == 0 && z == 1) && !(x == 0 && y == 0 && z == 0)) { + if(!(x == 0 && y == 0 && z == 1) && !(x == 0 && z == 0)) { writer.beginObject().setIndent(""); writer.name("block").value(y == 0 ? "hbm:tile.cm_sheet" : "hbm:tile.cm_block"); writer.name("x").value(x); @@ -109,7 +109,7 @@ public class CustomMachineConfigJSON { writer.name("block").value("hbm:tile.cm_port"); writer.name("x").value(0); writer.name("y").value(-1); - writer.name("z").value(1); + writer.name("z").value(0); writer.name("metas").beginArray(); writer.value(0); writer.endArray(); @@ -119,7 +119,7 @@ public class CustomMachineConfigJSON { writer.name("block").value("hbm:tile.cm_port"); writer.name("x").value(0); writer.name("y").value(1); - writer.name("z").value(1); + writer.name("z").value(0); writer.name("metas").beginArray(); writer.value(0); writer.endArray(); diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 01c83055c..68158958f 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -275,7 +275,7 @@ public class ItemRBMKRod extends Item { break; case ARCH: function = "(%1$s - %1$s² / 10000) / 100 * %2$s [0;∞]"; break; - case SIGMOID: function = "%2$s / (1 + e^(-(%1$s - 50) / 10)"; + case SIGMOID: function = "%2$s / (1 + e^(-(%1$s - 50) / 10))"; break; case SQUARE_ROOT: function = "sqrt(%1$s) * %2$s / 10"; break; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 55bb20699..5e3527635 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 (4663)"; + public static final String VERSION = "1.0.27 BETA (4670)"; //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 1893862f8..1a4b56848 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -1096,6 +1096,26 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin, 1, 1), new ItemStack(ModItems.sliding_blast_door_skin, 1, 0)); addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin, 1, 2), new ItemStack(ModItems.sliding_blast_door_skin, 1, 1)); addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin), new ItemStack(ModItems.sliding_blast_door_skin, 1, 2)); + + addRecipeAuto(new ItemStack(ModBlocks.cm_block, 4, 0), " I ", "IPI", " I ", 'I', STEEL.ingot(), 'P', STEEL.plateCast()); + addRecipeAuto(new ItemStack(ModBlocks.cm_block, 4, 1), " I ", "IPI", " I ", 'I', ALLOY.ingot(), 'P', ALLOY.plateCast()); + addRecipeAuto(new ItemStack(ModBlocks.cm_block, 4, 2), " I ", "IPI", " I ", 'I', DESH.ingot(), 'P', DESH.plateCast()); + addRecipeAuto(new ItemStack(ModBlocks.cm_block, 4, 3), " I ", "IPI", " I ", 'I', ANY_RESISTANTALLOY.ingot(), 'P', ANY_RESISTANTALLOY.plateCast()); + + for(int i = 0; i < 4; i++) { + addRecipeAuto(new ItemStack(ModBlocks.cm_sheet, 16, i), "BB", "BB", 'B', new ItemStack(ModBlocks.cm_block, 1, i)); + addRecipeAuto(new ItemStack(ModBlocks.cm_tank, 4, i), " B ", "BGB", " B ", 'B', new ItemStack(ModBlocks.cm_block, 1, i), 'G', KEY_ANYGLASS); + addRecipeAuto(new ItemStack(ModBlocks.cm_port, 1, i), "P", "B", "P", 'B', new ItemStack(ModBlocks.cm_block, 1, i), 'P', IRON.plate()); + } + + addRecipeAuto(new ItemStack(ModBlocks.cm_engine, 1, 0), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.motor); + addRecipeAuto(new ItemStack(ModBlocks.cm_engine, 1, 1), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.motor_desh); + addRecipeAuto(new ItemStack(ModBlocks.cm_engine, 1, 2), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.motor_bismuth); + addRecipeAuto(new ItemStack(ModBlocks.cm_circuit, 1, 0), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.circuit_aluminium); + addRecipeAuto(new ItemStack(ModBlocks.cm_circuit, 1, 1), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.circuit_copper); + addRecipeAuto(new ItemStack(ModBlocks.cm_circuit, 1, 2), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.circuit_red_copper); + addRecipeAuto(new ItemStack(ModBlocks.cm_circuit, 1, 3), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.circuit_gold); + addRecipeAuto(new ItemStack(ModBlocks.cm_circuit, 1, 4), " I ", "IMI", " I ", 'I', STEEL.ingot(), 'M', ModItems.circuit_schrabidium); } public static void crumple() { diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java b/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java index bf19bb353..36a123851 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java @@ -20,7 +20,7 @@ public class TileEntityProxyBase extends TileEntityLoadedBase { if(cachedPosition != null) { TileEntity te = Compat.getTileStandard(worldObj, cachedPosition.getX(), cachedPosition.getY(), cachedPosition.getZ()); - if(te != null && te != this) return te; + if(te != null && !(te instanceof TileEntityProxyBase)) return te; cachedPosition = null; this.markDirty(); } @@ -34,7 +34,7 @@ public class TileEntityProxyBase extends TileEntityLoadedBase { if(pos != null) { TileEntity te = Compat.getTileStandard(worldObj, pos[0], pos[1], pos[2]); - if(te != null && te != this) return te; + if(te != null && !(te instanceof TileEntityProxyBase)) return te; } } @@ -42,7 +42,7 @@ public class TileEntityProxyBase extends TileEntityLoadedBase { IProxyController controller = (IProxyController) this.getBlockType(); TileEntity tile = controller.getCore(worldObj, xCoord, yCoord, zCoord); - if(tile != null && tile != this) return tile; + if(tile != null && !(tile instanceof TileEntityProxyBase)) return tile; } return null; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java index 700da5e04..6a7d3973d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java @@ -6,7 +6,6 @@ import java.util.List; import com.hbm.config.CustomMachineConfigJSON; import com.hbm.config.CustomMachineConfigJSON.MachineConfiguration; import com.hbm.config.CustomMachineConfigJSON.MachineConfiguration.ComponentDefinition; -import com.hbm.inventory.FluidStack; import com.hbm.inventory.container.ContainerMachineCustom; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -465,7 +464,7 @@ public class TileEntityCustomMachine extends TileEntityMachineBase implements IF @Override public long getMaxPower() { - return this.config != null ? this.getMaxPower() : 1; + return this.config != null ? this.config.maxPower : 1; } @Override diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 5b786acdb..f0d31585c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4526,6 +4526,11 @@ tile.cm_block.alloy.name=Advanced Alloy Machine Casing tile.cm_block.desh.name=Desh Machine Casing tile.cm_block.steel.name=Steel Machine Casing tile.cm_block.tcalloy.name=Technetium Steel Machine Casing +tile.cm_circuit.aluminium.name=Tier 1 Circuit Block +tile.cm_circuit.copper.name=Tier 2 Circuit Block +tile.cm_circuit.gold.name=Tier 4 Circuit Block +tile.cm_circuit.red_copper.name=Tier 3 Circuit Block +tile.cm_circuit.schrabidium.name=Tier 5 Circuit Block tile.cm_engine.bismuth.name=Bismuth Motor Block tile.cm_engine.desh.name=Desh Motor Block tile.cm_engine.standard.name=Motor Block From a22a68744c5a8873d877665cf1c1d47b66505446 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Mon, 24 Jul 2023 12:44:32 +0200 Subject: [PATCH 3/7] Satellite linker will no more give duplicate frequency. Some satellite code improvements, rearrangements --- .../inventory/container/ContainerSatDock.java | 82 +++++++++---------- .../com/hbm/inventory/gui/GUISatDock.java | 20 ++--- .../com/hbm/saveddata/SatelliteSavedData.java | 23 ++---- .../hbm/saveddata/satellites/Satellite.java | 45 +++++----- .../machine/TileEntityMachineSatDock.java | 65 +++++++-------- .../machine/TileEntityMachineSatLinker.java | 55 ++++++------- 6 files changed, 128 insertions(+), 162 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerSatDock.java b/src/main/java/com/hbm/inventory/container/ContainerSatDock.java index 9ee0b37d5..02f02db56 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerSatDock.java +++ b/src/main/java/com/hbm/inventory/container/ContainerSatDock.java @@ -1,7 +1,8 @@ package com.hbm.inventory.container; +import com.hbm.inventory.SlotTakeOnly; +import com.hbm.items.machine.ItemSatChip; import com.hbm.tileentity.machine.TileEntityMachineSatDock; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -11,41 +12,42 @@ import net.minecraft.item.ItemStack; public class ContainerSatDock extends Container { - private TileEntityMachineSatDock diFurnace; + private final TileEntityMachineSatDock tileSatelliteDock; - public ContainerSatDock(InventoryPlayer invPlayer, TileEntityMachineSatDock tedf) { - - diFurnace = tedf; + public ContainerSatDock(InventoryPlayer invPlayer, TileEntityMachineSatDock tesd) { + tileSatelliteDock = tesd; //Storage - this.addSlotToContainer(new Slot(tedf, 0, 62, 17)); - this.addSlotToContainer(new Slot(tedf, 1, 80, 17)); - this.addSlotToContainer(new Slot(tedf, 2, 98, 17)); - this.addSlotToContainer(new Slot(tedf, 3, 116, 17)); - this.addSlotToContainer(new Slot(tedf, 4, 134, 17)); - this.addSlotToContainer(new Slot(tedf, 5, 62, 35)); - this.addSlotToContainer(new Slot(tedf, 6, 80, 35)); - this.addSlotToContainer(new Slot(tedf, 7, 98, 35)); - this.addSlotToContainer(new Slot(tedf, 8, 116, 35)); - this.addSlotToContainer(new Slot(tedf, 9, 134, 35)); - this.addSlotToContainer(new Slot(tedf, 10, 62, 53)); - this.addSlotToContainer(new Slot(tedf, 11, 80, 53)); - this.addSlotToContainer(new Slot(tedf, 12, 98, 53)); - this.addSlotToContainer(new Slot(tedf, 13, 116, 53)); - this.addSlotToContainer(new Slot(tedf, 14, 134, 53)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 0, 62, 17)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 1, 80, 17)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 2, 98, 17)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 3, 116, 17)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 4, 134, 17)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 5, 62, 35)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 6, 80, 35)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 7, 98, 35)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 8, 116, 35)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 9, 134, 35)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 10, 62, 53)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 11, 80, 53)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 12, 98, 53)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 13, 116, 53)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 14, 134, 53)); //Chip - this.addSlotToContainer(new Slot(tedf, 15, 26, 35)); + this.addSlotToContainer(new Slot(tesd, 15, 26, 35) { + @Override + public boolean isItemValid(ItemStack stack) { + return stack.getItem() instanceof ItemSatChip; + } + }); - for(int i = 0; i < 3; i++) - { - for(int j = 0; j < 9; j++) - { + 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)); } } - for(int i = 0; i < 9; i++) - { + for(int i = 0; i < 9; i++) { this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); } } @@ -56,33 +58,25 @@ public class ContainerSatDock extends Container { } @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) - { + public ItemStack transferStackInSlot(EntityPlayer player, int par2) { ItemStack var3 = null; Slot var4 = (Slot) this.inventorySlots.get(par2); - if (var4 != null && var4.getHasStack()) - { + if (var4 != null && var4.getHasStack()) { ItemStack var5 = var4.getStack(); var3 = var5.copy(); if (par2 <= 15) { - if (!this.mergeItemStack(var5, 16, this.inventorySlots.size(), true)) - { + if (!this.mergeItemStack(var5, 16, this.inventorySlots.size(), true)) { return null; } - } - else if (!this.mergeItemStack(var5, 0, 15, false)) - { - return null; + } else if (!this.mergeItemStack(var5, 0, 15, false)) { + return null; } - if (var5.stackSize == 0) - { - var4.putStack((ItemStack) null); - } - else - { + if (var5.stackSize == 0) { + var4.putStack(null); + } else { var4.onSlotChanged(); } } @@ -92,6 +86,6 @@ public class ContainerSatDock extends Container { @Override public boolean canInteractWith(EntityPlayer player) { - return diFurnace.isUseableByPlayer(player); + return tileSatelliteDock.isUseableByPlayer(player); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUISatDock.java b/src/main/java/com/hbm/inventory/gui/GUISatDock.java index 3276564df..369530b2f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISatDock.java +++ b/src/main/java/com/hbm/inventory/gui/GUISatDock.java @@ -1,24 +1,22 @@ package com.hbm.inventory.gui; -import org.lwjgl.opengl.GL11; - import com.hbm.inventory.container.ContainerSatDock; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineSatDock; - import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; public class GUISatDock extends GuiInfoContainer { - public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_dock.png"); - private TileEntityMachineSatDock diFurnace; + public static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_dock.png"); + private final TileEntityMachineSatDock tileSatelliteDock; - public GUISatDock(InventoryPlayer invPlayer, TileEntityMachineSatDock tedf) { - super(new ContainerSatDock(invPlayer, tedf)); - diFurnace = tedf; + public GUISatDock(InventoryPlayer invPlayer, TileEntityMachineSatDock tesd) { + super(new ContainerSatDock(invPlayer, tesd)); + tileSatelliteDock = tesd; this.xSize = 176; this.ySize = 168; @@ -36,10 +34,10 @@ public class GUISatDock extends GuiInfoContainer { @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); + String name = this.tileSatelliteDock.hasCustomInventoryName() ? this.tileSatelliteDock.getInventoryName() : I18n.format(this.tileSatelliteDock.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); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0x404040); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 0x404040); } @Override diff --git a/src/main/java/com/hbm/saveddata/SatelliteSavedData.java b/src/main/java/com/hbm/saveddata/SatelliteSavedData.java index 2e5fe33c1..f0ced3750 100644 --- a/src/main/java/com/hbm/saveddata/SatelliteSavedData.java +++ b/src/main/java/com/hbm/saveddata/SatelliteSavedData.java @@ -1,35 +1,27 @@ package com.hbm.saveddata; -import java.util.HashMap; -import java.util.Map.Entry; - import com.hbm.saveddata.satellites.Satellite; - import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; +import java.util.HashMap; +import java.util.Map.Entry; + public class SatelliteSavedData extends WorldSavedData { - public HashMap sats = new HashMap(); + public final HashMap sats = new HashMap<>(); - public SatelliteSavedData(String p_i2141_1_) { - super(p_i2141_1_); - } - - public SatelliteSavedData() - { + public SatelliteSavedData() { super("satellites"); this.markDirty(); } public boolean isFreqTaken(int freq) { - return getSatFromFreq(freq) != null; } public Satellite getSatFromFreq(int freq) { - return sats.get(freq); } @@ -38,7 +30,6 @@ public class SatelliteSavedData extends WorldSavedData { int satCount = nbt.getInteger("satCount"); for(int i = 0; i < satCount; i++) { - Satellite sat = Satellite.create(nbt.getInteger("sat_id_" + i)); sat.readFromNBT((NBTTagCompound) nbt.getTag("sat_data_" + i)); @@ -55,7 +46,6 @@ public class SatelliteSavedData extends WorldSavedData { int i = 0; for(Entry struct : sats.entrySet()) { - NBTTagCompound data = new NBTTagCompound(); struct.getValue().writeToNBT(data); @@ -67,15 +57,14 @@ public class SatelliteSavedData extends WorldSavedData { } public static SatelliteSavedData getData(World worldObj) { - SatelliteSavedData data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); if(data == null) { worldObj.perWorldStorage.setData("satellites", new SatelliteSavedData()); data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); + data.markDirty(); } return data; } - } diff --git a/src/main/java/com/hbm/saveddata/satellites/Satellite.java b/src/main/java/com/hbm/saveddata/satellites/Satellite.java index 70c65e0ac..e1a3ff431 100644 --- a/src/main/java/com/hbm/saveddata/satellites/Satellite.java +++ b/src/main/java/com/hbm/saveddata/satellites/Satellite.java @@ -1,23 +1,22 @@ package com.hbm.saveddata.satellites; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - import com.hbm.items.ModItems; import com.hbm.saveddata.SatelliteSavedData; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + public abstract class Satellite { - public static List satellites = new ArrayList(); - public static HashMap itemToClass = new HashMap(); + public static final List> satellites = new ArrayList<>(); + public static final HashMap> itemToClass = new HashMap<>(); - public static enum InterfaceActions { + public enum InterfaceActions { HAS_MAP, //lets the interface display loaded chunks CAN_CLICK, //enables onClick events SHOW_COORDS, //enables coordinates as a mouse tooltip @@ -25,18 +24,18 @@ public abstract class Satellite { HAS_ORES //like HAS_MAP but only shows ores } - public static enum CoordActions { + public enum CoordActions { HAS_Y //enables the Y-coord field which is disabled by default } - public static enum Interfaces { + public enum Interfaces { NONE, //does not interact with any sat interface (i.e. asteroid miners) SAT_PANEL, //allows to interact with the sat interface panel (for graphical applications) SAT_COORD //allows to interact with the sat coord remote (for teleportation or other coord related actions) } - public List ifaceAcs = new ArrayList(); - public List coordAcs = new ArrayList(); + public List ifaceAcs = new ArrayList<>(); + public List coordAcs = new ArrayList<>(); public Interfaces satIface = Interfaces.NONE; public static void register() { @@ -64,10 +63,13 @@ public abstract class Satellite { } public static void orbit(World world, int id, int freq, double x, double y, double z) { - + if(world.isRemote) { + return; + } + Satellite sat = create(id); - if(sat != null && !world.isRemote) { + if(sat != null) { SatelliteSavedData data = SatelliteSavedData.getData(world); data.sats.put(freq, sat); sat.onOrbit(world, x, y, z); @@ -76,25 +78,22 @@ public abstract class Satellite { } public static Satellite create(int id) { - Satellite sat = null; try { - Class c = satellites.get(id); - sat = (Satellite) c.newInstance(); - } catch(Exception ex) { - + Class c = satellites.get(id); + sat = c.newInstance(); + } catch(Exception e) { + e.printStackTrace(); } return sat; } public static int getIDFromItem(Item item) { - Class sat = itemToClass.get(item); - int i = satellites.indexOf(sat); - - return i; + + return satellites.indexOf(sat); } public int getID() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index 6a29cf0d3..07e6e9c1c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -13,7 +13,6 @@ import com.hbm.util.WeightedRandomObject; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -27,15 +26,18 @@ import net.minecraft.util.WeightedRandom; import net.minecraft.world.World; import java.util.List; -import java.util.Random; public class TileEntityMachineSatDock extends TileEntity implements ISidedInventory, IGUIProvider { + private SatelliteSavedData data; + private ItemStack[] slots; - private static final int[] access = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; + private static final int[] access = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; private String customName; + private AxisAlignedBB renderBoundingBox; + public TileEntityMachineSatDock() { slots = new ItemStack[16]; } @@ -177,21 +179,13 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent return true; } - SatelliteSavedData data = null; - @Override public void updateEntity() { if (!worldObj.isRemote) { if (data == null) - data = (SatelliteSavedData) worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); + data = SatelliteSavedData.getData(worldObj); - if (data == null) { - worldObj.perWorldStorage.setData("satellites", new SatelliteSavedData()); - data = (SatelliteSavedData) worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); - } - data.markDirty(); - - if (data != null && slots[15] != null) { + if (slots[15] != null) { int freq = ISatChip.getFreqS(slots[15]); Satellite sat = data.getSatFromFreq(freq); @@ -215,22 +209,23 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent } } - List list = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(xCoord - 0.25 + 0.5, yCoord + 0.75, zCoord - 0.25 + 0.5, xCoord + 0.25 + 0.5, yCoord + 2, zCoord + 0.25 + 0.5)); + @SuppressWarnings("unchecked") + List list = worldObj.getEntitiesWithinAABBExcludingEntity( + null, + AxisAlignedBB.getBoundingBox(xCoord - 0.25 + 0.5, yCoord + 0.75, zCoord - 0.25 + 0.5, xCoord + 0.25 + 0.5, yCoord + 2, zCoord + 0.25 + 0.5), + entity -> entity instanceof EntityMinerRocket + ); - for (Entity e : list) { - if (e instanceof EntityMinerRocket) { - EntityMinerRocket rocket = (EntityMinerRocket) e; + for (EntityMinerRocket rocket : list) { + if (slots[15] != null && ISatChip.getFreqS(slots[15]) != rocket.getDataWatcher().getWatchableObjectInt(17)) { + rocket.setDead(); + ExplosionNukeSmall.explode(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, ExplosionNukeSmall.PARAMS_TOTS); + break; + } - if (slots[15] != null && ISatChip.getFreqS(slots[15]) != rocket.getDataWatcher().getWatchableObjectInt(17)) { - rocket.setDead(); - ExplosionNukeSmall.explode(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, ExplosionNukeSmall.PARAMS_TOTS); - break; - } - - if (rocket.getDataWatcher().getWatchableObjectInt(16) == 1 && rocket.timer == 50) { - Satellite sat = data.getSatFromFreq(ISatChip.getFreqS(slots[15])); - unloadCargo((SatelliteMiner) sat); - } + if (rocket.getDataWatcher().getWatchableObjectInt(16) == 1 && rocket.timer == 50) { + Satellite sat = data.getSatFromFreq(ISatChip.getFreqS(slots[15])); + unloadCargo((SatelliteMiner) sat); } } @@ -241,15 +236,13 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent } } - static final Random rand = new Random(); - private void unloadCargo(SatelliteMiner satellite) { - int items = rand.nextInt(6) + 10; + int itemAmount = worldObj.rand.nextInt(6) + 10; WeightedRandomObject[] cargo = satellite.getCargo(); - for (int i = 0; i < items; i++) { - ItemStack stack = ((WeightedRandomObject) WeightedRandom.getRandomItem(rand, cargo)).asStack(); + for (int i = 0; i < itemAmount; i++) { + ItemStack stack = ((WeightedRandomObject) WeightedRandom.getRandomItem(worldObj.rand, cargo)).asStack(); addToInv(stack.copy()); } } @@ -322,12 +315,10 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent } } - AxisAlignedBB bb = null; - @Override public AxisAlignedBB getRenderBoundingBox() { - if (bb == null) { - bb = AxisAlignedBB.getBoundingBox( + if (renderBoundingBox == null) { + renderBoundingBox = AxisAlignedBB.getBoundingBox( xCoord - 1, yCoord, zCoord - 1, @@ -337,7 +328,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent ); } - return bb; + return renderBoundingBox; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index 2fd404480..e8793d0aa 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.container.ContainerMachineSatLinker; import com.hbm.inventory.gui.GUIMachineSatLinker; import com.hbm.items.ISatChip; +import com.hbm.saveddata.SatelliteSavedData; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; @@ -18,8 +19,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class TileEntityMachineSatLinker extends TileEntity implements ISidedInventory, IGUIProvider { + private SatelliteSavedData satelliteData; - private ItemStack slots[]; + private ItemStack[] slots; //public static final int maxFill = 64 * 3; @@ -45,21 +47,19 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve @Override public ItemStack getStackInSlotOnClosing(int i) { - if(slots[i] != null) - { + if(slots[i] != null) { ItemStack itemStack = slots[i]; slots[i] = null; return itemStack; } else { - return null; + return null; } } @Override public void setInventorySlotContents(int i, ItemStack itemStack) { slots[i] = itemStack; - if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) - { + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) { itemStack.stackSize = getInventoryStackLimit(); } } @@ -85,11 +85,10 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve @Override public boolean isUseableByPlayer(EntityPlayer player) { - if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) - { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { return false; - }else{ - return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; + } else { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 64; } } @@ -105,17 +104,14 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve @Override public ItemStack decrStackSize(int i, int j) { - if(slots[i] != null) - { - if(slots[i].stackSize <= j) - { + if(slots[i] != null) { + if(slots[i].stackSize <= j) { ItemStack itemStack = slots[i]; slots[i] = null; return itemStack; } ItemStack itemStack1 = slots[i].splitStack(j); - if (slots[i].stackSize == 0) - { + if (slots[i].stackSize == 0) { slots[i] = null; } @@ -132,12 +128,10 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve slots = new ItemStack[getSizeInventory()]; - for(int i = 0; i < list.tagCount(); i++) - { + for(int i = 0; i < list.tagCount(); i++) { NBTTagCompound nbt1 = list.getCompoundTagAt(i); byte b0 = nbt1.getByte("slot"); - if(b0 >= 0 && b0 < slots.length) - { + if(b0 >= 0 && b0 < slots.length) { slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } @@ -148,10 +142,8 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve super.writeToNBT(nbt); NBTTagList list = new NBTTagList(); - for(int i = 0; i < slots.length; i++) - { - if(slots[i] != null) - { + for(int i = 0; i < slots.length; i++) { + if(slots[i] != null) { NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("slot", (byte)i); slots[i].writeToNBT(nbt1); @@ -162,8 +154,7 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve } @Override - public int[] getAccessibleSlotsFromSide(int p_94128_1_) - { + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { return p_94128_1_ == 0 ? slots_bottom : (p_94128_1_ == 1 ? slots_top : slots_side); } @@ -179,15 +170,19 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve @Override public void updateEntity() { - - if(!worldObj.isRemote) - { + if(!worldObj.isRemote) { if(slots[0] != null && slots[1] != null && slots[0].getItem() instanceof ISatChip && slots[1].getItem() instanceof ISatChip) { ISatChip.setFreqS(slots[1], ISatChip.getFreqS(slots[0])); } if(slots[2] != null && slots[2].getItem() instanceof ISatChip) { - ISatChip.setFreqS(slots[2], worldObj.rand.nextInt(100000)); + if(satelliteData == null) { + satelliteData = SatelliteSavedData.getData(worldObj); + } + int newId = worldObj.rand.nextInt(100000); + if(!satelliteData.isFreqTaken(newId)) { + ISatChip.setFreqS(slots[2], newId); + } } } } From ccb91d98bf4e2acd616c6ede141a9daa68a05567 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Mon, 24 Jul 2023 14:06:46 +0200 Subject: [PATCH 4/7] Added satellite managing commands, fixed some satellite map storage stuff --- .../com/hbm/commands/CommandSatellites.java | 87 +++++++++++++++++++ src/main/java/com/hbm/main/MainRegistry.java | 2 + .../com/hbm/saveddata/SatelliteSavedData.java | 12 ++- .../machine/TileEntityMachineSatDock.java | 5 +- .../machine/TileEntityMachineSatLinker.java | 6 +- src/main/resources/assets/hbm/lang/en_US.lang | 6 ++ 6 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/hbm/commands/CommandSatellites.java diff --git a/src/main/java/com/hbm/commands/CommandSatellites.java b/src/main/java/com/hbm/commands/CommandSatellites.java new file mode 100644 index 000000000..82f474b70 --- /dev/null +++ b/src/main/java/com/hbm/commands/CommandSatellites.java @@ -0,0 +1,87 @@ +package com.hbm.commands; + +import com.hbm.items.ISatChip; +import com.hbm.items.ModItems; +import com.hbm.saveddata.SatelliteSavedData; +import com.hbm.saveddata.satellites.Satellite; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class CommandSatellites extends CommandBase { + @Override + public String getCommandName() { + return "ntmsatellites"; + } + + @Override + public String getCommandUsage(ICommandSender iCommandSender) { + return String.format( + "%s/%s orbit %s- Launch the held satellite\n" + + "%s/%s descend %s- Deletes satellite by frequency.", + EnumChatFormatting.GREEN, getCommandName(), EnumChatFormatting.LIGHT_PURPLE, + EnumChatFormatting.GREEN, getCommandName(), EnumChatFormatting.LIGHT_PURPLE + ); + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if(!(sender instanceof EntityPlayer)) { + sender.addChatMessage(new ChatComponentTranslation( "commands.satellite.should_be_run_as_player").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + return; + } + switch (args[0]) { + case "orbit": + EntityPlayer player = getCommandSenderAsPlayer(sender); + if(player.getHeldItem().getItem() instanceof ISatChip && player.getHeldItem().getItem() != ModItems.sat_chip) { + Satellite.orbit( + player.worldObj, + Satellite.getIDFromItem(player.getHeldItem().getItem()), + ISatChip.getFreqS(player.getHeldItem()), + player.posX, player.posY, player.posZ + ); + player.getHeldItem().stackSize -= 1; + sender.addChatMessage(new ChatComponentTranslation("commands.satellite.satellite_orbited").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GREEN))); + } else { + sender.addChatMessage(new ChatComponentTranslation("commands.satellite.not_a_satellite").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + } + break; + case "descend": + int freq = parseInt(sender, args[1]); + SatelliteSavedData data = SatelliteSavedData.getData(sender.getEntityWorld()); + if(data.sats.containsKey(freq)) { + data.sats.remove(freq); + data.markDirty(); + sender.addChatMessage(new ChatComponentTranslation( "commands.satellite.satellite_descended").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GREEN))); + } else { + sender.addChatMessage(new ChatComponentTranslation( "commands.satellite.no_satellite").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + } + break; + } + } + + @SuppressWarnings("rawtypes") + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] args) { + if(!(sender instanceof EntityPlayer)) { + return Collections.emptyList(); + } + if(args.length < 1) { + return Collections.emptyList(); + } + if(args.length == 1) { + return getListOfStringsMatchingLastWord(args, "orbit", "descend"); + } + if (args[0].equals("descend")) { + return getListOfStringsFromIterableMatchingLastWord(args, SatelliteSavedData.getData(sender.getEntityWorld()).sats.keySet().stream().map(String::valueOf).collect(Collectors.toList())); + } + return Collections.emptyList(); + } +} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 1a039b530..6b7451986 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1,5 +1,6 @@ package com.hbm.main; +import com.hbm.commands.CommandSatellites; import net.minecraft.block.BlockDispenser; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; @@ -926,6 +927,7 @@ public class MainRegistry { SiegeOrchestrator.createGameRules(world); event.registerServerCommand(new CommandReloadRecipes()); event.registerServerCommand(new CommandDebugChunkLoad()); + event.registerServerCommand(new CommandSatellites()); } @EventHandler diff --git a/src/main/java/com/hbm/saveddata/SatelliteSavedData.java b/src/main/java/com/hbm/saveddata/SatelliteSavedData.java index f0ced3750..a0dd2a624 100644 --- a/src/main/java/com/hbm/saveddata/SatelliteSavedData.java +++ b/src/main/java/com/hbm/saveddata/SatelliteSavedData.java @@ -12,6 +12,17 @@ public class SatelliteSavedData extends WorldSavedData { public final HashMap sats = new HashMap<>(); + /** + * Constructor used for deserialization + * @param name - Map data name + */ + public SatelliteSavedData(String name) { + super(name); + } + + /** + * Default constructor for satellites map data. + */ public SatelliteSavedData() { super("satellites"); this.markDirty(); @@ -62,7 +73,6 @@ public class SatelliteSavedData extends WorldSavedData { worldObj.perWorldStorage.setData("satellites", new SatelliteSavedData()); data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); - data.markDirty(); } return data; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index 07e6e9c1c..0fd248320 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -28,8 +28,6 @@ import net.minecraft.world.World; import java.util.List; public class TileEntityMachineSatDock extends TileEntity implements ISidedInventory, IGUIProvider { - private SatelliteSavedData data; - private ItemStack[] slots; private static final int[] access = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; @@ -182,8 +180,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent @Override public void updateEntity() { if (!worldObj.isRemote) { - if (data == null) - data = SatelliteSavedData.getData(worldObj); + SatelliteSavedData data = SatelliteSavedData.getData(worldObj); if (slots[15] != null) { int freq = ISatChip.getFreqS(slots[15]); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index e8793d0aa..8c3583106 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -19,8 +19,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class TileEntityMachineSatLinker extends TileEntity implements ISidedInventory, IGUIProvider { - private SatelliteSavedData satelliteData; - private ItemStack[] slots; //public static final int maxFill = 64 * 3; @@ -176,9 +174,7 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve } if(slots[2] != null && slots[2].getItem() instanceof ISatChip) { - if(satelliteData == null) { - satelliteData = SatelliteSavedData.getData(worldObj); - } + SatelliteSavedData satelliteData = SatelliteSavedData.getData(worldObj); int newId = worldObj.rand.nextInt(100000); if(!satelliteData.isFreqTaken(newId)) { ISatChip.setFreqS(slots[2], newId); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f0d31585c..4bfcf8ce1 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -604,6 +604,12 @@ chem.XENON=Linde Xenon Cycle chem.XENON_OXY=Boosted Linde Xenon Cycle chem.YELLOWCAKE=Yellowcake Production +commands.satellite.no_satellite=No satellite using this frequency found! +commands.satellite.not_a_satellite=The held item is not a satellite! +commands.satellite.satellite_descended=Satellite successfully descended. +commands.satellite.satellite_orbited=Satellite launched. +commands.satellite.should_be_run_as_player=This command should be run by a player! + container.amsBase=AMS Base (Deco) container.amsEmitter=AMS Emitter (Deco) container.amsLimiter=AMS Stabilizer (Deco) From 4cf0e5d531f36d42728c4babfcea3cb47287b558 Mon Sep 17 00:00:00 2001 From: Doctor17-git <60807716+Doctor17-git@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:46:34 +0300 Subject: [PATCH 5/7] Updated ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 214bcf59f..2f1f79334 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2167,6 +2167,33 @@ tile.radio_torch_counter.desc=Ставится на плоские поверх container.rttyCounter=Редстоун-радио счётчик предметов tile.machine_industrial_boiler.name=Промышленный бойлер tile.machine_industrial_boiler.desc=Большой бойлер, в котором можно вскипятить воду или разогреть нефть.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.01 TU/t$Не может взорваться +container.crateTemplate=Сборочный ящик +tile.crate_template.name=Сборочный ящик + +tile.cm_block.alloy.name=Корпус машины из продвинутого сплава +tile.cm_block.desh.name=Корпус машины из деша +tile.cm_block.steel.name=Корпус машины из стали +tile.cm_block.tcalloy.name=Корпус машины из технециевой стали +tile.cm_engine.bismuth.name=Моторный блок из висмута +tile.cm_engine.desh.name=Моторный блок из деша +tile.cm_engine.standard.name=Моторный блок +tile.cm_port.alloy.name=Люк из продвинутого сплава +tile.cm_port.desh.name=Люк из деша +tile.cm_port.steel.name=Люк из стали +tile.cm_port.tcalloy.name=Люк из технециевой стали +tile.cm_sheet.alloy.name=Лист из продвинутого сплава +tile.cm_sheet.desh.name=Лист из деша +tile.cm_sheet.steel.name=Лист из стали +tile.cm_sheet.tcalloy.name=Лист из технециевой стали +tile.cm_tank.alloy.name=Бак из продвинутого сплава +tile.cm_tank.desh.name=Бак из деша +tile.cm_tank.steel.name=Бак из стали +tile.cm_tank.tcalloy.name=Бак из технециевой стали +tile.cm_circuit.aluminium.name=Блок микросхем 1-го уровня +tile.cm_circuit.copper.name=Блок микросхем 2-го уровня +tile.cm_circuit.gold.name=Блок микросхем 4-го уровня +tile.cm_circuit.red_copper.name=Блок микросхем 3-го уровня +tile.cm_circuit.schrabidium.name=Блок микросхем 5-го уровня container.hadron=Ускоритель частиц tile.hadron_access.name=Терминал доступа ускорителя частиц @@ -4366,7 +4393,9 @@ item.ammo_luna_explosive.name=Лунный снайперский взрывно item.ammo_luna_incendiary.name=Лунный снайперский зажигательный снаряд item.gun_benelli.name=Автоматический дробовик Benelli (Барабан) item.gun_coilgun.name=Гаусс-пушка -item.gun_coilgun_ammo.name=Вольфрамовый шар для гаусс-пушки +item.ammo_coilgun.name=Вольфрамовый шар для гаусс-пушки +item.ammo_coilgun_du.name=Ферроураниевый шар для гаусс-пушки +item.ammo_coilgun_rubber.name=Резиновый шар для гаусс-пушки item.gun_fireext.name=Огнетушитель item.ammo_fireext.name=Бак с водой для огнетушителя @@ -5720,7 +5749,7 @@ item.gun_twr.name=Time Warp Rifle (PLACEHOLDER) item.gun_uac_carbine.name=UAC Carbine item.gun_uac_dmr.name=UAC DMR item.gun_uac_lmg.name=UAC LMG -item.gun_uac_pistol.name=UAC .45 Pistol +item.gun_uac_pistol.name=Пистолет UAC .45 item.gun_uac_smg.name=UAC SMG item.gun_detonator.name=Лазерный детонатор item.ingot_bk247.name=Berkelium-247 Ingot From a23e9be2a71b750823a8464895dec33229ea2d5b Mon Sep 17 00:00:00 2001 From: sdddddf80 <2980187979@qq.com> Date: Tue, 25 Jul 2023 13:47:26 +0800 Subject: [PATCH 6/7] add Structure display for custom machine --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../hbm/config/CustomMachineConfigJSON.java | 7 +-- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../tileentity/RenderCustomMachine.java | 44 +++++++++++++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7783f7652..0e00c1c8e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2027,7 +2027,7 @@ public class ModBlocks { cm_tank = new BlockCMGlass(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_tank").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_tank"); cm_circuit = new BlockCM(Material.iron, EnumCMCircuit.class, true, true).setBlockName("cm_circuit").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_circuit"); cm_port = new BlockCMPort(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_port").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_port"); - custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F); + custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.machineTab).setLightLevel(1F).setHardness(5.0F).setResistance(10.0F); reactor_element = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_element_top", RefStrings.MODID + ":reactor_element_base").setBlockName("reactor_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_element_side"); reactor_control = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_control_top").setBlockName("reactor_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_control_side"); diff --git a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java index 79a659261..359eb3db5 100644 --- a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java +++ b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java @@ -203,9 +203,9 @@ public class CustomMachineConfigJSON { compDef.y = compObject.get("y").getAsInt(); compDef.z = compObject.get("z").getAsInt(); compDef.allowedMetas = new HashSet(); - JsonArray metas = compObject.get("metas").getAsJsonArray(); - for(int k = 0; k < metas.size(); k++) { - compDef.allowedMetas.add(metas.get(k).getAsInt()); + compDef.metas = compObject.get("metas").getAsJsonArray(); + for(int k = 0; k < compDef.metas.size(); k++) { + compDef.allowedMetas.add(compDef.metas.get(k).getAsInt()); } configuration.components.add(compDef); @@ -248,6 +248,7 @@ public class CustomMachineConfigJSON { public static class ComponentDefinition { public Block block; public Set allowedMetas; + public JsonArray metas; public int x; public int y; public int z; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 14d0c8a6e..c31870b9c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -325,6 +325,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityITERStruct.class, new RenderITERMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPlasmaStruct.class, new RenderPlasmaMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatzStruct.class, new RenderWatzMultiblock()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCustomMachine.class, new RenderCustomMachine()); //RBMK ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKControlManual.class, new RenderRBMKControlRod()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKControlAuto.class, new RenderRBMKControlRod()); diff --git a/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java b/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java new file mode 100644 index 000000000..eb325b70c --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java @@ -0,0 +1,44 @@ +package com.hbm.render.tileentity; + +import com.hbm.config.CustomMachineConfigJSON; +import com.hbm.render.util.SmallBlockPronter; +import com.hbm.tileentity.machine.TileEntityCustomMachine; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; + +public class RenderCustomMachine extends TileEntitySpecialRenderer { + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + NBTTagCompound nbt = new NBTTagCompound(); + tile.writeToNBT(nbt); + CustomMachineConfigJSON.MachineConfiguration config = CustomMachineConfigJSON.customMachines.get(nbt.getString("machineType")); + + ForgeDirection dir = ForgeDirection.getOrientation(tile.getBlockMetadata()); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + bindTexture(TextureMap.locationBlocksTexture); + SmallBlockPronter.startDrawing(); + for(CustomMachineConfigJSON.MachineConfiguration.ComponentDefinition comp : config.components){ + int rx = - dir.offsetX * comp.x + rot.offsetX * comp.x; + int ry = + comp.y; + int rz = - dir.offsetZ * comp.z + rot.offsetZ * comp.z; + if(dir == ForgeDirection.EAST || dir == ForgeDirection.WEST) { + rx = + dir.offsetZ * comp.z - rot.offsetZ * comp.z; + rz = + dir.offsetX * comp.x - rot.offsetX * comp.x; + } + SmallBlockPronter.drawSmolBlockAt(comp.block,comp.metas.get(comp.metas.size()-1).getAsInt(),rx,ry,rz); + + } + + SmallBlockPronter.draw(); + + GL11.glPopMatrix(); + } +} From 1ffb2737aac316bd6376ea576ac3da555c343041 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 25 Jul 2023 22:21:48 +0200 Subject: [PATCH 7/7] ow --- changelog | 27 +++----- gradle.properties | 6 +- .../com/hbm/handler/EntityEffectHandler.java | 2 + .../handler/pollution/PollutionHandler.java | 4 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../tileentity/RenderCustomMachine.java | 66 ++++++++++--------- .../machine/TileEntityCustomMachine.java | 2 + 7 files changed, 54 insertions(+), 55 deletions(-) diff --git a/changelog b/changelog index e06e326bf..07447e1f7 100644 --- a/changelog +++ b/changelog @@ -1,24 +1,13 @@ ## Added -* Custom machines - * Simple processing multiblocks that can be created via config - * The config found in `hbmConfig/hbmCustomMachines.json` defines the input and output slots, fluid amount, speed and consumption multipliers as well as the multiblock - * The config in `hbmRecipes/hbmCustomMachines.json` defines the recipes for all multiblocks with inputs, outputs base speed and consumption rates - * Currently, custom machine recipes do not show up in NEI, a handler will be added soon - * All recipes are shaped, even the fluid types, this was done to improve performance - * Item inputs have filter slots for automation, this allows the right ingredients to be inserted into the right slot easily. For simple machines, this slot can be left empty so any item can be inserted. - * By default, the standard config creates one custom machine with one recipe called the paper press, turning sawdust and water into paper - * More examples can be found in the configs attached to this github release - * Custom machines can also be configured as generators, using up item and fluid inputs and turning them into energy - * While changing the configs and adding/removing machines in an existing world is possible, this is not recommended because of potential ID shifts of the machines, breaking existing custom machines in the world - * With custom machines, quite a few otherwise unused construction blocks have been added which are recommended to be used for custom machines as they come in tiers, have reasonable cost and mesh well visually with the multiblocks - * However, using them is not mandatory, the only functional block is the port which is most likely needed for automation, although the machine's controller itself also serves as a port +* New command `/ntmsatellites` + * `/ntmsatellites orbit` will send the held saatellite into orbit + * `/ntmsatellites descend ` will delete the given satellite ## Changed -* Additional OC compat for fluid gauges -* Crates now display their contents when in item form +* Updated russian localization +* It's no longer possible to insert items into the satellite cargo pad, it's only for unloading +* The satellite linker will no longer assign new frequencies in the randomizer slot if that frequency is already taken +* Custom machines will now show a hologram showing how they are built ## Fixed -* Hopefully fixed an issue where pollution-based mob buffs apply multiple times, resulting in near-unkillable mobs -* Fixed exploit allowing the cap for shield infusions to be bypassed -* Fixed tier detection mode in the radar detecting the Y-position instead of the actual tier -* Fixed missing parenthesis in sigmoid curve's description \ No newline at end of file +* Fixed crash caused by mobs spawning in highly polluted area \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index a5787a31d..d305d95b5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4670 +mod_build_number=4671 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ @@ -14,5 +14,5 @@ credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion al \ Toshayo (satellite loot system, project settings, gradle curse task), Silly541 (config for safe ME drives),\ \ Voxelstice (OpenComputers integration, turbine spinup), BallOfEnergy1 (OpenComputers integration), martemen\ \ (project settings), Pvndols (thorium fuel recipe, gas turbine), JamesH2 (blood mechanics, nitric acid,\ - \ particle emitter), sdddddf80 (recipe configs, chinese localization), SuperCraftAlex (tooltips)\ - \ LePeep (coilgun model), Maksymisio (polish localization) + \ particle emitter), sdddddf80 (recipe configs, chinese localization, custom machine holograms),\ + \ SuperCraftAlex (tooltips) LePeep (coilgun model), Maksymisio (polish localization) diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 3396b2472..467318ff7 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -370,6 +370,8 @@ public class EntityEffectHandler { double asbestos = Math.min(HbmLivingProps.getAsbestos(entity), HbmLivingProps.maxAsbestos); double soot = PollutionHandler.getPollution(entity.worldObj, (int) Math.floor(entity.posX), (int) Math.floor(entity.posY + entity.getEyeHeight()), (int) Math.floor(entity.posZ), PollutionType.SOOT); + if(!(entity instanceof EntityPlayer)) soot = 0; + if(ArmorRegistry.hasProtection(entity, 3, HazardClass.PARTICLE_COARSE)) soot = 0; boolean coughs = blacklung / HbmLivingProps.maxBlacklung > 0.25D || asbestos / HbmLivingProps.maxAsbestos > 0.25D || soot > 30; diff --git a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java index 6f783a4f5..0ba128f52 100644 --- a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java +++ b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java @@ -323,8 +323,8 @@ public class PollutionHandler { if(living instanceof IMob) { if(data.pollution[PollutionType.SOOT.ordinal()] > RadiationConfig.buffMobThreshold) { - if(living.getEntityAttribute(SharedMonsterAttributes.maxHealth) != null) living.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier(maxHealth, "Soot Anger Health Increase", 1D, 1)); - if(living.getEntityAttribute(SharedMonsterAttributes.attackDamage) != null) living.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier(attackDamage, "Soot Anger Damage Increase", 1.5D, 1)); + if(living.getEntityAttribute(SharedMonsterAttributes.maxHealth) != null && living.getEntityAttribute(SharedMonsterAttributes.maxHealth).getModifier(maxHealth) == null) living.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier(maxHealth, "Soot Anger Health Increase", 1D, 1)); + if(living.getEntityAttribute(SharedMonsterAttributes.attackDamage) != null && living.getEntityAttribute(SharedMonsterAttributes.attackDamage).getModifier(attackDamage) == null) living.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier(attackDamage, "Soot Anger Damage Increase", 1.5D, 1)); living.heal(living.getMaxHealth()); } } diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 5e3527635..81bc67970 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 (4670)"; + public static final String VERSION = "1.0.27 BETA (4671)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java b/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java index eb325b70c..1c5d6835a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java @@ -3,42 +3,48 @@ package com.hbm.render.tileentity; import com.hbm.config.CustomMachineConfigJSON; import com.hbm.render.util.SmallBlockPronter; import com.hbm.tileentity.machine.TileEntityCustomMachine; + import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; public class RenderCustomMachine extends TileEntitySpecialRenderer { - @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { - NBTTagCompound nbt = new NBTTagCompound(); - tile.writeToNBT(nbt); - CustomMachineConfigJSON.MachineConfiguration config = CustomMachineConfigJSON.customMachines.get(nbt.getString("machineType")); + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + + TileEntityCustomMachine custom = (TileEntityCustomMachine) tile; + CustomMachineConfigJSON.MachineConfiguration config = custom.config; - ForgeDirection dir = ForgeDirection.getOrientation(tile.getBlockMetadata()); - ForgeDirection rot = dir.getRotation(ForgeDirection.UP); - - GL11.glPushMatrix(); - GL11.glTranslated(x, y, z); - - bindTexture(TextureMap.locationBlocksTexture); - SmallBlockPronter.startDrawing(); - for(CustomMachineConfigJSON.MachineConfiguration.ComponentDefinition comp : config.components){ - int rx = - dir.offsetX * comp.x + rot.offsetX * comp.x; - int ry = + comp.y; - int rz = - dir.offsetZ * comp.z + rot.offsetZ * comp.z; - if(dir == ForgeDirection.EAST || dir == ForgeDirection.WEST) { - rx = + dir.offsetZ * comp.z - rot.offsetZ * comp.z; - rz = + dir.offsetX * comp.x - rot.offsetX * comp.x; - } - SmallBlockPronter.drawSmolBlockAt(comp.block,comp.metas.get(comp.metas.size()-1).getAsInt(),rx,ry,rz); - - } - - SmallBlockPronter.draw(); - - GL11.glPopMatrix(); - } + ForgeDirection dir = ForgeDirection.getOrientation(tile.getBlockMetadata()); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + if(config != null && !custom.structureOK) { + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + bindTexture(TextureMap.locationBlocksTexture); + SmallBlockPronter.startDrawing(); + for(CustomMachineConfigJSON.MachineConfiguration.ComponentDefinition comp : config.components) { + int rx = -dir.offsetX * comp.x + rot.offsetX * comp.x; + int ry = +comp.y; + int rz = -dir.offsetZ * comp.z + rot.offsetZ * comp.z; + if(dir == ForgeDirection.EAST || dir == ForgeDirection.WEST) { + rx = +dir.offsetZ * comp.z - rot.offsetZ * comp.z; + rz = +dir.offsetX * comp.x - rot.offsetX * comp.x; + } + + int index = (int) ((System.currentTimeMillis() / 1000) % comp.metas.size()); + SmallBlockPronter.drawSmolBlockAt(comp.block, comp.metas.get(index).getAsInt(), rx, ry, rz); + + } + + SmallBlockPronter.draw(); + + GL11.glPopMatrix(); + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java index 6a7d3973d..dc3302b46 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java @@ -174,6 +174,7 @@ public class TileEntityCustomMachine extends TileEntityMachineBase implements IF NBTTagCompound data = new NBTTagCompound(); data.setString("type", this.machineType); data.setLong("power", power); + data.setBoolean("structureOK", structureOK); data.setInteger("progress", progress); data.setInteger("maxProgress", maxProgress); for(int i = 0; i < inputTanks.length; i++) inputTanks[i].writeToNBT(data, "i" + i); @@ -369,6 +370,7 @@ public class TileEntityCustomMachine extends TileEntityMachineBase implements IF this.power = nbt.getLong("power"); this.progress = nbt.getInteger("progress"); + this.structureOK = nbt.getBoolean("structureOK"); this.maxProgress = nbt.getInteger("maxProgress"); for(int i = 0; i < inputTanks.length; i++) inputTanks[i].readFromNBT(nbt, "i" + i); for(int i = 0; i < outputTanks.length; i++) outputTanks[i].readFromNBT(nbt, "o" + i);