From 42f6778b86aded3b58c62713431b01ae6e23052c Mon Sep 17 00:00:00 2001 From: Vaern Date: Sat, 5 Mar 2022 11:45:05 -0800 Subject: [PATCH 1/3] aaaaaa i can't be bothered --- src/main/java/com/hbm/blocks/ModBlocks.java | 5 + .../blocks/machine/CustomPartAssembler.java | 121 ++++++++++++++++++ src/main/java/com/hbm/items/ModItems.java | 2 +- .../items/bomb/ItemCustomNukeComponent.java | 61 +++++++++ .../java/com/hbm/main/CraftingManager.java | 3 +- .../TileEntityCustomPartAssembler.java | 23 ++++ 6 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java create mode 100644 src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 8fde28704..85f8752fa 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -883,6 +883,8 @@ public class ModBlocks { public static Block machine_powerrtg; public static Block machine_radiolysis; + public static Block custom_part_assembler; + public static Block machine_well; public static Block oil_pipe; public static final int guiID_machine_well = 40; @@ -1815,6 +1817,8 @@ public class ModBlocks { machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_polonium"); machine_radiolysis = new MachineRadiolysis(Material.iron).setBlockName("machine_radiolysis").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); + custom_part_assembler = new CustomPartAssembler(Material.iron).setBlockName("custom_part_assembler").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); + red_wire_coated = new WireCoated(Material.iron).setBlockName("red_wire_coated").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_wire_coated"); red_cable = new BlockCable(Material.iron).setBlockName("red_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_neo"); rf_cable = new BlockRFCable(Material.iron).setBlockName("rf_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rf_cable_icon"); @@ -2860,6 +2864,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_radiolysis, machine_radiolysis.getUnlocalizedName()); GameRegistry.registerBlock(machine_spp_bottom, machine_spp_bottom.getUnlocalizedName()); GameRegistry.registerBlock(machine_spp_top, machine_spp_top.getUnlocalizedName()); + GameRegistry.registerBlock(custom_part_assembler, custom_part_assembler.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating, hadron_plating.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating_blue, hadron_plating_blue.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java b/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java new file mode 100644 index 000000000..090f2eebe --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java @@ -0,0 +1,121 @@ +package com.hbm.blocks.machine; + +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.TileEntityCustomPartAssembler; + +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.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class CustomPartAssembler extends BlockContainer { + + public CustomPartAssembler(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int type) { + return new TileEntityCustomPartAssembler(); + } + + @SideOnly(Side.CLIENT) + private IIcon iconTop; + private IIcon iconBottom; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":block_steel_machine"); + this.iconTop = reg.registerIcon(RefStrings.MODID + ":block_steel"); + //this.blockIcon = reg.registerIcon(RefStrings.MODID + ":custom_part_assembler_side"); + //this.iconTop = reg.registerIcon(RefStrings.MODID + ":custom_part_assembler_top"); + this.iconBottom = reg.registerIcon(RefStrings.MODID + ":block_steel"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + + switch(side) { + case 0: + return iconBottom; + case 1: + return iconTop; + default: + return blockIcon; + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) { + return true; + } else if(!player.isSneaking()) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } else { + return true; + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block b, int i) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof ISidedInventory) { + + ISidedInventory sidedinv = (ISidedInventory) te; + + if(sidedinv != null) { + for(int i1 = 0; i1 < sidedinv.getSizeInventory(); ++i1) { + ItemStack itemstack = sidedinv.getStackInSlot(i1); + + if(itemstack != null) { + float f = world.rand.nextFloat() * 0.8F + 0.1F; + float f1 = world.rand.nextFloat() * 0.8F + 0.1F; + float f2 = world.rand.nextFloat() * 0.8F + 0.1F; + + while(itemstack.stackSize > 0) { + int j1 = world.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) world.rand.nextGaussian() * f3; + entityitem.motionY = (float) world.rand.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) world.rand.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } + + world.func_147453_f(x, y, z, b); + } + } + + super.breakBlock(world, x, y, z, b, i); + } +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index ca2ce4839..7a729d872 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1815,7 +1815,7 @@ public class ModItems { public static Item n2_charge; public static Item egg_balefire_shard; public static Item egg_balefire; - + public static Item custom_tnt; public static Item custom_nuke; public static Item custom_hydro; diff --git a/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java b/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java new file mode 100644 index 000000000..a55b21493 --- /dev/null +++ b/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java @@ -0,0 +1,61 @@ +package com.hbm.items.bomb; + +import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumBombType; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class ItemCustomNukeComponent extends Item { + + //Use getItemDamage() for the boolean type + public void writeToNBT(ItemStack stack, EnumBombType stage, float value, float multiplier) { + + if(!stack.hasTagCompound()) + stack.stackTagCompound = new NBTTagCompound(); + + stack.stackTagCompound.setByte("stage", (byte)stage.ordinal()); + stack.stackTagCompound.setFloat("value", value); + stack.stackTagCompound.setFloat("multiplier", multiplier); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + if(!world.isRemote) { + player.addChatComponentMessage(new ChatComponentText("eat this, you gay pony").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + } + + return stack; + } + + private IIcon secondaryIcon; + + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + super.registerIcons(reg); + + if(getHasSubtypes()) { + secondaryIcon = reg.registerIcon(this.getIconString() + ".secondary"); + } + } + + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + + if(meta == 1 && secondaryIcon != null) { + return this.secondaryIcon; + } else { + return this.itemIcon; + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 9a26dad9d..b20e373a0 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -270,7 +270,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.anvil_murky, 1), new Object[] { "UUU", "UAU", "UUU", 'U', ModItems.undefined, 'A', ModBlocks.anvil_steel }); addRecipeAuto(new ItemStack(ModBlocks.machine_fraction_tower), new Object[] { "SHS", "SGS", "SHS", 'S', STEEL.plate(), 'H', ModItems.hull_big_steel, 'G', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(ModBlocks.fraction_spacer), new Object[] { "BHB", 'H', ModItems.hull_big_steel, 'B', Blocks.iron_bars }); - + addRecipeAuto(new ItemStack(ModBlocks.custom_part_assembler), new Object[] { "HBH", "STD", "PCP", 'H', ModItems.coil_tungsten, 'B', ItemBattery.getFullBattery(ModItems.battery_advanced), 'S', ModItems.screwdriver, 'T', ModBlocks.machine_armor_table, 'D', ModItems.hand_drill, 'P', ModItems.plate_steel, 'C', ModItems.circuit_copper }); + addRecipeAuto(new ItemStack(ModBlocks.muffler, 1), new Object[] { "III", "IWI", "III", 'I', ModItems.plate_polymer, 'W', Blocks.wool }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_titanium_hull), 1), new Object[] { "PIP", "I I", "PIP", 'P', TI.plate(), 'I', TI.ingot() }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java new file mode 100644 index 000000000..f44f015ac --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java @@ -0,0 +1,23 @@ +package com.hbm.tileentity.machine; + +import com.hbm.tileentity.TileEntityMachineBase; + +public class TileEntityCustomPartAssembler extends TileEntityMachineBase { + + public TileEntityCustomPartAssembler() { + super(13); //12 input, 1 output + } + + @Override + public String getName() { + return "container.customPartAssembler"; + } + + @Override + public void updateEntity() { + + } + + + +} From 9c0cc8080504804f24574347d05cf924ff1db62f Mon Sep 17 00:00:00 2001 From: Vaern Date: Wed, 9 Mar 2022 19:38:10 -0800 Subject: [PATCH 2/3] very, very preliminary recipe stuff --- .../inventory/recipes/CustomNukeRecipes.java | 56 +++++++++++++++++++ .../TileEntityCustomPartAssembler.java | 21 ++++++- 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java diff --git a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java new file mode 100644 index 000000000..977617081 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java @@ -0,0 +1,56 @@ +package com.hbm.inventory.recipes; + +import java.util.HashMap; + +import com.hbm.inventory.OreDictManager; +import com.hbm.inventory.OreDictManager.DictFrame; + +public class CustomNukeRecipes { + + //a bit hacky, i'll probably just straight copy that system bob has yet to make + public static float getQuantity(String key) { + if(key.startsWith("nugget")) { + return 1; + } else if(key.startsWith("billet")) { + return 6; + } else if(key.startsWith("ingot")) { + return 9; + } else if(key.startsWith("block")) { + return 81; + } else { + return 0; + } + } + + private static boolean containsMatch(DictFrame frame, String key) { + String[] mats = frame.anys(); + + for(String mat : mats) { + if(mat.contains(key)) { + return true; + } + } + + return false; + } + + public static float nonPredetonatingFissile(String key) { + float multiplier = getQuantity(key); + if(multiplier == 0) { + return 0; + } + + if(containsMatch(OreDictManager.U233, key)) { + return 1.05f * multiplier; + } else if(containsMatch(OreDictManager.U235, key)) { + return 1.0f * multiplier; + } else if(containsMatch(OreDictManager.NP237, key)) { + return 0.95f * multiplier; + } else if(containsMatch(OreDictManager.SA326, key)) { + return 10.0f * multiplier; + } + + return 0; + } + +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java index f44f015ac..e9508d324 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java @@ -2,8 +2,12 @@ package com.hbm.tileentity.machine; import com.hbm.tileentity.TileEntityMachineBase; -public class TileEntityCustomPartAssembler extends TileEntityMachineBase { +import net.minecraft.item.ItemStack; +public class TileEntityCustomPartAssembler extends TileEntityMachineBase { + + private static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + public TileEntityCustomPartAssembler() { super(13); //12 input, 1 output } @@ -12,6 +16,21 @@ public class TileEntityCustomPartAssembler extends TileEntityMachineBase { public String getName() { return "container.customPartAssembler"; } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + return i <= 11; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return slot_io; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i == 12; + } @Override public void updateEntity() { From a7fd72f76fc4796db6c1f9e6866b5d30edc1ea01 Mon Sep 17 00:00:00 2001 From: Vaern Date: Thu, 10 Mar 2022 17:10:37 -0800 Subject: [PATCH 3/3] Preliminary stuff gonna have to make a gui and do packet fuckery for this, shouldn't be too hard --- .../com/hbm/inventory/OreDictManager.java | 6 ++- .../inventory/recipes/CustomNukeRecipes.java | 23 ++++++++++- .../TileEntityCustomPartAssembler.java | 38 ++++++++++++++++--- 3 files changed, 59 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index e7378d2cf..994771b2c 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -490,7 +490,11 @@ public class OreDictManager { public DictFrame(String... mats) { this.mats = mats; } - + + public String[] getMaterials() { + return this.mats; + } + /* * Quick access methods to grab ore names for recipes. */ diff --git a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java index 977617081..1994dc23b 100644 --- a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java @@ -22,8 +22,29 @@ public class CustomNukeRecipes { } } + /** + * Checks if the OreDict key fits the material, but not the form + * @param frame DictFrame + * @param key Input key + */ private static boolean containsMatch(DictFrame frame, String key) { - String[] mats = frame.anys(); + String[] mats = frame.getMaterials(); + + for(String mat : mats) { + if(key.contains(mat)) { + return true; + } + } + + return false; + } + + /** + * Checks if the OreDict key fits the material and the form thereof. + * @param mats Ore names + * @param key Input key + */ + private static boolean containsMatch(String[] mats, String key) { for(String mat : mats) { if(mat.contains(key)) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java index e9508d324..60073a416 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java @@ -3,13 +3,18 @@ package com.hbm.tileentity.machine; import com.hbm.tileentity.TileEntityMachineBase; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; public class TileEntityCustomPartAssembler extends TileEntityMachineBase { - private static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + //Save the item and the mode for automation purposes + public byte item; + public byte mode; + + private static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; public TileEntityCustomPartAssembler() { - super(13); //12 input, 1 output + super(17); //16 input, 1 output } @Override @@ -19,7 +24,7 @@ public class TileEntityCustomPartAssembler extends TileEntityMachineBase { @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { - return i <= 11; + return i <= 15; } @Override @@ -29,14 +34,35 @@ public class TileEntityCustomPartAssembler extends TileEntityMachineBase { @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { - return i == 12; + return i == 16; } - + @Override public void updateEntity() { - + /* + * String troll = "trolling"; + * + * System.Console.WriteLine($"We do a little bit of {troll}!"); + */ } + @Override + public boolean canUpdate() { + return false; + } + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + item = nbt.getByte("item"); + mode = nbt.getByte("mode"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setByte("item", item); + nbt.setByte("mode", mode); + } }