From 5372884c50dced19fa1f0dc9486f6b51411d50d9 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 18 Apr 2025 14:40:18 +0200 Subject: [PATCH] i spilled my tomato sauce --- changelog | 12 ++++ src/main/java/com/hbm/blocks/ModBlocks.java | 4 -- .../blocks/generic/BlockLanternBehemoth.java | 2 +- .../com/hbm/blocks/generic/BlockPedestal.java | 49 +++++++------ .../blocks/machine/MachineSolarBoiler.java | 5 ++ .../inventory/gui/GUIScreenClayTablet.java | 35 ++++++---- .../inventory/recipes/AssemblerRecipes.java | 2 +- .../inventory/recipes/PedestalRecipes.java | 66 ++++++++++++------ src/main/java/com/hbm/items/ModItems.java | 1 - .../deco/TileEntityLanternBehemoth.java | 2 +- .../machine/TileEntitySolarBoiler.java | 13 ++-- .../networkproviders/PneumaticNetwork.java | 22 ++++-- .../hbm/textures/gui/guide_pedestal.png | Bin 2495 -> 6025 bytes 13 files changed, 132 insertions(+), 81 deletions(-) diff --git a/changelog b/changelog index 5b69a3e51..4c9d21595 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,15 @@ +## Changed +* Trenchmaster armor now has the fast reload and more ammo traits again + * Fast reload now also plays the animation twice as fast + * More ammo does not apply to weapons that can only hold one round, like nuke and rocket launchers +* Ace of spades now works as advertised again +* Clay tablets now have "pools", tablets obtained from a black room no longer shows recipes for things not related to black rooms +* Pedestal crafting extras `GOOD_KARMA` and `BAD_KARMA` are now properly implemented + * If you don't know what this means, just ignore it +* Pneumatic tubes now have a special case when supplying autocrafters, they will only send single items since larger stacks are not accepted +* Simplified turbofan recipe +* Solar boilers will now show a tooltip when they are too cold + ## Fixed * Fixed fatal gamebreaking hard drive corrupting issue where taurun leggings were misspelled * Fixed minor display issue where compressed air ducts would visually connect to non-ejector pneumatic tubes diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index d5ff7ea63..076a86b1c 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -851,11 +851,7 @@ public class ModBlocks { public static Block machine_transformer_dnt; public static Block machine_transformer_dnt_20; - public static Block bomb_multi_large; - public static final int guiID_bomb_multi_large = 18; - public static Block machine_solar_boiler; - public static final int guiID_solar_boiler = 18; public static Block solar_mirror; public static Block struct_launcher; diff --git a/src/main/java/com/hbm/blocks/generic/BlockLanternBehemoth.java b/src/main/java/com/hbm/blocks/generic/BlockLanternBehemoth.java index 843a7c7b7..b89fc9660 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockLanternBehemoth.java +++ b/src/main/java/com/hbm/blocks/generic/BlockLanternBehemoth.java @@ -53,7 +53,7 @@ public class BlockLanternBehemoth extends BlockDummyable implements IToolable, I if(didRepair) { HbmPlayerProps data = HbmPlayerProps.getData(player); - data.reputation++; + if(data.reputation < 25) data.reputation++; } return didRepair; diff --git a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java index 5e1774c52..c6336af1f 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java @@ -2,6 +2,7 @@ package com.hbm.blocks.generic; import java.util.List; +import com.hbm.extprop.HbmPlayerProps; import com.hbm.inventory.recipes.PedestalRecipes; import com.hbm.inventory.recipes.PedestalRecipes.PedestalRecipe; import com.hbm.lib.RefStrings; @@ -58,26 +59,10 @@ public class BlockPedestal extends BlockContainer { public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - @Override - public int getRenderType() { - return renderID; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { - return true; - } + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { return true; } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { @@ -133,9 +118,11 @@ public class BlockPedestal extends BlockContainer { TileEntityPedestal se = castOrNull(Compat.getTileStandard(world, x + ForgeDirection.SOUTH.offsetX * 2 + ForgeDirection.EAST.offsetX * 2, y, z + ForgeDirection.SOUTH.offsetZ * 2 + ForgeDirection.EAST.offsetZ * 2)); TileEntityPedestal[] tileArray = new TileEntityPedestal[] {nw, n, ne, w, center, e, sw, s, se}; + List nearbyPlayers = world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1).expand(20, 20, 20)); outer: for(PedestalRecipe recipe : PedestalRecipes.recipes) { + /// EXTRA CONDITIONS /// if(recipe.extra == recipe.extra.FULL_MOON) { if(world.getCelestialAngle(0) < 0.35 || world.getCelestialAngle(0) > 0.65) continue; if(world.provider.getMoonPhase(world.getWorldInfo().getWorldTime()) != 0) continue; @@ -150,6 +137,19 @@ public class BlockPedestal extends BlockContainer { if(world.getCelestialAngle(0) > 0.15 && world.getCelestialAngle(0) < 0.85) continue; } + if(recipe.extra == recipe.extra.BAD_KARMA) { + boolean matches = false; + for(EntityPlayer player : nearbyPlayers) if(HbmPlayerProps.getData(player).reputation <= -10) { matches = true; break; } + if(!matches) continue; + } + + if(recipe.extra == recipe.extra.GOOD_KARMA) { + boolean matches = false; + for(EntityPlayer player : nearbyPlayers) if(HbmPlayerProps.getData(player).reputation >= 10) { matches = true; break; } + if(!matches) continue; + } + + /// CHECK ITEMS /// for(int i = 0; i < 9; i++) { ItemStack pedestal = tileArray[i] != null ? tileArray[i].item : null; if(pedestal == null && recipe.input[i] != null) continue outer; @@ -159,6 +159,7 @@ public class BlockPedestal extends BlockContainer { if(!recipe.input[i].matchesRecipe(pedestal, true) || recipe.input[i].stacksize != pedestal.stackSize) continue outer; } + /// REMOVE ITEMS /// for(int i = 0; i < 9; i++) { if(i == 4) continue; ItemStack pedestal = tileArray[i] != null ? tileArray[i].item : null; @@ -167,7 +168,8 @@ public class BlockPedestal extends BlockContainer { tileArray[i].markDirty(); world.markBlockForUpdate(tileArray[i].xCoord, tileArray[i].yCoord, tileArray[i].zCoord); } - + + /// PRODUCE RESULT /// center.item = recipe.output.copy(); center.markDirty(); world.markBlockForUpdate(x, y, z); @@ -191,10 +193,7 @@ public class BlockPedestal extends BlockContainer { public ItemStack item; - @Override - public boolean canUpdate() { - return false; - } + @Override public boolean canUpdate() { return false; } @Override public Packet getDescriptionPacket() { diff --git a/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java b/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java index 6c4a3e29c..aef0bc999 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java +++ b/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java @@ -5,6 +5,7 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntitySolarBoiler; +import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; @@ -74,6 +75,10 @@ public class MachineSolarBoiler extends BlockDummyable implements ILookOverlay { for(int i = 0; i < tanks.length; i++) text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + tanks[i].getTankType().getLocalizedName() + ": " + tanks[i].getFill() + "/" + tanks[i].getMaxFill() + "mB"); + if(boiler.heat < 50) { + text.add("&[" + (BobMathUtil.getBlink() ? 0xff0000 : 0xffff00) + "&]Too cold!"); + } + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenClayTablet.java b/src/main/java/com/hbm/inventory/gui/GUIScreenClayTablet.java index 0038befa3..6cd2137af 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenClayTablet.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenClayTablet.java @@ -1,5 +1,6 @@ package com.hbm.inventory.gui; +import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -26,6 +27,7 @@ public class GUIScreenClayTablet extends GuiScreen { protected int ySize = 84; protected int guiLeft; protected int guiTop; + protected int tabletMeta = 0; protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/guide_pedestal.png"); @@ -49,29 +51,36 @@ public class GUIScreenClayTablet extends GuiScreen { protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - if(player.getHeldItem() != null && player.getHeldItem().hasTagCompound() && player.getHeldItem().stackTagCompound.hasKey("tabletSeed") && !PedestalRecipes.recipes.isEmpty()) { - Random rand = new Random(player.getHeldItem().stackTagCompound.getLong("tabletSeed")); - PedestalRecipe recipe = PedestalRecipes.recipes.get(rand.nextInt(PedestalRecipes.recipes.size())); + if(player.getHeldItem() != null) tabletMeta = player.getHeldItem().getItemDamage(); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - if(recipe.extra == recipe.extra.FULL_MOON) drawTexturedModalRect(guiLeft + 120, guiTop + 62, 142, 32, 16, 16); - if(recipe.extra == recipe.extra.NEW_MOON) drawTexturedModalRect(guiLeft + 120, guiTop + 62, 142, 48, 16, 16); - if(recipe.extra == recipe.extra.SUN) drawTexturedModalRect(guiLeft + 120, guiTop + 62, 142, 64, 16, 16); + int tabletOffset = tabletMeta == 1 ? 84 : 0; + int iconOffset = tabletMeta == 1 ? 16 : 0; + float revealChance = tabletMeta == 1 ? 0.25F : 0.5F; + drawTexturedModalRect(guiLeft, guiTop, 0, tabletOffset, xSize, ySize); + + ArrayList recipeSet = PedestalRecipes.recipeSets[Math.abs(tabletMeta) % PedestalRecipes.recipeSets.length]; + + if(player.getHeldItem() != null && player.getHeldItem().hasTagCompound() && player.getHeldItem().stackTagCompound.hasKey("tabletSeed") && !recipeSet.isEmpty()) { + Random rand = new Random(player.getHeldItem().stackTagCompound.getLong("tabletSeed")); + PedestalRecipe recipe = recipeSet.get(rand.nextInt(recipeSet.size())); + + if(recipe.extra == recipe.extra.FULL_MOON) drawTexturedModalRect(guiLeft + 120, guiTop + 62, 142 + iconOffset, 32, 16, 16); + if(recipe.extra == recipe.extra.NEW_MOON) drawTexturedModalRect(guiLeft + 120, guiTop + 62, 142 + iconOffset, 48, 16, 16); + if(recipe.extra == recipe.extra.SUN) drawTexturedModalRect(guiLeft + 120, guiTop + 62, 142 + iconOffset, 64, 16, 16); for(int l = 0; l < 3; l++) { for(int r = 0; r < 3; r++) { - if(rand.nextBoolean()) { - drawTexturedModalRect(guiLeft + 7 + r * 27, guiTop + 7 + l * 27, 142, 16, 16, 16); + if(rand.nextFloat() > revealChance) { + drawTexturedModalRect(guiLeft + 7 + r * 27, guiTop + 7 + l * 27, 142 + iconOffset, 16, 16, 16); } else { AStack ingredient = recipe.input[r + l * 3]; if(ingredient == null) { - drawTexturedModalRect(guiLeft + 7 + r * 27, guiTop + 7 + l * 27, 142, 0, 16, 16); + drawTexturedModalRect(guiLeft + 7 + r * 27, guiTop + 7 + l * 27, 142 + iconOffset, 0, 16, 16); continue; } @@ -124,7 +133,7 @@ public class GUIScreenClayTablet extends GuiScreen { for(int l = 0; l < 3; l++) { for(int r = 0; r < 3; r++) { - drawTexturedModalRect(guiLeft + 7 + r * 27, guiTop + 7 + l * 27, 142, 16, 16, 16); + drawTexturedModalRect(guiLeft + 7 + r * 27, guiTop + 7 + l * 27, 142 + iconOffset, 16, 16, 16); } } } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 847f8db82..41b6ba3be 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -142,7 +142,7 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.machine_bat9000, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16), },150); makeRecipe(new ComparableStack(ModBlocks.machine_orbus, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plate(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_mining_laser, 1), new AStack[] {new ComparableStack(ModItems.tank_steel, 3), !exp ? new OreDictStack(STEEL.plate528(), 16) : new OreDictStack(STEEL.heavyComp(), 3), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 3), !exp ? new OreDictStack(DURA.ingot(), 4) : new OreDictStack(DESH.heavyComp(), 1), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModBlocks.machine_battery, 3), },400); - makeRecipe(new ComparableStack(ModBlocks.machine_turbofan, 1), new AStack[] {!exp ? new OreDictStack(STEEL.shell(), 3) : new OreDictStack(STEEL.heavyComp(), 1), new OreDictStack(TI.shell(), 3), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.turbine_titanium, 7), new OreDictStack(DURA.pipe(), 4), new OreDictStack(MINGRADE.ingot(), 12), new OreDictStack(MINGRADE.wireFine(), 24), },500); + makeRecipe(new ComparableStack(ModBlocks.machine_turbofan, 1), new AStack[] {!exp ? new OreDictStack(TI.shell(), 6) : new OreDictStack(TI.heavyComp(), 1), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.turbine_titanium, 3) }, 300); makeRecipe(new ComparableStack(ModBlocks.machine_turbinegas, 1), new AStack[] {!exp ? new OreDictStack(STEEL.shell(), 10) : new OreDictStack(STEEL.heavyComp(), 2), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4), new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 3), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.ingot_rubber, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())}, 600); makeRecipe(new ComparableStack(ModBlocks.machine_teleporter, 1), new AStack[] {new OreDictStack(TI.ingot(), 8), new OreDictStack(ALLOY.plate528(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1) },300); makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_transmutator, 1), new AStack[] {new OreDictStack(MAGTUNG.ingot(), 1), !exp ? new OreDictStack(TI.ingot(), 24) : new OreDictStack(TI.heavyComp(), 2), !exp ? new OreDictStack(ALLOY.plate(), 18) : new OreDictStack(ALLOY.heavyComp(), 1), new OreDictStack(STEEL.plateWelded(), 12), new ComparableStack(ModItems.plate_desh, 6), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModBlocks.machine_battery, 5), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED.ordinal()), },500); diff --git a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java index 988772873..a5bbe99b1 100644 --- a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java @@ -28,76 +28,86 @@ import net.minecraft.item.ItemStack; public class PedestalRecipes extends SerializableRecipe { public static List recipes = new ArrayList(); + public static ArrayList[] recipeSets = new ArrayList[2]; + + static { for(int i = 0; i < recipeSets.length; i++) recipeSets[i] = new ArrayList(); } @Override public void registerDefaults() { - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_light_revolver_dani), + register(new PedestalRecipe(new ItemStack(ModItems.gun_light_revolver_dani), null, new OreDictStack(PB.plate()), null, new OreDictStack(GOLD.plate()), new ComparableStack(ModItems.gun_light_revolver), new OreDictStack(GOLD.plate()), null, new OreDictStack(PB.plate()), null)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_maresleg_broken), + register(new PedestalRecipe(new ItemStack(ModItems.gun_maresleg_broken), new ComparableStack(ModBlocks.barbed_wire), new OreDictStack(WEAPONSTEEL.plate()), new ComparableStack(ModBlocks.barbed_wire), new OreDictStack(WEAPONSTEEL.plate()), new ComparableStack(ModItems.gun_maresleg), new OreDictStack(WEAPONSTEEL.plate()), new ComparableStack(ModBlocks.barbed_wire), new OreDictStack(WEAPONSTEEL.plate()), new ComparableStack(ModBlocks.barbed_wire))); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_heavy_revolver_lilmac), + register(new PedestalRecipe(new ItemStack(ModItems.gun_heavy_revolver_lilmac), null, new ComparableStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SCOPE), null, new ComparableStack(ModItems.powder_magic), new ComparableStack(ModItems.gun_heavy_revolver), new OreDictStack(WEAPONSTEEL.plate()), null, new OreDictStack(BONE.grip()), new ComparableStack(Items.apple, 3))); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_heavy_revolver_protege), + register(new PedestalRecipe(new ItemStack(ModItems.gun_heavy_revolver_protege), new ComparableStack(ModBlocks.chain, 16), new OreDictStack(CINNABAR.gem()), new ComparableStack(ModBlocks.chain, 16), new ComparableStack(ModItems.scrap_nuclear), new ComparableStack(ModItems.gun_heavy_revolver), new ComparableStack(ModItems.scrap_nuclear), new ComparableStack(ModBlocks.chain, 16), new OreDictStack(CINNABAR.gem()), new ComparableStack(ModBlocks.chain, 16))); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_flamer_daybreaker), + register(new PedestalRecipe(new ItemStack(ModItems.gun_flamer_daybreaker), new OreDictStack(GOLD.plateCast()), new ComparableStack(ModItems.canned_conserve, 1, EnumFoodType.JIZZ), new OreDictStack(GOLD.plateCast()), new OreDictStack(P_WHITE.ingot()), new ComparableStack(ModItems.gun_flamer), new OreDictStack(P_WHITE.ingot()), new OreDictStack(GOLD.plateCast()), new ComparableStack(ModItems.stick_dynamite), new OreDictStack(GOLD.plateCast())) .extra(PedestalExtraCondition.SUN)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_autoshotgun_sexy), + register(new PedestalRecipe(new ItemStack(ModItems.gun_autoshotgun_sexy), new ComparableStack(ModItems.bolt_spike, 16), new OreDictStack(STAR.ingot(), 4), new ComparableStack(ModItems.bolt_spike, 16), new ComparableStack(ModItems.card_qos), new ComparableStack(ModItems.gun_autoshotgun), new ComparableStack(ModItems.card_aos), new ComparableStack(ModItems.bolt_spike, 16), new OreDictStack(STAR.ingot(), 4), new ComparableStack(ModItems.bolt_spike, 16))); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_minigun_lacunae), + register(new PedestalRecipe(new ItemStack(ModItems.gun_minigun_lacunae), null, new ComparableStack(ModItems.powder_magic, 4), null, new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.gun_minigun), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL), null, new ComparableStack(ModItems.powder_magic, 4), null) .extra(PedestalExtraCondition.FULL_MOON)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_folly), - new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL), - new OreDictStack(BSCCO.ingot(), 16), new OreDictStack(STAR.block(), 64), new OreDictStack(BSCCO.ingot(), 16), - new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL)) - .extra(PedestalExtraCondition.FULL_MOON)); + register(new PedestalRecipe(new ItemStack(ModItems.gun_folly), + new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY), + new OreDictStack(BSCCO.ingot(), 16), new OreDictStack(STAR.block(), 64), new OreDictStack(BSCCO.ingot(), 16), + new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY)) + .extra(PedestalExtraCondition.FULL_MOON).set(1)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_aberrator), + register(new PedestalRecipe(new ItemStack(ModItems.gun_aberrator), null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new OreDictStack(BIGMT.mechanism(), 4), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), - null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_aberrator_eott), + null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null).set(1)); + register(new PedestalRecipe(new ItemStack(ModItems.gun_aberrator_eott), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new OreDictStack(BIGMT.mechanism(), 16), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), - new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR))); + new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR)) + .extra(PedestalExtraCondition.GOOD_KARMA).set(1)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_SM.ordinal()), + register(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_SM.ordinal()), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new ComparableStack(ModBlocks.moon_turf), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1)) - .extra(PedestalExtraCondition.FULL_MOON)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_NUKE.ordinal()), + .extra(PedestalExtraCondition.FULL_MOON).set(1)); + register(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_NUKE.ordinal()), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new ComparableStack(ModItems.ammo_standard, 4, EnumAmmo.NUKE_HIGH), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1)) - .extra(PedestalExtraCondition.FULL_MOON)); - recipes.add(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 5, EnumAmmoSecret.P35_800.ordinal()), + .extra(PedestalExtraCondition.FULL_MOON).set(1)); + register(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 5, EnumAmmoSecret.P35_800.ordinal()), null, null, null, null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null, - null, null, null)); + null, null, null).set(1)); + } + + public static void register(PedestalRecipe recipe) { + recipes.add(recipe); + int set = Math.abs(recipe.recipeSet) % recipeSets.length; + recipeSets[set].add(recipe); } @Override @@ -113,6 +123,7 @@ public class PedestalRecipes extends SerializableRecipe { @Override public void deleteRecipes() { recipes.clear(); + for(int i = 0; i < recipeSets.length; i++) recipeSets[i].clear(); } @Override @@ -136,6 +147,10 @@ public class PedestalRecipes extends SerializableRecipe { if(obj.has("extra")) { rec.extra = PedestalExtraCondition.valueOf(obj.get("extra").getAsString()); } + + if(obj.has("set")) { + rec.recipeSet = obj.get("set").getAsInt(); + } this.recipes.add(rec); } @@ -158,6 +173,7 @@ public class PedestalRecipes extends SerializableRecipe { writer.endArray(); writer.name("extra").value(rec.extra.name()); + if(rec.recipeSet != 0) writer.name("set").value(rec.recipeSet); } public static enum PedestalExtraCondition { @@ -167,6 +183,7 @@ public class PedestalRecipes extends SerializableRecipe { public static class PedestalRecipe { public ItemStack output; public AStack[] input; + public int recipeSet = 0; public PedestalExtraCondition extra = PedestalExtraCondition.NONE; public PedestalRecipe(ItemStack output, AStack... input) { @@ -178,5 +195,10 @@ public class PedestalRecipes extends SerializableRecipe { this.extra = extra; return this; } + + public PedestalRecipe set(int set) { + this.recipeSet = set; + return this; + } } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index bd3a08cd6..6f5d7c66c 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -6571,7 +6571,6 @@ public class ModItems { GameRegistry.registerItem(schrabidium_hammer, schrabidium_hammer.getUnlocalizedName()); GameRegistry.registerItem(shimmer_sledge, shimmer_sledge.getUnlocalizedName()); GameRegistry.registerItem(shimmer_axe, shimmer_axe.getUnlocalizedName()); - //GameRegistry.registerItem(pch, pch.getUnlocalizedName()); //sike, nevermind GameRegistry.registerItem(wood_gavel, wood_gavel.getUnlocalizedName()); GameRegistry.registerItem(lead_gavel, lead_gavel.getUnlocalizedName()); GameRegistry.registerItem(diamond_gavel, diamond_gavel.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java b/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java index eb5e45113..406da5c53 100644 --- a/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java +++ b/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java @@ -74,7 +74,7 @@ public class TileEntityLanternBehemoth extends TileEntityLoadedBase implements I List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(xCoord - 50, yCoord - 50, zCoord - 50, xCoord + 51, yCoord + 51, zCoord + 51)); for(EntityPlayer player : players) { HbmPlayerProps props = HbmPlayerProps.getData(player); - if(props.reputation > -10) props.reputation--; + if(props.reputation > -25) props.reputation--; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java index 107fe54ab..ba501baa5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java @@ -21,6 +21,7 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui private FluidTank water; private FluidTank steam; + public int displayHeat; public int heat; public HashSet primary = new HashSet(); @@ -42,9 +43,10 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui int process = heat / 50; process = Math.min(process, water.getFill()); process = Math.min(process, (steam.getMaxFill() - steam.getFill()) / 100); + + this.displayHeat = this.heat; - if(process < 0) - process = 0; + if(process < 0) process = 0; water.setFill(water.getFill() - process); steam.setFill(steam.getFill() + process * 100); @@ -122,18 +124,17 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui @Override public void serialize(ByteBuf buf) { + buf.writeInt(displayHeat); water.serialize(buf); steam.serialize(buf); } @Override public void deserialize(ByteBuf buf) { + this.displayHeat = buf.readInt(); water.deserialize(buf); steam.deserialize(buf); } - @Override - public FluidTank getTankToPaste() { - return null; - } + @Override public FluidTank getTankToPaste() { return null; } } diff --git a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java index c51e0aa74..39eb3692e 100644 --- a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java +++ b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map.Entry; import java.util.Random; +import com.hbm.tileentity.machine.TileEntityMachineAutocrafter; import com.hbm.tileentity.network.TileEntityPneumoTube; import com.hbm.uninos.NodeNet; import com.hbm.util.BobMathUtil; @@ -100,6 +101,7 @@ public class PneumaticNetwork extends NodeNet { int destSide = chosenReceiverEntry.getValue().getKey().getOpposite().ordinal(); int[] destSlotAccess = getSlotAccess(dest, destSide); int itemsLeftToSend = ITEMS_PER_TRANSFER; // not actually individual items, but rather the total "mass", based on max stack size + int itemHardCap = dest instanceof TileEntityMachineAutocrafter ? 1 : ITEMS_PER_TRANSFER; boolean didSomething = false; for(int sourceIndex : sourceSlotAccess) { @@ -115,12 +117,15 @@ public class PneumaticNetwork extends NodeNet { for(int destIndex : destSlotAccess) { ItemStack destStack = dest.getStackInSlot(destIndex); if(destStack == null) continue; - if(!dest.isItemValidForSlot(destIndex, sourceStack)) continue; - if(sidedDest != null && !sidedDest.canInsertItem(destIndex, sourceStack, destSide)) continue; if(!ItemStackUtil.areStacksCompatible(sourceStack, destStack)) continue; - int toMove = BobMathUtil.min(sourceStack.stackSize, destStack.getMaxStackSize() - destStack.stackSize, dest.getInventoryStackLimit() - destStack.stackSize, itemsLeftToSend / proportionalValue); + int toMove = BobMathUtil.min(sourceStack.stackSize, destStack.getMaxStackSize() - destStack.stackSize, dest.getInventoryStackLimit() - destStack.stackSize, itemsLeftToSend / proportionalValue, itemHardCap); if(toMove <= 0) continue; + ItemStack checkStack = destStack.copy(); + checkStack.stackSize += toMove; + if(!dest.isItemValidForSlot(destIndex, checkStack)) continue; + if(sidedDest != null && !sidedDest.canInsertItem(destIndex, checkStack, destSide)) continue; + sourceStack.stackSize -= toMove; if(sourceStack.stackSize <= 0) source.setInventorySlotContents(sourceIndex, null); destStack.stackSize += toMove; @@ -132,10 +137,13 @@ public class PneumaticNetwork extends NodeNet { // if there's stuff left to send, occupy empty slots if(itemsLeftToSend > 0 && sourceStack.stackSize > 0) for(int destIndex : destSlotAccess) { if(dest.getStackInSlot(destIndex) != null) continue; - if(!dest.isItemValidForSlot(destIndex, sourceStack)) continue; - if(sidedDest != null && !sidedDest.canInsertItem(destIndex, sourceStack, destSide)) continue; - int toMove = BobMathUtil.min(sourceStack.stackSize, dest.getInventoryStackLimit(), itemsLeftToSend / proportionalValue); + int toMove = BobMathUtil.min(sourceStack.stackSize, dest.getInventoryStackLimit(), itemsLeftToSend / proportionalValue, itemHardCap); if(toMove <= 0) continue; + + ItemStack checkStack = sourceStack.copy(); + checkStack.stackSize = toMove; + if(!dest.isItemValidForSlot(destIndex, checkStack)) continue; + if(sidedDest != null && !sidedDest.canInsertItem(destIndex, checkStack, destSide)) continue; ItemStack newStack = sourceStack.copy(); newStack.stackSize = toMove; @@ -144,7 +152,7 @@ public class PneumaticNetwork extends NodeNet { dest.setInventorySlotContents(destIndex, newStack); itemsLeftToSend -= toMove * proportionalValue; didSomething = true; - break; + if(itemsLeftToSend <= 0) break; } if(itemsLeftToSend <= 0) break; diff --git a/src/main/resources/assets/hbm/textures/gui/guide_pedestal.png b/src/main/resources/assets/hbm/textures/gui/guide_pedestal.png index 0c0e2a6b6281dfa299c5fcb002dd7ef6fd4dd9e3..d95794d341b68c6db4c04bb2d1852eba1b86df44 100644 GIT binary patch literal 6025 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 KRwakL6aNDVVu>68