From 1025f626b754e99d14ce4c030d955d9710c008f5 Mon Sep 17 00:00:00 2001 From: rost Date: Sat, 6 Sep 2025 22:21:41 +0200 Subject: [PATCH 01/26] PWRangler garbage impoovments --- .../hbm/disks/pwrangler/usr/bin/PWRangler.lua | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua index 0b86935da..2fd1379f6 100644 --- a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua +++ b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua @@ -3,7 +3,23 @@ local event = require "event" local gpu = component.gpu local call = component.invoke -colorGradient = {0x00FF00, 0x6BEE00, 0x95DB00, 0xB0C800, 0xC5B400, 0xD79F00, 0xE68700, 0xF46900, 0xFC4700, 0xFF0000} +local function lerp(a, b, t) + return a + (b - a) * t +end + +local function gradient(startColor, endColor, steps) + local colors = {} + for i = 0, steps-1 do + local t = i / (steps-1) + local r = math.floor(lerp((startColor >> 16) & 0xFF, (endColor >> 16) & 0xFF, t)) + local g = math.floor(lerp((startColor >> 8) & 0xFF, (endColor >> 8) & 0xFF, t)) + local b = math.floor(lerp(startColor & 0xFF, endColor & 0xFF, t)) + table.insert(colors, (r << 16) | (g << 8) | b) + end + return colors +end + +colorGradient = gradient(0x00FF00, 0xFF0000, 10) coreHeatESTOP = true coolantLossESTOP = true @@ -57,13 +73,11 @@ end buttons = {} -buttons[1] = newButton(61, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+1) end) -buttons[2] = newButton(68, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+5) end) -buttons[3] = newButton(75, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+10) end) - -buttons[4] = newButton(61, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-1) end) -buttons[5] = newButton(68, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-5) end) -buttons[6] = newButton(75, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-10) end) +local deltas = {1,5,10} -- This is very bad. We need new buttons +for i, d in ipairs(deltas) do + buttons[i] = newButton(61+(i-1)*7, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+d) end) + buttons[i+3] = newButton(61+(i-1)*7, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-d) end) +end buttons[7] = newButton(82, 6, 11, 5, 0xFF0000, 0xAA0000, function() component.proxy(pwrController).setLevel(100) end) buttons[8] = newButton(94, 6, 12, 2, 0x00FF00, 0x00AA00, function() coreHeatESTOP = not coreHeatESTOP if coreHeatESTOP == true then buttons[8].colorUp = 0x00FF00 buttons[8].colorDown = 0x00AA00 else buttons[8].colorUp = 0xFF0000 buttons[8].colorDown = 0xAA0000 end end) @@ -165,11 +179,9 @@ gpu.fill(99,15,7,1,"█") --HotDelta gpu.set(66,19,"┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃") -gpu.fill(66,22,19,1,"█") -gpu.fill(66,24,19,1,"█") -gpu.fill(66,26,19,1,"█") -gpu.fill(66,28,19,1,"█") -gpu.fill(66,30,19,1,"█") +for (y=22,30,2) do + gpu.fill(66,y,19,1,"█") +end gpu.set(66,32,"┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃") gpu.setForeground(0xAAAAAA) @@ -213,11 +225,9 @@ while (runSig == true) do gpu.setBackground(0xFFFFFF) gpu.setForeground(0xFFFFFF) - gpu.fill(66,22,19,1,"█") - gpu.fill(66,24,19,1,"█") - gpu.fill(66,26,19,1,"█") - gpu.fill(66,28,19,1,"█") - gpu.fill(66,30,19,1,"█") + for (y = 22, 30, 2) do + gpu.fill(66,y,19,1,"█") + end gpu.fill(92,15,6,5,"█") gpu.fill(92,32,6,5,"█") @@ -242,8 +252,8 @@ while (runSig == true) do gpu.fill(92,32+(5-coldCoolantLevel//25600),6,coldCoolantLevel//25600, "█") gpu.setForeground(0x000000) - gpu.set(66,22,tostring(fullCoreHeat)) - gpu.set(66,24,tostring(fullHullHeat)) + gpu.set(66,22,tostring(fullCoreHeat)) -- What the heck? This is too declarative! + gpu.set(66,24,tostring(fullHullHeat)) -- Will fix that garbage later :P gpu.set(66,26,tostring(call(pwrController, "getFlux"))) gpu.set(66,28,tostring(coldCoolantLevel)) gpu.set(66,30,tostring(hotCoolantLevel)) @@ -271,4 +281,4 @@ end event.ignore("touch", buttonPress) event.ignore("drop", buttonRelease) -gpu.fill(1,1,160,160," ") \ No newline at end of file +gpu.fill(1,1,160,160," ") From 81c5bb84d3e106c805ca41c89163643314ea0a8e Mon Sep 17 00:00:00 2001 From: rost Date: Sat, 6 Sep 2025 22:35:29 +0200 Subject: [PATCH 02/26] upd --- .../hbm/disks/pwrangler/usr/bin/PWRangler.lua | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua index 2fd1379f6..d59c13250 100644 --- a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua +++ b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua @@ -3,23 +3,7 @@ local event = require "event" local gpu = component.gpu local call = component.invoke -local function lerp(a, b, t) - return a + (b - a) * t -end - -local function gradient(startColor, endColor, steps) - local colors = {} - for i = 0, steps-1 do - local t = i / (steps-1) - local r = math.floor(lerp((startColor >> 16) & 0xFF, (endColor >> 16) & 0xFF, t)) - local g = math.floor(lerp((startColor >> 8) & 0xFF, (endColor >> 8) & 0xFF, t)) - local b = math.floor(lerp(startColor & 0xFF, endColor & 0xFF, t)) - table.insert(colors, (r << 16) | (g << 8) | b) - end - return colors -end - -colorGradient = gradient(0x00FF00, 0xFF0000, 10) +colorGradient = {0x00FF00, 0x6BEE00, 0x95DB00, 0xB0C800, 0xC5B400, 0xD79F00, 0xE68700, 0xF46900, 0xFC4700, 0xFF0000} coreHeatESTOP = true coolantLossESTOP = true From 3ff201bf4d3864dac7d11db6f08f938e0a077ebb Mon Sep 17 00:00:00 2001 From: rost Date: Sat, 6 Sep 2025 22:40:47 +0200 Subject: [PATCH 03/26] fixes --- .../assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua index d59c13250..8d55277bd 100644 --- a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua +++ b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua @@ -57,7 +57,7 @@ end buttons = {} -local deltas = {1,5,10} -- This is very bad. We need new buttons +local deltas = {1,5,10} -- This is very bad. Need new buttons for i, d in ipairs(deltas) do buttons[i] = newButton(61+(i-1)*7, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+d) end) buttons[i+3] = newButton(61+(i-1)*7, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-d) end) @@ -163,7 +163,7 @@ gpu.fill(99,15,7,1,"█") --HotDelta gpu.set(66,19,"┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃") -for (y=22,30,2) do +for y=22,30,2 do gpu.fill(66,y,19,1,"█") end gpu.set(66,32,"┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃") @@ -209,7 +209,7 @@ while (runSig == true) do gpu.setBackground(0xFFFFFF) gpu.setForeground(0xFFFFFF) - for (y = 22, 30, 2) do + for y = 22, 30, 2 do gpu.fill(66,y,19,1,"█") end From 98cf0b002b23c23450ca07b7aff56c5bfa90deb8 Mon Sep 17 00:00:00 2001 From: rost Date: Sun, 7 Sep 2025 11:14:30 +0200 Subject: [PATCH 04/26] hot coolant ESTOP; MAX LEVEL REQUIRED --- .../hbm/disks/pwrangler/usr/bin/PWRangler.lua | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua index 8d55277bd..19938d78f 100644 --- a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua +++ b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua @@ -6,6 +6,19 @@ local call = component.invoke colorGradient = {0x00FF00, 0x6BEE00, 0x95DB00, 0xB0C800, 0xC5B400, 0xD79F00, 0xE68700, 0xF46900, 0xFC4700, 0xFF0000} coreHeatESTOP = true coolantLossESTOP = true +hotCoolantESTOP = true + +local const = {} +local mt = { + __newindex = function(t, k, v) + error(k .. " is a constant") + end +} +setmetatable(const, mt) + +local const.fullCoreHeatMAX = 9000000 +local const.coldCoolantLevelMIN = 10000 +local const.hotCoolantLevelMAX -- = what? runSig = true @@ -251,11 +264,15 @@ while (runSig == true) do gpu.setBackground(0x000000) gpu.setForeground(0xFFFFFF) - if (coreHeatESTOP == true) and (fullCoreHeat) > 9000000 then + if (coreHeatESTOP == true) and (fullCoreHeat) > const.fullCoreHeatMAX then component.proxy(pwrController).setLevel(100) end - if (coolantLossESTOP == true) and (coldCoolantLevel) < 10000 then + if (coolantLossESTOP == true) and (coldCoolantLevel) < const.coldCoolantLevelMIN then + component.proxy(pwrController).setLevel(100) + end + + if (hotCoolantESTOP == true) and (hotCoolantLevel) > const.hotCoolantLevelMAX then component.proxy(pwrController).setLevel(100) end From 675cde7321d4a31f9c9f13ad9bc410b5231072cb Mon Sep 17 00:00:00 2001 From: rost Date: Sun, 7 Sep 2025 14:51:23 +0200 Subject: [PATCH 05/26] fixes; MAX LEVEL REQUIRED --- .../hbm/disks/pwrangler/usr/bin/PWRangler.lua | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua index 19938d78f..8c2853af4 100644 --- a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua +++ b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua @@ -9,16 +9,22 @@ coolantLossESTOP = true hotCoolantESTOP = true local const = {} +local initialized = {} local mt = { __newindex = function(t, k, v) - error(k .. " is a constant") + if not initialized[k] then + rawset(t, k, v) + initialized[k] = true + else + error(k .. " is a constant") + end end } setmetatable(const, mt) -local const.fullCoreHeatMAX = 9000000 -local const.coldCoolantLevelMIN = 10000 -local const.hotCoolantLevelMAX -- = what? +const.fullCoreHeatMAX = 9000000 +const.coldCoolantLevelMIN = 10000 +const.hotCoolantLevelMAX -- = what? runSig = true From d7f859ecab548eab1b9fbd60931bc3af0cc3c929 Mon Sep 17 00:00:00 2001 From: rost Date: Mon, 8 Sep 2025 16:03:40 +0200 Subject: [PATCH 06/26] Final commit (max level added) --- .../assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua index 8c2853af4..09fe901aa 100644 --- a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua +++ b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua @@ -24,7 +24,7 @@ setmetatable(const, mt) const.fullCoreHeatMAX = 9000000 const.coldCoolantLevelMIN = 10000 -const.hotCoolantLevelMAX -- = what? +const.hotCoolantLevelMAX = 0.5 runSig = true @@ -242,7 +242,7 @@ while (runSig == true) do prevHotCoolantFlow = hotCoolantLevel fullCoreHeat, fullHullHeat = call(pwrController, "getHeat") - coldCoolantLevel, _, hotCoolantLevel, _ = call(pwrController, "getCoolantInfo") + coldCoolantLevel, _, hotCoolantLevel, maxHotCoolantLevel = call(pwrController, "getCoolantInfo") coldCoolantOutflow = coldCoolantLevel - prevCoolantFlow hotCoolantOutflow = hotCoolantLevel - prevHotCoolantFlow @@ -278,7 +278,7 @@ while (runSig == true) do component.proxy(pwrController).setLevel(100) end - if (hotCoolantESTOP == true) and (hotCoolantLevel) > const.hotCoolantLevelMAX then + if (hotCoolantESTOP == true) and (hotCoolantLevel) > const.hotCoolantLevelMAX * maxHotCoolantLevel then component.proxy(pwrController).setLevel(100) end From 07a2e4eea36ebfef8c6d52486df46c68268e8edd Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 8 Sep 2025 16:54:05 +0200 Subject: [PATCH 07/26] tragic yuri --- changelog | 4 +- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../machine/MachineAssemblyFactory.java | 88 ++++ .../ContainerMachineAssemblyFactory.java | 86 ++++ .../container/ContainerPADetector.java | 6 +- .../gui/GUIMachineAssemblyFactory.java | 140 ++++++ .../gui/GUIMachineChemicalFactory.java | 3 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../tileentity/RenderAssemblyFactory.java | 61 +++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../TileEntityMachineAssemblyFactory.java | 407 ++++++++++++++++++ .../machine/TileEntityMachineAssemfac.java | 1 + .../TileEntityMachineChemicalFactory.java | 9 +- .../machine/albion/TileEntityPADetector.java | 10 + .../java/com/hbm/util/AchievementHandler.java | 1 + .../gui/processing/gui_assembly_factory.png | Bin 0 -> 4662 bytes .../models/machines/assembly_factory.png | Bin 3677 -> 4916 bytes 18 files changed, 810 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineAssemblyFactory.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyFactory.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_assembly_factory.png diff --git a/changelog b/changelog index 84d70e20e..de0dc79c4 100644 --- a/changelog +++ b/changelog @@ -7,4 +7,6 @@ ## Fixed * Fixed fusion reactor item IO being broken -* Fixed issue with the chemical factory where the declogging feature would be triggered by a recipe processor that doesn't even own the reported slot \ No newline at end of file +* Fixed issue with the chemical factory where the declogging feature would be triggered by a recipe processor that doesn't even own the reported slot +* Fixed the new PA not triggering the omega-12 achievement + * In addition to granting the achievement to nearby players on recipe completion, it is also granted when taking it out of the output slot \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index d30f6b619..74d743a47 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1007,6 +1007,7 @@ public class ModBlocks { @Deprecated public static Block machine_assembler; public static Block machine_assembly_machine; @Deprecated public static Block machine_assemfac; + public static Block machine_assembly_factory; public static Block machine_arc_welder; public static Block machine_soldering_station; public static Block machine_arc_furnace; @@ -2240,6 +2241,7 @@ public class ModBlocks { machine_assembler = new MachineAssembler(Material.iron).setBlockName("machine_assembler").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":machine_assembler"); machine_assembly_machine = new MachineAssemblyMachine(Material.iron).setBlockName("machine_assembly_machine").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_assemfac = new MachineAssemfac(Material.iron).setBlockName("machine_assemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_assembly_factory = new MachineAssemblyFactory(Material.iron).setBlockName("machine_assembly_factory").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_arc_welder = new MachineArcWelder(Material.iron).setBlockName("machine_arc_welder").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_soldering_station = new MachineSolderingStation(Material.iron).setBlockName("machine_soldering_station").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3298,6 +3300,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_assembler, machine_assembler.getUnlocalizedName()); register(machine_assembly_machine); GameRegistry.registerBlock(machine_assemfac, machine_assemfac.getUnlocalizedName()); + register(machine_assembly_factory); GameRegistry.registerBlock(machine_chemplant, machine_chemplant.getUnlocalizedName()); register(machine_chemical_plant); register(machine_chemfac); diff --git a/src/main/java/com/hbm/blocks/machine/MachineAssemblyFactory.java b/src/main/java/com/hbm/blocks/machine/MachineAssemblyFactory.java new file mode 100644 index 000000000..409be9874 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineAssemblyFactory.java @@ -0,0 +1,88 @@ +package com.hbm.blocks.machine; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityProxyDyn; +import com.hbm.tileentity.machine.TileEntityMachineAssemblyFactory; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineAssemblyFactory extends BlockDummyable implements ITooltipProvider, ILookOverlay { + + public MachineAssemblyFactory(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineAssemblyFactory(); + if(meta >= 6) return new TileEntityProxyDyn().inventory().power().fluid(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override public int[] getDimensions() { return new int[] {2, 0, 2, 2, 2, 2}; } + @Override public int getOffset() { return 2; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x -= dir.offsetX * 2; + z -= dir.offsetZ * 2; + + for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) { + if(Math.abs(i) == 2 || Math.abs(j) == 2) this.makeExtra(world, x + i, y, z + j); + } + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + for(int i = -2; i <= 2; i++) { + this.makeExtra(world, x + dir.offsetX * i + rot.offsetX * 2, y + 2, z + dir.offsetZ * i + rot.offsetZ * 2); + this.makeExtra(world, x + dir.offsetX * i - rot.offsetX * 2, y + 2, z + dir.offsetZ * i - rot.offsetZ * 2); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(te instanceof TileEntityMachineAssemblyFactory)) return; + TileEntityMachineAssemblyFactory assemfac = (TileEntityMachineAssemblyFactory) te; + + DirPos[] cool = assemfac.getCoolPos(); + + for(DirPos dirPos : cool) if(dirPos.compare(x + dirPos.getDir().offsetX, y, z + dirPos.getDir().offsetZ)) { + List text = new ArrayList(); + + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + assemfac.water.getTankType().getLocalizedName()); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + assemfac.lps.getTankType().getLocalizedName()); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + break; + } + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyFactory.java b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyFactory.java new file mode 100644 index 000000000..01f094c4a --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyFactory.java @@ -0,0 +1,86 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.util.InventoryUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineAssemblyFactory extends ContainerBase { + + public ContainerMachineAssemblyFactory(InventoryPlayer invPlayer, IInventory assemFac) { + super(invPlayer, assemFac); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(assemFac, 0, 234, 112)); + // Upgrades + this.addSlots(assemFac, 1, 214, 149, 3, 1); + + for(int i = 0; i < 4; i++) { + // Template + this.addSlots(assemFac, 4 + i * 14, 25 + (i % 2) * 109, 54 + (i / 2) * 56, 1, 1); + // Solid Input + this.addSlots(assemFac, 5 + i * 14, 7 + (i % 2) * 109, 20 + (i / 2) * 56, 2, 6, 16); + // Solid Output + this.addOutputSlots(invPlayer.player, assemFac, 17 + i * 14, 87 + (i % 2) * 109, 54 + (i / 2) * 56, 1, 1); + } + + this.playerInv(invPlayer, 33, 158); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 4, 5, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 18, 19, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 32, 33, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 44, 45, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(slotStack, 1, 4, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 5, 17, false) && + !InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 19, 31, false) && + !InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 33, 46, false) && + !InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 47, 59, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerPADetector.java b/src/main/java/com/hbm/inventory/container/ContainerPADetector.java index 08e8f9e81..d9a927f8d 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerPADetector.java +++ b/src/main/java/com/hbm/inventory/container/ContainerPADetector.java @@ -1,6 +1,6 @@ package com.hbm.inventory.container; -import com.hbm.inventory.SlotTakeOnly; +import com.hbm.inventory.SlotCraftingOutput; import com.hbm.items.ModItems; import com.hbm.tileentity.machine.albion.TileEntityPADetector; @@ -24,8 +24,8 @@ public class ContainerPADetector extends Container { this.addSlotToContainer(new Slot(tile, 1, 62, 18)); this.addSlotToContainer(new Slot(tile, 2, 80, 18)); //Outputs - this.addSlotToContainer(new SlotTakeOnly(tile, 3, 62, 45)); - this.addSlotToContainer(new SlotTakeOnly(tile, 4, 80, 45)); + this.addSlotToContainer(new SlotCraftingOutput(playerInv.player, tile, 3, 62, 45)); + this.addSlotToContainer(new SlotCraftingOutput(playerInv.player, tile, 4, 80, 45)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java new file mode 100644 index 000000000..583b57bce --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java @@ -0,0 +1,140 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineAssemblyFactory; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineAssemblyFactory; +import com.hbm.util.i18n.I18nUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineAssemblyFactory extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_assembly_factory.png"); + private TileEntityMachineAssemblyFactory assembler; + + public GUIMachineAssemblyFactory(InventoryPlayer invPlayer, TileEntityMachineAssemblyFactory tedf) { + super(new ContainerMachineAssemblyFactory(invPlayer, tedf)); + assembler = tedf; + + this.xSize = 256; + this.ySize = 240; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + for(int j = 0; j < 4; j++) { + assembler.inputTanks[j].renderTankInfo(this, mouseX, mouseY, guiLeft + 105 + (j % 2) * 109, guiTop + 20 + (j / 2) * 56, 3, 16); + assembler.outputTanks[j].renderTankInfo(this, mouseX, mouseY, guiLeft + 105 + (j % 2) * 109, guiTop + 54 + (j / 2) * 56, 3, 16); + } + + assembler.water.renderTankInfo(this, mouseX, mouseY, guiLeft + 232, guiTop + 149, 7, 52); + assembler.lps.renderTankInfo(this, mouseX, mouseY, guiLeft + 241, guiTop + 149, 7, 52); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 234, guiTop + 18, 16, 92, assembler.power, assembler.maxPower); + + for(int i = 0; i < 4; i++) if(guiLeft + 6 + (i % 2) * 109 <= mouseX && guiLeft + 6 + (i % 2) * 109 + 18 > mouseX && guiTop + 53 + (i / 2) * 56 < mouseY && guiTop + 53 + (i / 2) * 56 + 18 >= mouseY) { + if(this.assembler.assemblerModule[i].recipe != null && AssemblyMachineRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule[i].recipe)) { + GenericRecipe recipe = (GenericRecipe) AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule[i].recipe); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); + } + } + } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 6 + (i % 2) * 109, 53 + (i / 2) * 56, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule[i].recipe, i, ItemBlueprints.grabPool(assembler.slots[4 + i * 14]), this); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.assembler.hasCustomInventoryName() ? this.assembler.getInventoryName() : I18n.format(this.assembler.getInventoryName()); + + this.fontRendererObj.drawString(name, 113 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 33, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, 256, 140); + drawTexturedModalRect(guiLeft + 25, guiTop + 140, 25, 140, 231, 100); + + int p = (int) (assembler.power * 92 / assembler.maxPower); + drawTexturedModalRect(guiLeft + 234, guiTop + 110 - p, 0, 232 - p, 16, p); + + for(int i = 0; i < 4; i++) if(assembler.assemblerModule[i].progress > 0) { + int j = (int) Math.ceil(37 * assembler.assemblerModule[i].progress); + drawTexturedModalRect(guiLeft + 45 + (i % 2) * 109, guiTop + 63 + (i / 2) * 56, 0, 240, j, 6); + } + + for(int g = 0; g < 4; g++) { + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule[g].recipe); + + /// LEFT LED + if(assembler.didProcess[g]) { + drawTexturedModalRect(guiLeft + 45 + (g % 2) * 109, guiTop + 55 + (g / 2) * 56, 4, 236, 4, 4); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 45 + (g % 2) * 109, guiTop + 55 + (g / 2) * 56, 0, 236, 4, 4); + } + + /// RIGHT LED + if(assembler.didProcess[g]) { + drawTexturedModalRect(guiLeft + 53 + (g % 2) * 109, guiTop + 55 + (g / 2) * 56, 4, 236, 4, 4); + } else if(recipe != null && assembler.power >= recipe.power && assembler.canCool()) { + drawTexturedModalRect(guiLeft + 53 + (g % 2) * 109, guiTop + 55 + (g / 2) * 56, 0, 236, 4, 4); + } + } + + for(int g = 0; g < 4; g++) { + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule[g].recipe); + + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 7 + (g % 2) * 109, 54 + (g / 2) * 56); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.assemblerModule[g].inputSlots[i]); + if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1F, 1F, 1F, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + this.zLevel = 300F; + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.assemblerModule[g].inputSlots[i]); + if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16); + } + this.zLevel = 0F; + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + } + + for(int j = 0; j < 4; j++) { + assembler.inputTanks[j].renderTank(guiLeft + 105 + (j % 2) * 109, guiTop + 52 + (j / 2) * 56, this.zLevel, 5, 32); + assembler.outputTanks[j].renderTank(guiLeft + 105 + (j % 2) * 109, guiTop + 70 + (j / 2) * 56, this.zLevel, 5, 16); + } + + assembler.water.renderTank(guiLeft + 232, guiTop + 201, this.zLevel, 7, 52); + assembler.lps.renderTank(guiLeft + 241, guiTop + 201, this.zLevel, 7, 52); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java index 567b2e256..c153a949f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java @@ -8,6 +8,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; @@ -49,7 +50,7 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule[i].recipe); this.func_146283_a(recipe.print(), mouseX, mouseY); } else { - this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); } } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 6a2a2a439..1dfd9d2ff 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -271,6 +271,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssembler.class, new RenderAssembler()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemblyMachine.class, new RenderAssemblyMachine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemfac.class, new RenderAssemfac()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemblyFactory.class, new RenderAssemblyFactory()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemplant.class, new RenderChemplant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalPlant.class, new RenderChemicalPlant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemfac.class, new RenderChemfac()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 8f51419f4..4eb451c2b 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -142,6 +142,7 @@ public class ResourceManager { public static final IModelCustom assembler_arm = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_arm.obj")); public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")).asVBO(); public static final IModelCustom assemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assemfac.obj")).asVBO(); + public static final IModelCustom assembly_factory = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_factory.obj")).asVBO(); //Chemplant public static final IModelCustom chemplant_body = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_body.obj")).asVBO(); @@ -578,6 +579,7 @@ public class ResourceManager { public static final ResourceLocation assembler_arm_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_arm_new.png"); public static final ResourceLocation assembly_machine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_machine.png"); public static final ResourceLocation assemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assemfac.png"); + public static final ResourceLocation assembly_factory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_factory.png"); //Chemplant public static final ResourceLocation chemplant_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_base_new.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java new file mode 100644 index 000000000..8c6b0d750 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java @@ -0,0 +1,61 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + bindTexture(ResourceManager.assembly_factory_tex); + ResourceManager.assembly_factory.renderAll(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_assembly_factory); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + + public void renderInventory() { + GL11.glTranslated(0, -1.5, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.assembly_factory_tex); + ResourceManager.assembly_factory.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 250305afe..500069e74 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -352,6 +352,7 @@ public class TileMappings { put(TileEntityMachineAssembler.class, "tileentity_assembly_machine"); put(TileEntityMachineAssemblyMachine.class, "tileentity_assemblymachine"); put(TileEntityMachineAssemfac.class, "tileentity_assemfac"); + put(TileEntityMachineAssemblyFactory.class, "tileentity_assemblyfactory"); put(TileEntityMachineChemplant.class, "tileentity_chemical_plant"); put(TileEntityMachineChemicalPlant.class, "tileentity_chemicalplant"); put(TileEntityMachineChemfac.class, "tileentity_chemfac"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java new file mode 100644 index 000000000..e16572586 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -0,0 +1,407 @@ +package com.hbm.tileentity.machine; + +import java.util.HashMap; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.NotableComments; +import com.hbm.inventory.UpgradeManagerNT; +import com.hbm.inventory.container.ContainerMachineAssemblyFactory; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineAssemblyFactory; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.module.machine.ModuleMachineAssembler; +import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.TileEntityProxyDyn.IProxyDelegateProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; + +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +// TODO: make a base class because 90% of this is just copy pasted from the chemfac +@NotableComments +public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IProxyDelegateProvider { + + public FluidTank[] allTanks; + public FluidTank[] inputTanks; + public FluidTank[] outputTanks; + + public FluidTank water; + public FluidTank lps; + + public long power; + public long maxPower = 1_000_000; + public boolean[] didProcess = new boolean[4]; + + public boolean frame = false; + private AudioWrapper audio; + + public ModuleMachineAssembler[] assemblerModule; + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); + + protected DelegateAssemblyFactoy delegate = new DelegateAssemblyFactoy(); + + public TileEntityMachineAssemblyFactory() { + super(60); + + this.inputTanks = new FluidTank[4]; + this.outputTanks = new FluidTank[4]; + for(int i = 0; i < 4; i++) { + this.inputTanks[i] = new FluidTank(Fluids.NONE, 4_000); + this.outputTanks[i] = new FluidTank(Fluids.NONE, 4_000); + } + + this.water = new FluidTank(Fluids.WATER, 4_000); + this.lps = new FluidTank(Fluids.SPENTSTEAM, 4_000); + + this.allTanks = new FluidTank[this.inputTanks.length + this.outputTanks.length + 2]; + for(int i = 0; i < inputTanks.length; i++) this.allTanks[i] = this.inputTanks[i]; + for(int i = 0; i < outputTanks.length; i++) this.allTanks[i + this.inputTanks.length] = this.outputTanks[i]; + + this.allTanks[this.allTanks.length - 2] = this.water; + this.allTanks[this.allTanks.length - 1] = this.lps; + + this.assemblerModule = new ModuleMachineAssembler[4]; + for(int i = 0; i < 4; i++) this.assemblerModule[i] = new ModuleMachineAssembler(i, this, slots) + .itemInput(5 + i * 14).itemOutput(17 + i * 14) + .fluidInput(inputTanks[i]).fluidOutput(outputTanks[i]); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + for(int k = 0; k < 4; k++) if(i == 17 + k * 14) return true; + for(int k = 0; k < 4; k++) if(this.assemblerModule[k].isSlotClogged(i)) return true; + return false; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot == 0) return true; // battery + for(int i = 0; i < 4; i++) if(slot == 4 + i * 14 && stack.getItem() == ModItems.blueprints) return true; + if(slot >= 1 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades + for(int i = 0; i < 4; i++) if(this.assemblerModule[i].isItemValid(slot, stack)) return true; // recipe input crap + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59 + }; // ho boy, a big fucking array of hand-written values, surely this isn't gonna bite me in the ass some day + } + + @Override + public String getName() { + return "container.machineAssemblyFactory"; + } + + @Override + public void updateEntity() { + + if(maxPower <= 0) this.maxPower = 10_000_000; + + if(!worldObj.isRemote) { + + long nextMaxPower = 0; + for(int i = 0; i < 4; i++) { + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assemblerModule[i].recipe); + if(recipe != null) { + nextMaxPower += recipe.power * 100; + } + } + this.maxPower = nextMaxPower; + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000); + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + upgradeManager.checkSlots(slots, 1, 3); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos); + for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); + for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); + } + + for(DirPos pos : getCoolPos()) { + delegate.trySubscribe(worldObj, pos); + delegate.trySubscribe(water.getTankType(), worldObj, pos); + delegate.tryProvide(lps, worldObj, pos); + } + + double speed = 1D; + double pow = 1D; + + speed += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) / 3D; + speed += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + pow -= Math.min(upgradeManager.getLevel(UpgradeType.POWER), 3) * 0.25D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; + boolean markDirty = false; + + for(int i = 0; i < 4; i++) { + this.assemblerModule[i].update(speed * 2D, pow * 2D, canCool(), slots[4 + i * 7]); + this.didProcess[i] = this.assemblerModule[i].didProcess; + markDirty |= this.assemblerModule[i].markDirty; + + if(this.assemblerModule[i].didProcess) { + this.water.setFill(this.water.getFill() - 100); + this.lps.setFill(this.lps.getFill() + 100); + } + } + + if(markDirty) this.markDirty(); + + this.networkPackNT(100); + } else { + + } + } + + @Override public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.motor", xCoord, yCoord, zCoord, 0.5F, 15F, 0.75F, 20); + } + + @Override public void onChunkUnload() { + if(audio != null) { audio.stopSound(); audio = null; } + } + + @Override public void invalidate() { + super.invalidate(); + if(audio != null) { audio.stopSound(); audio = null; } + } + + public boolean canCool() { + return water.getFill() >= 100 && lps.getFill() <= lps.getMaxFill() - 100; + } + + public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new DirPos[] { + new DirPos(xCoord + 3, yCoord, zCoord - 2, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord + 0, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord + 2, Library.POS_X), + new DirPos(xCoord - 3, yCoord, zCoord - 2, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord + 0, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord + 2, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 0, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 2, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord - 2, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + 0, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + 2, yCoord, zCoord - 3, Library.NEG_Z), + + new DirPos(xCoord + dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 0 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 0 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), + + new DirPos(xCoord + dir.offsetX + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ + rot.offsetZ * 3, rot), + new DirPos(xCoord - dir.offsetX + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ + rot.offsetZ * 3, rot), + new DirPos(xCoord + dir.offsetX - rot.offsetX * 3, yCoord, zCoord + dir.offsetZ - rot.offsetZ * 3, rot.getOpposite()), + new DirPos(xCoord - dir.offsetX - rot.offsetX * 3, yCoord, zCoord - dir.offsetZ - rot.offsetZ * 3, rot.getOpposite()), + }; + } + + + public DirPos[] getCoolPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + return new DirPos[] { + new DirPos(xCoord + rot.offsetX + dir.offsetX * 3, yCoord, zCoord + rot.offsetZ + dir.offsetZ * 3, dir), + new DirPos(xCoord - rot.offsetX + dir.offsetX * 3, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 3, dir), + new DirPos(xCoord + rot.offsetX - dir.offsetX * 3, yCoord, zCoord + rot.offsetZ - dir.offsetZ * 3, dir.getOpposite()), + new DirPos(xCoord - rot.offsetX - dir.offsetX * 3, yCoord, zCoord - rot.offsetZ - dir.offsetZ * 3, dir.getOpposite()), + }; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(FluidTank tank : inputTanks) tank.serialize(buf); + for(FluidTank tank : outputTanks) tank.serialize(buf); + water.serialize(buf); + lps.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + for(boolean b : didProcess) buf.writeBoolean(b); + for(int i = 0; i < 4; i++) this.assemblerModule[i].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(FluidTank tank : inputTanks) tank.deserialize(buf); + for(FluidTank tank : outputTanks) tank.deserialize(buf); + water.deserialize(buf); + lps.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + for(int i = 0; i < 4; i++) this.didProcess[i] = buf.readBoolean(); + for(int i = 0; i < 4; i++) this.assemblerModule[i].deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < inputTanks.length; i++) this.inputTanks[i].readFromNBT(nbt, "i" + i); + for(int i = 0; i < outputTanks.length; i++) this.outputTanks[i].readFromNBT(nbt, "i" + i); + + this.water.readFromNBT(nbt, "w"); + this.lps.readFromNBT(nbt, "s"); + + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); + for(int i = 0; i < 4; i++) this.assemblerModule[i].readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < inputTanks.length; i++) this.inputTanks[i].writeToNBT(nbt, "i" + i); + for(int i = 0; i < outputTanks.length; i++) this.outputTanks[i].writeToNBT(nbt, "i" + i); + + this.water.writeToNBT(nbt, "w"); + this.lps.writeToNBT(nbt, "s"); + + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); + for(int i = 0; i < 4; i++) this.assemblerModule[i].writeToNBT(nbt); + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return inputTanks; } + @Override public FluidTank[] getSendingTanks() { return outputTanks; } + @Override public FluidTank[] getAllTanks() { return allTanks; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineAssemblyFactory(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineAssemblyFactory(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("index") && data.hasKey("selection")) { + int index = data.getInteger("index"); + String selection = data.getString("selection"); + if(index >= 0 && index < 4) { + this.assemblerModule[index].recipe = selection; + this.markChanged(); + } + } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 2, yCoord, zCoord - 2, xCoord + 3, yCoord + 3, zCoord + 3); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemical_factory)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 25) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public HashMap getValidUpgrades() { + HashMap upgrades = new HashMap<>(); + upgrades.put(UpgradeType.SPEED, 3); + upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 3); + return upgrades; + } + + public DirPos[] coolantLine; + + @Override // carelessly copy pasted from TileEntityMachineChemicalFactory + public Object getDelegateForPosition(int x, int y, int z) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + if(coolantLine == null) coolantLine = new DirPos[] { + new DirPos(xCoord + rot.offsetX + dir.offsetX * 2, yCoord, zCoord + rot.offsetZ + dir.offsetZ * 2, dir), + new DirPos(xCoord - rot.offsetX + dir.offsetX * 2, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 2, dir), + new DirPos(xCoord + rot.offsetX - dir.offsetX * 2, yCoord, zCoord + rot.offsetZ - dir.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord - rot.offsetX - dir.offsetX * 2, yCoord, zCoord - rot.offsetZ - dir.offsetZ * 2, dir.getOpposite()), + }; + + for(DirPos pos : coolantLine) if(pos.compare(x, y, z)) return this.delegate; // this actually fucking works + + return null; + } + + public class DelegateAssemblyFactoy implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2 { // scumware + + @Override public long getPower() { return TileEntityMachineAssemblyFactory.this.getPower(); } + @Override public void setPower(long power) { TileEntityMachineAssemblyFactory.this.setPower(power); } + @Override public long getMaxPower() { return TileEntityMachineAssemblyFactory.this.getMaxPower(); } + @Override public boolean isLoaded() { return TileEntityMachineAssemblyFactory.this.isLoaded(); } + + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {TileEntityMachineAssemblyFactory.this.water}; } + @Override public FluidTank[] getSendingTanks() { return new FluidTank[] {TileEntityMachineAssemblyFactory.this.lps}; } + + @Override public FluidTank[] getAllTanks() { return TileEntityMachineAssemblyFactory.this.getAllTanks(); } + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 61e8d0a92..034b98163 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -31,6 +31,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public AssemblerArm[] arms; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index 09141b42b..32c2adf2e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -145,14 +145,6 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 1, 3); - - inputTanks[0].loadTank(10, 13, slots); - inputTanks[1].loadTank(11, 14, slots); - inputTanks[2].loadTank(12, 15, slots); - - outputTanks[0].unloadTank(16, 19, slots); - outputTanks[1].unloadTank(17, 20, slots); - outputTanks[2].unloadTank(18, 21, slots); for(DirPos pos : getConPos()) { this.trySubscribe(worldObj, pos); @@ -188,6 +180,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl } } + // internal fluid sharing logic for(FluidTank in : inputTanks) if(in.getTankType() != Fluids.NONE) for(FluidTank out : outputTanks) { // up to 144 iterations, but most of them are NOP anyway if(out.getTankType() == Fluids.NONE) continue; if(out.getTankType() != in.getTankType()) continue; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java index e5bb48c88..bf796c407 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java @@ -1,10 +1,14 @@ package com.hbm.tileentity.machine.albion; +import java.util.List; + import com.hbm.inventory.container.ContainerPADetector; import com.hbm.inventory.gui.GUIPADetector; import com.hbm.inventory.recipes.ParticleAcceleratorRecipes; import com.hbm.inventory.recipes.ParticleAcceleratorRecipes.ParticleAcceleratorRecipe; +import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.machine.albion.TileEntityPASource.PAState; import com.hbm.tileentity.machine.albion.TileEntityPASource.Particle; @@ -142,6 +146,12 @@ public class TileEntityPADetector extends TileEntityCooledBase implements IGUIPr } } } + + if((recipe.output1 != null && recipe.output1.getItem() == ModItems.particle_digamma) || (recipe.output2 != null && recipe.output2.getItem() == ModItems.particle_digamma)) { + List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).expand(100, 50, 100)); + for(EntityPlayer player : players) player.triggerAchievement(MainRegistry.achOmega12); + } + particle.crash(PAState.SUCCESS); return; } diff --git a/src/main/java/com/hbm/util/AchievementHandler.java b/src/main/java/com/hbm/util/AchievementHandler.java index 8ffbb48e8..8c36ef859 100644 --- a/src/main/java/com/hbm/util/AchievementHandler.java +++ b/src/main/java/com/hbm/util/AchievementHandler.java @@ -49,6 +49,7 @@ public class AchievementHandler { craftingAchievements.put(new ComparableStack(ModBlocks.machine_difurnace_off), MainRegistry.achBlastFurnace); craftingAchievements.put(new ComparableStack(ModBlocks.machine_assembly_machine), MainRegistry.achAssembly); craftingAchievements.put(new ComparableStack(ModItems.billet_pu_mix), MainRegistry.achChicagoPile); + craftingAchievements.put(new ComparableStack(ModItems.particle_digamma), MainRegistry.achOmega12); } public static void fire(EntityPlayer player, ItemStack stack) { diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_assembly_factory.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_assembly_factory.png new file mode 100644 index 0000000000000000000000000000000000000000..73a306fdb3039b2a7186a7ebbcc787ec6f13dc1d GIT binary patch literal 4662 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/assembly_factory.png b/src/main/resources/assets/hbm/textures/models/machines/assembly_factory.png index b98f8d14af08a10852b1d035ab44b0bf18b82637..908603da4f24926c33802da5dc5e7934b3206de7 100644 GIT binary patch delta 4910 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 a4|#17LiP&fdo^5~V|d*RReII=?*9Nv)ieqK From 4320071a41621efafefb0ad005ffa0078d8a8983 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 9 Sep 2025 16:58:17 +0200 Subject: [PATCH 08/26] sesbian lex --- .../tileentity/RenderAssemblyFactory.java | 102 +++++++++++++++++- .../TileEntityMachineAssemblyFactory.java | 53 +++++++++ .../models/machines/assembly_factory.png | Bin 4916 -> 5024 bytes 3 files changed, 154 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java index 8c6b0d750..25cf3f70a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java @@ -6,6 +6,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineAssemblyFactory; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; @@ -29,8 +30,107 @@ public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; } + TileEntityMachineAssemblyFactory assemfac = (TileEntityMachineAssemblyFactory) tileEntity; + bindTexture(ResourceManager.assembly_factory_tex); - ResourceManager.assembly_factory.renderAll(); + ResourceManager.assembly_factory.renderPart("Base"); + if(assemfac.frame) ResourceManager.assembly_factory.renderPart("Frame"); + + double[] arm1 = new double[] {-30, -30, -30, -0.125}; + double[] arm2 = new double[] {-30, -30, -30, -0.125}; + double blade = (System.currentTimeMillis() / 1) % 360D; + + GL11.glPushMatrix(); { + ResourceManager.assembly_factory.renderPart("Slider1"); + + GL11.glTranslated(0, 1.625, -0.9375); + GL11.glRotated(arm1[0], 1, 0, 0); + GL11.glTranslated(0, -1.625, 0.9375); + ResourceManager.assembly_factory.renderPart("ArmLower1"); + + GL11.glTranslated(0, 2.375, -0.9375); + GL11.glRotated(arm1[1], 1, 0, 0); + GL11.glTranslated(0, -2.375, 0.9375); + ResourceManager.assembly_factory.renderPart("ArmUpper1"); + + GL11.glTranslated(0, 2.375, -0.4375); + GL11.glRotated(arm1[2], 1, 0, 0); + GL11.glTranslated(0, -2.375, 0.4375); + ResourceManager.assembly_factory.renderPart("Head1"); + GL11.glTranslated(0, arm1[3], 0); + ResourceManager.assembly_factory.renderPart("Striker1"); + } GL11.glPopMatrix(); + + GL11.glPushMatrix(); { + ResourceManager.assembly_factory.renderPart("Slider2"); + + GL11.glTranslated(0, 1.625, 0.9375); + GL11.glRotated(-arm2[0], 1, 0, 0); + GL11.glTranslated(0, -1.625, -0.9375); + ResourceManager.assembly_factory.renderPart("ArmLower2"); + + GL11.glTranslated(0, 2.375, 0.9375); + GL11.glRotated(-arm2[1], 1, 0, 0); + GL11.glTranslated(0, -2.375, -0.9375); + ResourceManager.assembly_factory.renderPart("ArmUpper2"); + + GL11.glTranslated(0, 2.375, 0.4375); + GL11.glRotated(-arm2[2], 1, 0, 0); + GL11.glTranslated(0, -2.375, -0.4375); + ResourceManager.assembly_factory.renderPart("Head2"); + GL11.glTranslated(0, arm2[3], 0); + ResourceManager.assembly_factory.renderPart("Striker2"); + GL11.glTranslated(0, 1.625, 0.3125); + GL11.glRotated(-blade, 1, 0, 0); + GL11.glTranslated(0, -1.625, -0.3125); + ResourceManager.assembly_factory.renderPart("Blade2"); + } GL11.glPopMatrix(); + + GL11.glPushMatrix(); { + ResourceManager.assembly_factory.renderPart("Slider3"); + + GL11.glTranslated(0, 1.625, 0.9375); + GL11.glRotated(-arm2[0], 1, 0, 0); + GL11.glTranslated(0, -1.625, -0.9375); + ResourceManager.assembly_factory.renderPart("ArmLower3"); + + GL11.glTranslated(0, 2.375, 0.9375); + GL11.glRotated(-arm2[1], 1, 0, 0); + GL11.glTranslated(0, -2.375, -0.9375); + ResourceManager.assembly_factory.renderPart("ArmUpper3"); + + GL11.glTranslated(0, 2.375, 0.4375); + GL11.glRotated(-arm2[2], 1, 0, 0); + GL11.glTranslated(0, -2.375, -0.4375); + ResourceManager.assembly_factory.renderPart("Head3"); + GL11.glTranslated(0, arm2[3], 0); + ResourceManager.assembly_factory.renderPart("Striker3"); + } GL11.glPopMatrix(); + + GL11.glPushMatrix(); { + ResourceManager.assembly_factory.renderPart("Slider4"); + + GL11.glTranslated(0, 1.625, -0.9375); + GL11.glRotated(arm1[0], 1, 0, 0); + GL11.glTranslated(0, -1.625, 0.9375); + ResourceManager.assembly_factory.renderPart("ArmLower4"); + + GL11.glTranslated(0, 2.375, -0.9375); + GL11.glRotated(arm1[1], 1, 0, 0); + GL11.glTranslated(0, -2.375, 0.9375); + ResourceManager.assembly_factory.renderPart("ArmUpper4"); + + GL11.glTranslated(0, 2.375, -0.4375); + GL11.glRotated(arm1[2], 1, 0, 0); + GL11.glTranslated(0, -2.375, 0.4375); + ResourceManager.assembly_factory.renderPart("Head4"); + GL11.glTranslated(0, arm1[3], 0); + ResourceManager.assembly_factory.renderPart("Striker4"); + GL11.glTranslated(0, 1.625, -0.3125); + GL11.glRotated(blade, 1, 0, 0); + GL11.glTranslated(0, -1.625, 0.3125); + ResourceManager.assembly_factory.renderPart("Blade4"); + } GL11.glPopMatrix(); GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java index e16572586..a978e5536 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import java.util.HashMap; import java.util.List; +import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; @@ -24,6 +25,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.TileEntityProxyDyn.IProxyDelegateProvider; +import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine.AssemblerArm.ArmActionState; import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; @@ -181,6 +183,9 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl this.networkPackNT(100); } else { + if(worldObj.getTotalWorldTime() % 20 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); + } } } @@ -404,4 +409,52 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl @Override public FluidTank[] getAllTanks() { return TileEntityMachineAssemblyFactory.this.getAllTanks(); } } + + public static class TragicYuri { + + } + + public static class AssemblerArm { + + public double[] angles = new double[4]; + public double[] prevAngles = new double[4]; + public double[] targetAngles = new double[4]; + public double[] speed = new double[4]; + public double sawAngle; + public double prevSawAngle; + + Random rand = new Random(); + ArmActionState state = ArmActionState.ASSUME_POSITION; + int actionDelay = 0; + boolean saw = false; + + public AssemblerArm() { + this.resetSpeed(); + } + + private void resetSpeed() { + speed[0] = 15; //Pivot + speed[1] = 15; //Arm + speed[2] = 15; //Piston + speed[3] = 0.5; //Striker + } + + public double[] getPositions(float interp) { + return new double[] { + BobMathUtil.interp(this.prevAngles[0], this.angles[0], interp), + BobMathUtil.interp(this.prevAngles[1], this.angles[1], interp), + BobMathUtil.interp(this.prevAngles[2], this.angles[2], interp), + BobMathUtil.interp(this.prevAngles[3], this.angles[3], interp), + BobMathUtil.interp(this.prevSawAngle, this.sawAngle, interp) + }; + } + } + + public static enum YuriState { + WORKING, RETIRING, SLIDING + } + + public static enum ArmState { + REPOSITION, EXTEND, CUT, RETRACT, RETIRE + } } diff --git a/src/main/resources/assets/hbm/textures/models/machines/assembly_factory.png b/src/main/resources/assets/hbm/textures/models/machines/assembly_factory.png index 908603da4f24926c33802da5dc5e7934b3206de7..c60feff7b88469ff7740c7ef332a5f61e8bbb6f1 100644 GIT binary patch literal 5024 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 WVV2vB+5rISr>kY8S$^;F>;D7i;-d`! From 4805dd800c4417468d6f0157d61f593ede1a3562 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 10 Sep 2025 16:30:13 +0200 Subject: [PATCH 09/26] the slow dance (it's actually rather fast) --- .../tileentity/RenderAssemblyFactory.java | 97 ++++-- .../TileEntityMachineAssemblyFactory.java | 283 ++++++++++++++++-- 2 files changed, 329 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java index 25cf3f70a..a303ef057 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java @@ -4,17 +4,28 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; import com.hbm.tileentity.machine.TileEntityMachineAssemblyFactory; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.item.EntityItem; import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.client.IItemRenderer; public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements IItemRendererProvider { + + public static EntityItem dummy; @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { @@ -36,25 +47,29 @@ public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements ResourceManager.assembly_factory.renderPart("Base"); if(assemfac.frame) ResourceManager.assembly_factory.renderPart("Frame"); - double[] arm1 = new double[] {-30, -30, -30, -0.125}; - double[] arm2 = new double[] {-30, -30, -30, -0.125}; - double blade = (System.currentTimeMillis() / 1) % 360D; + double slide1 = assemfac.animations[0].getSlider(interp); + double slide2 = assemfac.animations[1].getSlider(interp); + double[] arm1 = assemfac.animations[0].striker.getPositions(interp); + double[] arm2 = assemfac.animations[0].saw.getPositions(interp); + double[] arm3 = assemfac.animations[1].striker.getPositions(interp); + double[] arm4 = assemfac.animations[1].saw.getPositions(interp); GL11.glPushMatrix(); { + GL11.glTranslated(0.5 - slide1, 0, 0); ResourceManager.assembly_factory.renderPart("Slider1"); GL11.glTranslated(0, 1.625, -0.9375); - GL11.glRotated(arm1[0], 1, 0, 0); + GL11.glRotated(-arm1[0], 1, 0, 0); GL11.glTranslated(0, -1.625, 0.9375); ResourceManager.assembly_factory.renderPart("ArmLower1"); GL11.glTranslated(0, 2.375, -0.9375); - GL11.glRotated(arm1[1], 1, 0, 0); + GL11.glRotated(-arm1[1], 1, 0, 0); GL11.glTranslated(0, -2.375, 0.9375); ResourceManager.assembly_factory.renderPart("ArmUpper1"); GL11.glTranslated(0, 2.375, -0.4375); - GL11.glRotated(arm1[2], 1, 0, 0); + GL11.glRotated(-arm1[2], 1, 0, 0); GL11.glTranslated(0, -2.375, 0.4375); ResourceManager.assembly_factory.renderPart("Head1"); GL11.glTranslated(0, arm1[3], 0); @@ -62,75 +77,119 @@ public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements } GL11.glPopMatrix(); GL11.glPushMatrix(); { + GL11.glTranslated(-0.5 + slide1, 0, 0); ResourceManager.assembly_factory.renderPart("Slider2"); GL11.glTranslated(0, 1.625, 0.9375); - GL11.glRotated(-arm2[0], 1, 0, 0); + GL11.glRotated(arm2[0], 1, 0, 0); GL11.glTranslated(0, -1.625, -0.9375); ResourceManager.assembly_factory.renderPart("ArmLower2"); GL11.glTranslated(0, 2.375, 0.9375); - GL11.glRotated(-arm2[1], 1, 0, 0); + GL11.glRotated(arm2[1], 1, 0, 0); GL11.glTranslated(0, -2.375, -0.9375); ResourceManager.assembly_factory.renderPart("ArmUpper2"); GL11.glTranslated(0, 2.375, 0.4375); - GL11.glRotated(-arm2[2], 1, 0, 0); + GL11.glRotated(arm2[2], 1, 0, 0); GL11.glTranslated(0, -2.375, -0.4375); ResourceManager.assembly_factory.renderPart("Head2"); GL11.glTranslated(0, arm2[3], 0); ResourceManager.assembly_factory.renderPart("Striker2"); GL11.glTranslated(0, 1.625, 0.3125); - GL11.glRotated(-blade, 1, 0, 0); + GL11.glRotated(-arm2[4], 1, 0, 0); GL11.glTranslated(0, -1.625, -0.3125); ResourceManager.assembly_factory.renderPart("Blade2"); } GL11.glPopMatrix(); GL11.glPushMatrix(); { + GL11.glTranslated(-0.5 + slide2, 0, 0); ResourceManager.assembly_factory.renderPart("Slider3"); GL11.glTranslated(0, 1.625, 0.9375); - GL11.glRotated(-arm2[0], 1, 0, 0); + GL11.glRotated(arm3[0], 1, 0, 0); GL11.glTranslated(0, -1.625, -0.9375); ResourceManager.assembly_factory.renderPart("ArmLower3"); GL11.glTranslated(0, 2.375, 0.9375); - GL11.glRotated(-arm2[1], 1, 0, 0); + GL11.glRotated(arm3[1], 1, 0, 0); GL11.glTranslated(0, -2.375, -0.9375); ResourceManager.assembly_factory.renderPart("ArmUpper3"); GL11.glTranslated(0, 2.375, 0.4375); - GL11.glRotated(-arm2[2], 1, 0, 0); + GL11.glRotated(arm3[2], 1, 0, 0); GL11.glTranslated(0, -2.375, -0.4375); ResourceManager.assembly_factory.renderPart("Head3"); - GL11.glTranslated(0, arm2[3], 0); + GL11.glTranslated(0, arm3[3], 0); ResourceManager.assembly_factory.renderPart("Striker3"); } GL11.glPopMatrix(); GL11.glPushMatrix(); { + GL11.glTranslated(0.5 - slide2, 0, 0); ResourceManager.assembly_factory.renderPart("Slider4"); GL11.glTranslated(0, 1.625, -0.9375); - GL11.glRotated(arm1[0], 1, 0, 0); + GL11.glRotated(-arm4[0], 1, 0, 0); GL11.glTranslated(0, -1.625, 0.9375); ResourceManager.assembly_factory.renderPart("ArmLower4"); GL11.glTranslated(0, 2.375, -0.9375); - GL11.glRotated(arm1[1], 1, 0, 0); + GL11.glRotated(-arm4[1], 1, 0, 0); GL11.glTranslated(0, -2.375, 0.9375); ResourceManager.assembly_factory.renderPart("ArmUpper4"); GL11.glTranslated(0, 2.375, -0.4375); - GL11.glRotated(arm1[2], 1, 0, 0); + GL11.glRotated(-arm4[2], 1, 0, 0); GL11.glTranslated(0, -2.375, 0.4375); ResourceManager.assembly_factory.renderPart("Head4"); - GL11.glTranslated(0, arm1[3], 0); + GL11.glTranslated(0, arm4[3], 0); ResourceManager.assembly_factory.renderPart("Striker4"); GL11.glTranslated(0, 1.625, -0.3125); - GL11.glRotated(blade, 1, 0, 0); + GL11.glRotated(-arm4[4], 1, 0, 0); GL11.glTranslated(0, -1.625, 0.3125); ResourceManager.assembly_factory.renderPart("Blade4"); } GL11.glPopMatrix(); + + if(MainRegistry.proxy.me().getDistanceSq(tileEntity.xCoord + 0.5, tileEntity.yCoord + 1, tileEntity.zCoord + 0.5) < 35 * 35) { + + for(int i = 0; i < 4; i++) { + + GL11.glPushMatrix(); + GL11.glTranslated(1.5 - i, 0, 0); + + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, 1.0625, 0); + + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assemfac.assemblerModule[i].recipe); + if(recipe != null) { + ItemStack stack = recipe.getIcon(); + stack.stackSize = 1; + + if(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock) { + if(RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType())) { + GL11.glTranslated(0, -0.0625, 0); + } else { + GL11.glTranslated(0, -0.125, 0); + GL11.glScaled(0.5, 0.5, 0.5); + } + } else { + GL11.glRotated(-90, 1, 0, 0); + GL11.glTranslated(0, -0.25, 0); + } + + GL11.glScaled(1.25, 1.25, 1.25); + + if(dummy == null || dummy.worldObj != tileEntity.getWorldObj()) dummy = new EntityItem(tileEntity.getWorldObj(), 0, 0, 0, stack); + dummy.setEntityItemStack(stack); + dummy.hoverStart = 0.0F; + + RenderItem.renderInFrame = true; + RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + RenderItem.renderInFrame = false; + } + GL11.glPopMatrix(); + } + } GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java index a978e5536..0133331ac 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -25,7 +25,6 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.TileEntityProxyDyn.IProxyDelegateProvider; -import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine.AssemblerArm.ArmActionState; import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; @@ -61,6 +60,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl public boolean frame = false; private AudioWrapper audio; + public TragicYuri[] animations; public ModuleMachineAssembler[] assemblerModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -70,6 +70,9 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl public TileEntityMachineAssemblyFactory() { super(60); + animations = new TragicYuri[2]; + for(int i = 0; i < animations.length; i++) animations[i] = new TragicYuri(); + this.inputTanks = new FluidTank[4]; this.outputTanks = new FluidTank[4]; for(int i = 0; i < 4; i++) { @@ -183,6 +186,8 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl this.networkPackNT(100); } else { + for(TragicYuri animation : animations) animation.update(true || didProcess[0] ||didProcess[1] ||didProcess[2] ||didProcess[3]); + if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); } @@ -410,51 +415,265 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl @Override public FluidTank[] getAllTanks() { return TileEntityMachineAssemblyFactory.this.getAllTanks(); } } - public static class TragicYuri { + /** + * Carriage consisting of two arms - a striker and a saw + * Movement of both arms is inverted, one pedestal can only be serviced by one arm at a time + * + * @author hbm + */ + public class TragicYuri { - } - - public static class AssemblerArm { - - public double[] angles = new double[4]; - public double[] prevAngles = new double[4]; - public double[] targetAngles = new double[4]; - public double[] speed = new double[4]; - public double sawAngle; - public double prevSawAngle; + public AssemblerArm striker; + public AssemblerArm saw; Random rand = new Random(); - ArmActionState state = ArmActionState.ASSUME_POSITION; - int actionDelay = 0; - boolean saw = false; + YuriState state = YuriState.WORKING; + double slider = 0; + double prevSlider = 0; + boolean direction = false; + int timeUntilReposition; - public AssemblerArm() { - this.resetSpeed(); + public TragicYuri() { + striker = new AssemblerArm(); + saw = new AssemblerArm().yepThatsASaw(); + timeUntilReposition = 200; } - private void resetSpeed() { - speed[0] = 15; //Pivot - speed[1] = 15; //Arm - speed[2] = 15; //Piston - speed[3] = 0.5; //Striker + public void update(boolean working) { + this.prevSlider = this.slider; + + if(working) switch(state) { + case WORKING: { + timeUntilReposition--; + if(timeUntilReposition <= 0) { + state = YuriState.RETIRING; + } + } break; + case RETIRING: { + if(striker.state == ArmState.WAIT && saw.state == ArmState.WAIT) { // only progress as soon as both arms are done moving + state = YuriState.SLIDING; + direction = !direction; + if(!muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStart", getVolume(0.25F), 1.25F + worldObj.rand.nextFloat() * 0.25F); + } + } break; + case SLIDING: { + double sliderSpeed = 1D / 20D; // 20 ticks for transit + if(direction) { + slider += sliderSpeed; + if(slider >= 1) { + slider = 1; + state = YuriState.WORKING; + } + } else { + slider -= sliderSpeed; + if(slider <= 0) { + slider = 0; + state = YuriState.WORKING; + } + } + if(state == YuriState.WORKING) timeUntilReposition = 140 + rand.nextInt(161); // 7 to 15 seconds + } break; + } + + striker.updateArm(working); + saw.updateArm(working); } - public double[] getPositions(float interp) { - return new double[] { - BobMathUtil.interp(this.prevAngles[0], this.angles[0], interp), - BobMathUtil.interp(this.prevAngles[1], this.angles[1], interp), - BobMathUtil.interp(this.prevAngles[2], this.angles[2], interp), - BobMathUtil.interp(this.prevAngles[3], this.angles[3], interp), - BobMathUtil.interp(this.prevSawAngle, this.sawAngle, interp) - }; + public double getSlider(float interp) { + return this.prevSlider + (this.slider - this.prevSlider) * interp; + } + + // there's a ton of way to make this more optimized/readable/professional/scrungular but i don't care i am happy this crap works at all + public class AssemblerArm { // more fucking nesting!!!11 + + public double[] angles = new double[4]; + public double[] prevAngles = new double[4]; + public double[] targetAngles = new double[4]; + public double[] speed = new double[4]; + public double sawAngle; + public double prevSawAngle; + + ArmState state = ArmState.REPOSITION; + int actionDelay = 0; + boolean saw = false; + + public AssemblerArm() { + this.resetSpeed(); + this.chooseNewArmPoistion(); + } + + public AssemblerArm yepThatsASaw() { this.saw = true; this.chooseNewArmPoistion(); return this; } + + private void resetSpeed() { + speed[0] = 15; //Pivot + speed[1] = 15; //Arm + speed[2] = 15; //Piston + speed[3] = saw ? 0.125 : 0.5; //Striker + } + + public void updateArm(boolean working) { + resetSpeed(); + + for(int i = 0; i < angles.length; i++) { + prevAngles[i] = angles[i]; + } + + prevSawAngle = sawAngle; + + if(!working) return; + + if(state == ArmState.CUT || state == ArmState.EXTEND) { + this.sawAngle += 45D; + } + + if(actionDelay > 0) { + actionDelay--; + return; + } + + switch(state) { + // Move. If done moving, set a delay and progress to EXTEND + case REPOSITION: { + if(move()) { + actionDelay = 2; + state = ArmState.EXTEND; + targetAngles[3] = saw ? -0.375D : -0.75D; + } + } break; + case EXTEND: + if(move()) { + + if(saw) { + state = ArmState.CUT; + targetAngles[2] = -targetAngles[2]; + } else { + state = ArmState.RETRACT; + targetAngles[3] = 0D; + if(!muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStrike", getVolume(0.5F), 1F); + } + } + break; + case CUT: { + speed[2] = Math.abs(targetAngles[2] / 20D); + if(move()) { + state = ArmState.RETRACT; + targetAngles[3] = 0D; + } + } break; + case RETRACT: + if(move()) { + actionDelay = 2 + rand.nextInt(5); + chooseNewArmPoistion(); + state = TragicYuri.this.state == YuriState.RETIRING ? ArmState.RETIRE : ArmState.REPOSITION; + } + break; + case RETIRE: { + this.targetAngles[0] = 0; + this.targetAngles[1] = 0; + this.targetAngles[2] = 0; + this.targetAngles[3] = 0; + + if(move()) { + actionDelay = 2 + rand.nextInt(5); + chooseNewArmPoistion(); + state = ArmState.WAIT; + } + } break; + case WAIT: { + if(TragicYuri.this.state == YuriState.WORKING) this.state = ArmState.REPOSITION; + } break; + } + } + + public void chooseNewArmPoistion() { + + double[][] pos = !saw ? new double[][] { + // striker + {10, 10, -10}, + {15, 15, -15}, + {25, 10, -15}, + {30, 0, -10}, + {-10, 10, 0}, + {-20, 30, -15} + } : new double[][] { + // saw + {-15, 15, -10}, + {-15, 15, -15}, + {-15, 15, 10}, + {-15, 15, 15}, + {-15, 15, 2}, + {-15, 15, -2} + }; + + int chosen = rand.nextInt(pos.length); + this.targetAngles[0] = pos[chosen][0]; + this.targetAngles[1] = pos[chosen][1]; + this.targetAngles[2] = pos[chosen][2]; + } + + private boolean move() { + boolean didMove = false; + + for(int i = 0; i < angles.length; i++) { + if(angles[i] == targetAngles[i]) + continue; + + didMove = true; + + double angle = angles[i]; + double target = targetAngles[i]; + double turn = speed[i]; + double delta = Math.abs(angle - target); + + if(delta <= turn) { + angles[i] = targetAngles[i]; + continue; + } + + if(angle < target) { + angles[i] += turn; + } else { + angles[i] -= turn; + } + } + + return !didMove; + } + + public double[] getPositions(float interp) { + return new double[] { + BobMathUtil.interp(this.prevAngles[0], this.angles[0], interp), + BobMathUtil.interp(this.prevAngles[1], this.angles[1], interp), + BobMathUtil.interp(this.prevAngles[2], this.angles[2], interp), + BobMathUtil.interp(this.prevAngles[3], this.angles[3], interp), + BobMathUtil.interp(this.prevSawAngle, this.sawAngle, interp) + }; + } } } + /* + * Arms cycle through REPOSITION -> EXTEND -> CUT (if saw) -> RETRACT + * If transit is planned, the carriage's state will change to RETIRING + * If the carriage is RETIRING, each arm will enter RETIRE state after RETRACT + * Once the arm has returned to null position, it changes to WAIT + * If both arms WAIT, the carriage switches to SLIDING + * Once transit is done, carriage returns to WORKING + * If the carriage is WORKING, any arm that is in the WAIT state will return to REPOSITION + */ + public static enum YuriState { - WORKING, RETIRING, SLIDING + WORKING, + RETIRING, // waiting for arms to enter WAITING state + SLIDING // transit to next position } public static enum ArmState { - REPOSITION, EXTEND, CUT, RETRACT, RETIRE + REPOSITION, + EXTEND, + CUT, + RETRACT, + RETIRE, // return to null position for carriage transit + WAIT // either waiting for or in the middle of carriage transit } } From 4a4606e6ed877bf80558f96bd3177dcad5b54cf9 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 11 Sep 2025 22:57:20 +0200 Subject: [PATCH 10/26] the sludge --- .../TileEntityMachineAssemblyFactory.java | 19 ++++++++++++++++++ src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/block/assemblerCut.ogg | Bin 0 -> 33151 bytes 3 files changed, 20 insertions(+) create mode 100644 src/main/resources/assets/hbm/sounds/block/assemblerCut.ogg diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java index 0133331ac..f7318d808 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -186,6 +186,24 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl this.networkPackNT(100); } else { + if(MainRegistry.proxy.me().getDistance(xCoord , yCoord, zCoord) < 50) { + if(audio == null) { + audio = createAudioLoop(); + audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + } + audio.keepAlive(); + audio.updatePitch(0.75F); + audio.updateVolume(this.getVolume(0.5F)); + + } else { + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + for(TragicYuri animation : animations) animation.update(true || didProcess[0] ||didProcess[1] ||didProcess[2] ||didProcess[3]); if(worldObj.getTotalWorldTime() % 20 == 0) { @@ -546,6 +564,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl if(saw) { state = ArmState.CUT; targetAngles[2] = -targetAngles[2]; + if(!muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerCut", getVolume(0.5F), 1F + rand.nextFloat() * 0.25F); } else { state = ArmState.RETRACT; targetAngles[3] = 0D; diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index f9d9b867d..631077be3 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -72,6 +72,7 @@ "block.assemblerStrike": {"category": "block", "sounds": ["block/assemblerStrike1", "block/assemblerStrike2"]}, "block.assemblerStart": {"category": "block", "sounds": [{"name": "block/assemblerStart", "stream": false}]}, "block.assemblerStop": {"category": "block", "sounds": [{"name": "block/assemblerStop", "stream": false}]}, + "block.assemblerCut": {"category": "block", "sounds": [{"name": "block/assemblerCut", "stream": false}]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerCut.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerCut.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bc22e8bfbcdaf52f6bc7467c2ad03ff8db77c960 GIT binary patch literal 33151 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 R?r}G(C*l@u8x Date: Fri, 12 Sep 2025 14:39:38 +1000 Subject: [PATCH 11/26] improve IAnimatedItem and move existing item animations out of the ClientProxy monolith --- .../java/com/hbm/items/IAnimatedItem.java | 23 ++++- .../java/com/hbm/items/tool/ItemBoltgun.java | 18 ++-- .../java/com/hbm/items/tool/ItemChainsaw.java | 54 ++++++++-- .../com/hbm/items/weapon/ItemCrucible.java | 68 +++++++++++-- src/main/java/com/hbm/main/ClientProxy.java | 99 ------------------- .../packet/toclient/GunAnimationPacket.java | 43 +++++--- .../com/hbm/render/anim/HbmAnimations.java | 51 +++++----- 7 files changed, 181 insertions(+), 175 deletions(-) diff --git a/src/main/java/com/hbm/items/IAnimatedItem.java b/src/main/java/com/hbm/items/IAnimatedItem.java index e92ffa459..01de00001 100644 --- a/src/main/java/com/hbm/items/IAnimatedItem.java +++ b/src/main/java/com/hbm/items/IAnimatedItem.java @@ -1,14 +1,31 @@ package com.hbm.items; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.HbmAnimations.AnimType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; public interface IAnimatedItem { - @SideOnly(Side.CLIENT) - public BusAnimation getAnimation(NBTTagCompound data, ItemStack stack); + // Fetch the animation for a given type + public BusAnimation getAnimation(AnimType type, ItemStack stack); + + // Run the swing animation + public default void playAnimation(EntityPlayer player) { + playAnimation(player, AnimType.CYCLE); + } + + // Run a specified animation + public default void playAnimation(EntityPlayer player, AnimType type) { + if(player instanceof EntityPlayerMP) { + PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(type.ordinal(), 0, 0), (EntityPlayerMP) player); + } + } + } diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index ef85ff820..94eea2823 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -9,6 +9,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import api.hbm.block.IToolable; @@ -19,7 +20,6 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -73,13 +73,10 @@ public class ItemBoltgun extends Item implements IAnimatedItem { data.setFloat("size", 1F); data.setByte("count", (byte)1); PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, entity.posX, entity.posY + entity.height / 2 - entity.yOffset, entity.posZ), new TargetPoint(world.provider.dimensionId, entity.posX, entity.posY, entity.posZ, 50)); - } else { - // doing this on the client outright removes the packet delay and makes the animation silky-smooth - NBTTagCompound d0 = new NBTTagCompound(); - d0.setString("type", "anim"); - d0.setString("mode", "generic"); - MainRegistry.proxy.effectNT(d0); + + playAnimation(player); } + return true; } } @@ -110,10 +107,7 @@ public class ItemBoltgun extends Item implements IAnimatedItem { data.setByte("count", (byte)1); PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, x + fX + dir.offsetX * off, y + fY + dir.offsetY * off, z + fZ + dir.offsetZ * off), new TargetPoint(world.provider.dimensionId, x, y, z, 50)); - NBTTagCompound d0 = new NBTTagCompound(); - d0.setString("type", "anim"); - d0.setString("mode", "generic"); - PacketThreading.createSendToThreadedPacket(new AuxParticlePacketNT(d0, 0, 0, 0), (EntityPlayerMP) player); + playAnimation(player); } return false; @@ -124,7 +118,7 @@ public class ItemBoltgun extends Item implements IAnimatedItem { @Override @SideOnly(Side.CLIENT) - public BusAnimation getAnimation(NBTTagCompound data, ItemStack stack) { + public BusAnimation getAnimation(AnimType type, ItemStack stack) { return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence() .addPos(1, 0, 1, 50) diff --git a/src/main/java/com/hbm/items/tool/ItemChainsaw.java b/src/main/java/com/hbm/items/tool/ItemChainsaw.java index 32a53c960..c80fba942 100644 --- a/src/main/java/com/hbm/items/tool/ItemChainsaw.java +++ b/src/main/java/com/hbm/items/tool/ItemChainsaw.java @@ -1,16 +1,19 @@ package com.hbm.items.tool; -import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.FluidType; +import com.hbm.items.IAnimatedItem; import com.hbm.items.IHeldSoundProvider; -import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.HbmAnimations; +import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundProvider { +public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundProvider, IAnimatedItem { public ItemChainsaw(float damage, double movement, ToolMaterial material, EnumToolType type, int maxFuel, int consumption, int fillRate, FluidType... acceptedFuels) { super(damage, movement, material, type, maxFuel, consumption, fillRate, acceptedFuels); @@ -25,11 +28,46 @@ public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundPro if(stack.getItemDamage() >= stack.getMaxDamage()) return false; - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("type", "anim"); - nbt.setString("mode", "sSwing"); - PacketThreading.createSendToThreadedPacket(new AuxParticlePacketNT(nbt, 0, 0, 0), (EntityPlayerMP)entityLiving); + playAnimation((EntityPlayer) entityLiving); return false; } + + @Override + public BusAnimation getAnimation(AnimType type, ItemStack stack) { + int forward = 150; + int sideways = 100; + int retire = 200; + + if(HbmAnimations.getRelevantAnim() == null) { + + return new BusAnimation() + .addBus("SWING_ROT", new BusAnimationSequence() + .addPos(0, 0, 90, forward) + .addPos(45, 0, 90, sideways) + .addPos(0, 0, 0, retire)) + .addBus("SWING_TRANS", new BusAnimationSequence() + .addPos(0, 0, 3, forward) + .addPos(2, 0, 2, sideways) + .addPos(0, 0, 0, retire)); + } else { + + double[] rot = HbmAnimations.getRelevantTransformation("SWING_ROT"); + double[] trans = HbmAnimations.getRelevantTransformation("SWING_TRANS"); + + if(System.currentTimeMillis() - HbmAnimations.getRelevantAnim().startMillis < 50) return null; + + return new BusAnimation() + .addBus("SWING_ROT", new BusAnimationSequence() + .addPos(rot[0], rot[1], rot[2], 0) + .addPos(0, 0, 90, forward) + .addPos(45, 0, 90, sideways) + .addPos(0, 0, 0, retire)) + .addBus("SWING_TRANS", new BusAnimationSequence() + .addPos(trans[0], trans[1], trans[2], 0) + .addPos(0, 0, 3, forward) + .addPos(2, 0, 2, sideways) + .addPos(0, 0, 0, retire)); + } + } } diff --git a/src/main/java/com/hbm/items/weapon/ItemCrucible.java b/src/main/java/com/hbm/items/weapon/ItemCrucible.java index d077dd131..e712e1faf 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCrucible.java +++ b/src/main/java/com/hbm/items/weapon/ItemCrucible.java @@ -1,19 +1,29 @@ package com.hbm.items.weapon; import java.util.List; +import java.util.Random; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.hbm.handler.threading.PacketThreading; +import com.hbm.items.IAnimatedItem; import com.hbm.items.IEquipReceiver; +import com.hbm.items.ModItems; import com.hbm.items.tool.ItemSwordAbility; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.HbmAnimations; +import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.render.anim.HbmAnimations.Animation; import com.hbm.util.ShadyUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; @@ -25,9 +35,10 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; -public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver { +public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IAnimatedItem { public ItemCrucible(float damage, double movement, ToolMaterial material) { super(damage, movement, material); @@ -44,10 +55,7 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver { World world = player.worldObj; world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.cDeploy", 1.0F, 1.0F); - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("type", "anim"); - nbt.setString("mode", "crucible"); - PacketThreading.createSendToThreadedPacket(new AuxParticlePacketNT(nbt, 0, 0, 0), (EntityPlayerMP)player); + playAnimation(player, AnimType.EQUIP); } } @@ -64,10 +72,7 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver { if(stack.getItemDamage() >= stack.getMaxDamage()) return false; - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("type", "anim"); - nbt.setString("mode", "cSwing"); - PacketThreading.createSendToThreadedPacket(new AuxParticlePacketNT(nbt, 0, 0, 0), (EntityPlayerMP)entityLiving); + playAnimation((EntityPlayerMP)entityLiving, AnimType.CYCLE); return false; } @@ -132,4 +137,49 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver { list.add(charge); } + + @Override + public BusAnimation getAnimation(AnimType type, ItemStack stack) { + /* crucible deploy */ + if(type == AnimType.EQUIP) { + + return new BusAnimation() + .addBus("GUARD_ROT", new BusAnimationSequence() + .addPos(90, 0, 1, 0) + .addPos(90, 0, 1, 800) + .addPos(0, 0, 1, 50)); + } + + /* crucible swing */ + if(type == AnimType.CYCLE) { + + if(HbmAnimations.getRelevantTransformation("SWING_ROT")[0] == 0) { + + Random rand = Minecraft.getMinecraft().theWorld.rand; + + int offset = rand.nextInt(80) - 20; + + playSwing(0.8F + rand.nextFloat() * 0.2F); + + return new BusAnimation() + .addBus("SWING_ROT", new BusAnimationSequence() + .addPos(90 - offset, 90 - offset, 35, 75) + .addPos(90 + offset, 90 - offset, -45, 150) + .addPos(0, 0, 0, 500)) + .addBus("SWING_TRANS", new BusAnimationSequence() + .addPos(-3, 0, 0, 75) + .addPos(8, 0, 0, 150) + .addPos(0, 0, 0, 500)); + } + } + + return null; + } + + // could do this better, but this preserves existing behaviour the closest with the least amount + // of effort, without crashing servers (I'm learning my lesson :o_ ) + @SideOnly(Side.CLIENT) + private void playSwing(float pitchProbablyIDontFuckingCare) { + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:weapon.cSwing"), pitchProbablyIDontFuckingCare)); + } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 711e5cbd6..5ba1e2fc3 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1787,105 +1787,6 @@ public class ClientProxy extends ServerProxy { Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleDeadLeaf(man, world, x, y, z)); } - if("anim".equals(type)) { - - String mode = data.getString("mode"); - - /* crucible deploy */ - if("crucible".equals(mode) && player.getHeldItem() != null) { - - BusAnimation animation = new BusAnimation() - .addBus("GUARD_ROT", new BusAnimationSequence() - .addPos(90, 0, 1, 0) - .addPos(90, 0, 1, 800) - .addPos(0, 0, 1, 50)); - - String id = ModItems.crucible.getUnlocalizedName(); - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(id, System.currentTimeMillis(), animation, null); - } - - /* crucible swing */ - if("cSwing".equals(mode)) { - - if(HbmAnimations.getRelevantTransformation("SWING_ROT")[0] == 0) { - - int offset = rand.nextInt(80) - 20; - - BusAnimation animation = new BusAnimation() - .addBus("SWING_ROT", new BusAnimationSequence() - .addPos(90 - offset, 90 - offset, 35, 75) - .addPos(90 + offset, 90 - offset, -45, 150) - .addPos(0, 0, 0, 500)) - .addBus("SWING_TRANS", new BusAnimationSequence() - .addPos(-3, 0, 0, 75) - .addPos(8, 0, 0, 150) - .addPos(0, 0, 0, 500)); - - Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:weapon.cSwing"), 0.8F + player.getRNG().nextFloat() * 0.2F)); - String id = ModItems.crucible.getUnlocalizedName(); - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(id, System.currentTimeMillis(), animation, null); - } - } - - /* chainsaw swing */ - if("sSwing".equals(mode) || "lSwing".equals(mode)) { //temp for lance - - int forward = 150; - int sideways = 100; - int retire = 200; - - if(HbmAnimations.getRelevantAnim() == null) { - - BusAnimation animation = new BusAnimation() - .addBus("SWING_ROT", new BusAnimationSequence() - .addPos(0, 0, 90, forward) - .addPos(45, 0, 90, sideways) - .addPos(0, 0, 0, retire)) - .addBus("SWING_TRANS", new BusAnimationSequence() - .addPos(0, 0, 3, forward) - .addPos(2, 0, 2, sideways) - .addPos(0, 0, 0, retire)); - - - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); - - } else { - - double[] rot = HbmAnimations.getRelevantTransformation("SWING_ROT"); - double[] trans = HbmAnimations.getRelevantTransformation("SWING_TRANS"); - - if(System.currentTimeMillis() - HbmAnimations.getRelevantAnim().startMillis < 50) return; - - BusAnimation animation = new BusAnimation() - .addBus("SWING_ROT", new BusAnimationSequence() - .addPos(rot[0], rot[1], rot[2], 0) - .addPos(0, 0, 90, forward) - .addPos(45, 0, 90, sideways) - .addPos(0, 0, 0, retire)) - .addBus("SWING_TRANS", new BusAnimationSequence() - .addPos(trans[0], trans[1], trans[2], 0) - .addPos(0, 0, 3, forward) - .addPos(2, 0, 2, sideways) - .addPos(0, 0, 0, retire)); - - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); - } - } - - if("generic".equals(mode)) { - ItemStack stack = player.getHeldItem(); - - if(stack != null && stack.getItem() instanceof IAnimatedItem) { - IAnimatedItem item = (IAnimatedItem) stack.getItem(); - BusAnimation anim = item.getAnimation(data, stack); - - if(anim != null) { - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), anim, null); - } - } - } - } - if("tau".equals(type)) { for(int i = 0; i < data.getByte("count"); i++) diff --git a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java index f8fcf3495..7409d41e6 100644 --- a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java +++ b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java @@ -3,6 +3,7 @@ package com.hbm.packet.toclient; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import com.hbm.items.IAnimatedItem; import com.hbm.items.armor.ArmorTrenchmaster; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; @@ -64,32 +65,34 @@ public class GunAnimationPacket implements IMessage { } public static class Handler implements IMessageHandler { - + @Override @SideOnly(Side.CLIENT) public IMessage onMessage(GunAnimationPacket m, MessageContext ctx) { - + try { EntityPlayer player = Minecraft.getMinecraft().thePlayer; ItemStack stack = player.getHeldItem(); int slot = player.inventory.currentItem; - + if(stack == null) return null; - + if(stack.getItem() instanceof ItemGunBaseNT) { handleSedna(player, stack, slot, AnimType.values()[m.type], m.receiverIndex, m.gunIndex); + } else if(stack.getItem() instanceof IAnimatedItem) { + handleItem(player, stack, slot, AnimType.values()[m.type], m.receiverIndex, m.gunIndex); } - + } catch(Exception x) { } - + return null; } - + public static void handleSedna(EntityPlayer player, ItemStack stack, int slot, AnimType type, int receiverIndex, int gunIndex) { ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); GunConfig config = gun.getConfig(stack, gunIndex); - + if(type == AnimType.CYCLE) { if(gunIndex < gun.lastShot.length) gun.lastShot[gunIndex] = System.currentTimeMillis(); gun.shotRand = player.worldObj.rand.nextDouble(); @@ -101,24 +104,32 @@ public class GunAnimationPacket implements IMessage { if(onRecoil != null) onRecoil.accept(stack, new LambdaContext(config, player, player.inventory, receiverIndex)); } } - + BiFunction anims = config.getAnims(stack); BusAnimation animation = anims.apply(stack, type); - - if(animation == null && type == AnimType.RELOAD_EMPTY) { - animation = anims.apply(stack, AnimType.RELOAD); - } + if(animation == null && (type == AnimType.ALT_CYCLE || type == AnimType.CYCLE_EMPTY)) { animation = anims.apply(stack, AnimType.CYCLE); } - + if(animation != null) { Minecraft.getMinecraft().entityRenderer.itemRenderer.resetEquippedProgress(); Minecraft.getMinecraft().entityRenderer.itemRenderer.itemToRender = stack; - boolean isReloadAnimation = type == AnimType.RELOAD || type == AnimType.RELOAD_CYCLE || type == AnimType.RELOAD_EMPTY; + boolean isReloadAnimation = type == AnimType.RELOAD || type == AnimType.RELOAD_CYCLE; if(isReloadAnimation && ArmorTrenchmaster.isTrenchMaster(player)) animation.setTimeMult(0.5D); - HbmAnimations.hotbar[slot][gunIndex] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, type, isReloadAnimation && config.getReloadAnimSequential(stack)); + HbmAnimations.hotbar[slot][gunIndex] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, isReloadAnimation && config.getReloadAnimSequential(stack)); } } + + public static void handleItem(EntityPlayer player, ItemStack stack, int slot, AnimType type, int receiverIndex, int itemIndex) { + IAnimatedItem item = (IAnimatedItem) stack.getItem(); + BusAnimation animation = item.getAnimation(type, stack); + + if(animation != null) { + HbmAnimations.hotbar[slot][itemIndex] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation); + } + } + } + } diff --git a/src/main/java/com/hbm/render/anim/HbmAnimations.java b/src/main/java/com/hbm/render/anim/HbmAnimations.java index 9f90bae4c..831927b52 100644 --- a/src/main/java/com/hbm/render/anim/HbmAnimations.java +++ b/src/main/java/com/hbm/render/anim/HbmAnimations.java @@ -8,7 +8,7 @@ import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; public class HbmAnimations { - + //in flans mod and afaik also MW, there's an issue that there is only one //single animation timer for each client. this is fine for the most part, //but once you reload and switch weapons while the animation plays, the @@ -17,13 +17,12 @@ public class HbmAnimations { //"trick" the system by putting a weapon into a different slot while an //animation is playing, though this will cancel the animation entirely. public static final Animation[][] hotbar = new Animation[9][8]; //now with 8 parallel rails per slot! time to get railed! - + public static enum AnimType { RELOAD, //either a full reload or start of a reload - @Deprecated RELOAD_EMPTY, //same as reload, but the mag is completely empty RELOAD_CYCLE, //animation that plays for every individual round (for shotguns and similar single round loading weapons) RELOAD_END, //animation for transitioning from our RELOAD_CYCLE to idle - CYCLE, //animation for every firing cycle + CYCLE, //animation for every firing cycle / weapon swing CYCLE_EMPTY, //animation for the final shot in the magazine CYCLE_DRY, //animation for trying to fire, but no round is available ALT_CYCLE, //animation for alt fire cycles @@ -31,14 +30,14 @@ public class HbmAnimations { SPINDOWN, //animation for actionend EQUIP, //animation for drawing the weapon INSPECT, //animation for inspecting the weapon - JAMMED //animation for jammed weapons + JAMMED, //animation for jammed weapons } // A NOTE ON SHOTGUN STYLE RELOADS - // Make sure the RELOAD and RELOAD_EMPTY adds shells, not just RELOAD_CYCLE, they all proc once for each loaded shell - + // Make sure the RELOAD adds shells, not just RELOAD_CYCLE, they all proc once for each loaded shell + public static class Animation { - + //the "name" of the animation slot. if the item has a different key than //the animation, the animation will be canceled. public String key; @@ -48,64 +47,60 @@ public class HbmAnimations { public BusAnimation animation; // If set, don't cancel this animation when the timer ends, instead wait for the next to start public boolean holdLastFrame = false; - // so we know what type of animation we're playing, only used rarely - public AnimType type; - - public Animation(String key, long startMillis, BusAnimation animation, AnimType type) { + + public Animation(String key, long startMillis, BusAnimation animation) { this.key = key; this.startMillis = startMillis; this.animation = animation; - this.type = type; } - - public Animation(String key, long startMillis, BusAnimation animation, AnimType type, boolean holdLastFrame) { + + public Animation(String key, long startMillis, BusAnimation animation, boolean holdLastFrame) { this.key = key; this.startMillis = startMillis; this.animation = animation; this.holdLastFrame = holdLastFrame; - this.type = type; } } public static Animation getRelevantAnim() { return getRelevantAnim(0); } public static Animation getRelevantAnim(int index) { - + EntityPlayer player = Minecraft.getMinecraft().thePlayer; int slot = player.inventory.currentItem; ItemStack stack = player.getHeldItem(); - + if(stack == null) return null; - + if(slot < 0 || slot > 8) { //for freak of nature hotbars, probably won't work right but at least it doesn't crash slot = Math.abs(slot) % 9; } - + if(hotbar[slot][index] == null) return null; - + if(hotbar[slot][index].key.equals(stack.getItem().getUnlocalizedName())) { return hotbar[slot][index]; } - + return null; } public static double[] getRelevantTransformation(String bus) { return getRelevantTransformation(bus, 0); } public static double[] getRelevantTransformation(String bus, int index) { - + Animation anim = HbmAnimations.getRelevantAnim(index); - + if(anim != null) { - + BusAnimation buses = anim.animation; int millis = (int)(Clock.get_ms() - anim.startMillis); BusAnimationSequence seq = buses.getBus(bus); - + if(seq != null) { double[] trans = seq.getTransformation(millis); - + if(trans != null) return trans; } @@ -124,7 +119,7 @@ public class HbmAnimations { public static void applyRelevantTransformation(String bus, int index) { double[] transform = getRelevantTransformation(bus, index); int[] rot = new int[] { (int)transform[12], (int)transform[13], (int)transform[14] }; - + GL11.glTranslated(transform[0], transform[1], transform[2]); GL11.glRotated(transform[3 + rot[0]], rot[0] == 0 ? 1 : 0, rot[0] == 1 ? 1 : 0, rot[0] == 2 ? 1 : 0); GL11.glRotated(transform[3 + rot[1]], rot[1] == 0 ? 1 : 0, rot[1] == 1 ? 1 : 0, rot[1] == 2 ? 1 : 0); From ada1b5245d6e945e151833087cd44d276ea2f07d Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 12 Sep 2025 17:12:06 +1000 Subject: [PATCH 12/26] might as well fix two issues while here: * electrolyser metal outputs not clearing on client * unused chunk allocation wasting RAM --- .../hbm/tileentity/machine/TileEntityElectrolyser.java | 8 ++------ src/main/java/com/hbm/world/gen/nbt/NBTStructure.java | 4 +--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 403e516f8..4e9c74c5c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -266,12 +266,8 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn for(int i = 0; i < 4; i++) tanks[i].deserialize(buf); boolean left = buf.readBoolean(); boolean right = buf.readBoolean(); - if(left) { - this.leftStack = new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()); - } - if(right) { - this.rightStack = new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()); - } + this.leftStack = left ? new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()) : null; + this.rightStack = right ? new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()) : null; this.lastSelectedGUI = buf.readInt(); } diff --git a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java index 2bf7de38c..9dd37fb10 100644 --- a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java @@ -1098,9 +1098,7 @@ public class NBTStructure { private SpawnCondition nextSpawn; public void generateStructures(World world, Random rand, IChunkProvider chunkProvider, int chunkX, int chunkZ) { - Block[] ablock = new Block[65536]; - - func_151539_a(chunkProvider, world, chunkX, chunkZ, ablock); + func_151539_a(chunkProvider, world, chunkX, chunkZ, null); generateStructuresInChunk(world, rand, chunkX, chunkZ); } From c0cb28c2ad13bbba1abfb4eda712279500ab1c3b Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 12 Sep 2025 11:03:27 +0200 Subject: [PATCH 13/26] every step we take that's synchronized --- changelog | 11 +++++ .../gui/GUIScreenRecipeSelector.java | 12 +++++- .../inventory/recipes/AssemblerRecipes.java | 23 ---------- .../recipes/AssemblyMachineRecipes.java | 3 ++ src/main/java/com/hbm/items/ModItems.java | 2 +- .../TileEntityMachineAssemblyFactory.java | 42 ++++++++----------- src/main/resources/assets/hbm/lang/de_DE.lang | 4 +- src/main/resources/assets/hbm/lang/en_US.lang | 5 ++- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/changelog b/changelog index de0dc79c4..ba019f652 100644 --- a/changelog +++ b/changelog @@ -1,9 +1,20 @@ +## Added +* New assembly factory + * Once again four recipe units at double the base speed + * Upgrades and stats are identical to the chemical factory + * Comes with an improved version of the old assemfac animations + ## Changed * Updated chinese localization * Added more QMAW manual pages * WIAJ presentations now use the same configurable keybind as QMAW * Shift has to be held for the presentations, while F1 will open the standard QMAW page * Double UZIs no longer render weirdly when dropped +* Added keyboard controls to the recipe selector's scroll function + * Up and down keys scroll by one line + * PgUp and PgDown scroll by 5 lines (full page) + * Pos1 and End keys scroll to the top and bottom of the list respectively +* C4, like semtex, is now edible ## Fixed * Fixed fusion reactor item IO being broken diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 244a2549b..986751e43 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -27,6 +27,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GUIScreenRecipeSelector extends GuiScreen { @@ -325,7 +326,16 @@ public class GUIScreenRecipeSelector extends GuiScreen { search(this.search.getText()); return; } - + + if(keyCode == Keyboard.KEY_UP) pageIndex--; + if(keyCode == Keyboard.KEY_DOWN) pageIndex++; + if(keyCode == Keyboard.KEY_PRIOR) pageIndex -= 5; + if(keyCode == Keyboard.KEY_NEXT) pageIndex += 5; + if(keyCode == Keyboard.KEY_HOME) pageIndex = 0; + if(keyCode == Keyboard.KEY_END) pageIndex = size; + + pageIndex = MathHelper.clamp_int(pageIndex, 0, size); + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { FMLCommonHandler.instance().showGuiScreen(previousScreen); } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index f3a8f3f2e..cc05e44e8 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -793,29 +793,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD) }, 100); - makeRecipe(new ComparableStack(ModBlocks.machine_assemfac, 1), new AStack[] { - !exp ? new OreDictStack(STEEL.ingot(), 48) : new OreDictStack(STEEL.heavyComp(), 2), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), - new OreDictStack(B.ingot(), 4), - new OreDictStack(RUBBER.ingot(), 16), - new OreDictStack(KEY_ANYPANE, 64), - new ComparableStack(ModItems.motor, 18), - new OreDictStack(W.bolt(), 16), - new OreDictStack(STEEL.pipe(), 8), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) - }, 400); - - makeRecipe(new ComparableStack(ModBlocks.machine_chemical_factory, 1), new AStack[] { - new OreDictStack(DURA.ingot(), 16), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), - new OreDictStack(RUBBER.ingot(), 16), - new OreDictStack(STEEL.shell(), 12), - new OreDictStack(CU.pipe(), 8), - new ComparableStack(ModItems.motor_desh, 4), - new ComparableStack(ModItems.coil_tungsten, 16), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) - }, 400); - makeRecipe(new ComparableStack(ModItems.missile_shuttle, 1), new AStack[] { new ComparableStack(ModItems.missile_generic, 2), new ComparableStack(ModItems.missile_strong, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 73890a546..096fd0825 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -338,6 +338,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.strandcaster").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_strand_caster, 1)) .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_CONCRETE.any(), 8))); + this.register(new GenericRecipe("ass.assemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_assembly_factory, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(B.ingot(), 8), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.motor, 12), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(B.ingot(), 8), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.motor, 24), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.chemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_factory, 1)) .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 16), new ComparableStack(ModItems.motor_desh, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index df8387936..2887a7ab2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2316,7 +2316,7 @@ public class ModItems { lithium = new Item().setUnlocalizedName("lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lithium"); ingot_zirconium = new Item().setUnlocalizedName("ingot_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_zirconium"); ingot_semtex = new ItemLemon(4, 5, true).setUnlocalizedName("ingot_semtex").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_semtex"); - ingot_c4 = new Item().setUnlocalizedName("ingot_c4").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_c4"); + ingot_c4 = new ItemLemon(4, 5, true).setUnlocalizedName("ingot_c4").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_c4"); ingot_phosphorus = new Item().setUnlocalizedName("ingot_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_phosphorus"); coil_advanced_alloy = new Item().setUnlocalizedName("coil_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_alloy"); coil_advanced_torus = new Item().setUnlocalizedName("coil_advanced_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_torus"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java index f7318d808..0613437c8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -71,7 +71,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl super(60); animations = new TragicYuri[2]; - for(int i = 0; i < animations.length; i++) animations[i] = new TragicYuri(); + for(int i = 0; i < animations.length; i++) animations[i] = new TragicYuri(i); this.inputTanks = new FluidTank[4]; this.outputTanks = new FluidTank[4]; @@ -171,7 +171,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl boolean markDirty = false; for(int i = 0; i < 4; i++) { - this.assemblerModule[i].update(speed * 2D, pow * 2D, canCool(), slots[4 + i * 7]); + this.assemblerModule[i].update(speed * 2D, pow * 2D, canCool(), slots[4 + i * 14]); this.didProcess[i] = this.assemblerModule[i].didProcess; markDirty |= this.assemblerModule[i].markDirty; @@ -204,7 +204,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl } } - for(TragicYuri animation : animations) animation.update(true || didProcess[0] ||didProcess[1] ||didProcess[2] ||didProcess[3]); + for(TragicYuri animation : animations) animation.update(didProcess[0] ||didProcess[1] ||didProcess[2] ||didProcess[3]); if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); @@ -246,17 +246,6 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl new DirPos(xCoord + 0, yCoord, zCoord - 3, Library.NEG_Z), new DirPos(xCoord + 2, yCoord, zCoord - 3, Library.NEG_Z), - new DirPos(xCoord + dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 0 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 0 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ + rot.offsetZ * 3, rot), new DirPos(xCoord - dir.offsetX + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ + rot.offsetZ * 3, rot), new DirPos(xCoord + dir.offsetX - rot.offsetX * 3, yCoord, zCoord + dir.offsetZ - rot.offsetZ * 3, rot.getOpposite()), @@ -451,16 +440,17 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl boolean direction = false; int timeUntilReposition; - public TragicYuri() { - striker = new AssemblerArm(); - saw = new AssemblerArm().yepThatsASaw(); + public TragicYuri(int group) { + striker = new AssemblerArm( group == 0 ? 0 : 3); + saw = new AssemblerArm( group == 0 ? 1 : 2).yepThatsASaw(); timeUntilReposition = 200; } public void update(boolean working) { this.prevSlider = this.slider; - if(working) switch(state) { + // one of the arms must do something. doesn't matter which or what position the carriage is in + if(didProcess[striker.recipeIndex] || didProcess[saw.recipeIndex]) switch(state) { case WORKING: { timeUntilReposition--; if(timeUntilReposition <= 0) { @@ -475,7 +465,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl } } break; case SLIDING: { - double sliderSpeed = 1D / 20D; // 20 ticks for transit + double sliderSpeed = 1D / 10D; // 10 ticks for transit if(direction) { slider += sliderSpeed; if(slider >= 1) { @@ -493,8 +483,8 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl } break; } - striker.updateArm(working); - saw.updateArm(working); + striker.updateArm(); + saw.updateArm(); } public double getSlider(float interp) { @@ -510,12 +500,14 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl public double[] speed = new double[4]; public double sawAngle; public double prevSawAngle; + public int recipeIndex; // the index of which pedestal is serviced, assuming the carriage is at default position ArmState state = ArmState.REPOSITION; int actionDelay = 0; boolean saw = false; - public AssemblerArm() { + public AssemblerArm(int index) { + this.recipeIndex = index; this.resetSpeed(); this.chooseNewArmPoistion(); } @@ -529,7 +521,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl speed[3] = saw ? 0.125 : 0.5; //Striker } - public void updateArm(boolean working) { + public void updateArm() { resetSpeed(); for(int i = 0; i < angles.length; i++) { @@ -538,7 +530,9 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl prevSawAngle = sawAngle; - if(!working) return; + int serviceIndex = recipeIndex; + if(slider > 0.5) serviceIndex += (serviceIndex % 2 == 0 ? 1 : -1); // if the carriage has moved, swap the indices so they match up with the serviced pedestal + if(!didProcess[serviceIndex]) state = ArmState.RETIRE; if(state == ArmState.CUT || state == ArmState.EXTEND) { this.sawAngle += 45D; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7599e7e9e..2e54e7e49 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -379,6 +379,7 @@ container.leadBox=Sicherheitsbehälter container.machineAmmoPress=Munitionspresse container.machineArcWelder=Lichtbogenschweißer container.machineArcFurnaceLarge=Lichtbogenofen +container.machineAssemblyFactory=Montagefabrik container.machineAssemblyMachine=Montagemaschine container.machineBoiler=Ölwärmer container.machineChemicalFactory=Chemiefabrik @@ -4382,7 +4383,8 @@ tile.machine_armor_table.name=Rüstungsmodifikationstisch tile.machine_ashpit.name=Aschekasten tile.machine_ashpit.desc=Sammelt Asche von Feuerbüchsen und Heizöfen tile.machine_assembler.name=Fertigungsmaschine (Legacy) -tile.machine_assemfac.name=Fertigungsfabrik +tile.machine_assemfac.name=Fertigungsfabrik (Legacy) +tile.machine_assembly_factory.name=Fertigungsfabrik tile.machine_assembly_machine.name=Montagemaschine tile.machine_autocrafter.name=Automatische Werkbank tile.machine_autosaw.name=Automatische Kreissäge diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 25d7a3933..4157a22a5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -785,6 +785,7 @@ container.leadBox=Containment Box container.machineAmmoPress=Ammo Press container.machineArcWelder=Arc Welder container.machineArcFurnaceLarge=Arc Furnace +container.machineAssemblyFactory=Assembly Factory container.machineAssemblyMachine=Assembly Machine container.machineBoiler=Oil Heater container.machineChemicalFactory=Chemical Factory @@ -5642,7 +5643,9 @@ tile.machine_armor_table.name=Armor Modification Table tile.machine_ashpit.name=Ashpit tile.machine_ashpit.desc=Collects ashes from fireboxes and heating ovens tile.machine_assembler.name=Assembly Machine (Legacy) -tile.machine_assemfac.name=Assembly Factory +tile.machine_assemfac.name=Assembly Factory (Legacy) +tile.machine_assembly_factory.name=Assembly Factory +tile.machine_assembly_factory.desc=Quadruple assembly machine.$Recipes process twice as fast,$but need twice as much power.$Needs to be cooled with water,$produces low-pressure steam. tile.machine_assembly_machine.name=Assembly Machine tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw From afb559d6041d1b0130d334a4bf8958d80bdc9ad6 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 14 Sep 2025 22:51:27 +0200 Subject: [PATCH 14/26] sparks! --- changelog | 6 +- gradle.properties | 2 +- .../gui/GUIMachineAssemblyFactory.java | 4 +- .../recipes/AssemblyMachineRecipes.java | 2 + .../hbm/inventory/recipes/PUREXRecipes.java | 9 ++- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/ResourceManager.java | 1 + .../tileentity/RenderAssemblyFactory.java | 65 +++++++++++++++++- .../TileEntityMachineAssemblyFactory.java | 4 +- .../machine/TileEntityMachineTurbofan.java | 2 +- .../assets/hbm/manual/machine/assembler.json | 2 +- .../assets/hbm/textures/armor/t51_arm.png | Bin 0 -> 502 bytes .../assets/hbm/textures/armor/t51_chest.png | Bin 0 -> 820 bytes .../assets/hbm/textures/armor/t51_leg.png | Bin 0 -> 380 bytes .../models/machines/assembly_factory.png | Bin 5024 -> 5448 bytes .../machines/assembly_factory_sparks.png | Bin 0 -> 272 bytes 16 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/armor/t51_arm.png create mode 100644 src/main/resources/assets/hbm/textures/armor/t51_chest.png create mode 100644 src/main/resources/assets/hbm/textures/armor/t51_leg.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/assembly_factory_sparks.png diff --git a/changelog b/changelog index ba019f652..682553da7 100644 --- a/changelog +++ b/changelog @@ -15,9 +15,13 @@ * PgUp and PgDown scroll by 5 lines (full page) * Pos1 and End keys scroll to the top and bottom of the list respectively * C4, like semtex, is now edible +* Assembly machines can now be made with the assembly machine + * The recipe is similar to the anvil recipe, but it uses only half as much steel, and one analog circuit instead of four vacuum tubes ## Fixed * Fixed fusion reactor item IO being broken * Fixed issue with the chemical factory where the declogging feature would be triggered by a recipe processor that doesn't even own the reported slot * Fixed the new PA not triggering the omega-12 achievement - * In addition to granting the achievement to nearby players on recipe completion, it is also granted when taking it out of the output slot \ No newline at end of file + * In addition to granting the achievement to nearby players on recipe completion, it is also granted when taking it out of the output slot +* Fixed the PUREX recipe for processing ZIRNOX MEU fuel not yielding technetium as it should +* Fixed turbofans pulling in players even when disabled via redstone \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index fdd257f7b..77f883e59 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=5441 +mod_build_number=5453 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java index 583b57bce..ac9ff747c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java @@ -36,8 +36,8 @@ public class GUIMachineAssemblyFactory extends GuiInfoContainer { super.drawScreen(mouseX, mouseY, f); for(int j = 0; j < 4; j++) { - assembler.inputTanks[j].renderTankInfo(this, mouseX, mouseY, guiLeft + 105 + (j % 2) * 109, guiTop + 20 + (j / 2) * 56, 3, 16); - assembler.outputTanks[j].renderTankInfo(this, mouseX, mouseY, guiLeft + 105 + (j % 2) * 109, guiTop + 54 + (j / 2) * 56, 3, 16); + assembler.inputTanks[j].renderTankInfo(this, mouseX, mouseY, guiLeft + 105 + (j % 2) * 109, guiTop + 20 + (j / 2) * 56, 5, 32); + assembler.outputTanks[j].renderTankInfo(this, mouseX, mouseY, guiLeft + 105 + (j % 2) * 109, guiTop + 54 + (j / 2) * 56, 5, 16); } assembler.water.renderTankInfo(this, mouseX, mouseY, guiLeft + 232, guiTop + 149, 7, 52); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 096fd0825..de2711f8c 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -216,6 +216,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.assembler").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_assembly_machine, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 4), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.chemplant").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_plant, 1)) .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java index 76cdc088c..c6ab8e83b 100644 --- a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -53,9 +53,9 @@ public class PUREXRecipes extends GenericRecipes { this.register(new GenericRecipe("purex.zirnoxmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_uranium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) - .outputItems(new ItemStack(ModItems.nugget_u238, 1), - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_pu239, 1), + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_plutonium, 2), + new ItemStack(ModItems.nugget_technetium, 1), new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); @@ -80,8 +80,7 @@ public class PUREXRecipes extends GenericRecipes { this.register(new GenericRecipe("purex.zirnoxmep").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_plutonium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) - .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nugget_pu_mix, 1), + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 2), new ItemStack(ModItems.nugget_technetium, 1), new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 98e253f40..5b17eb388 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 (5441)"; + public static final String VERSION = "1.0.27 BETA (5453)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 4eb451c2b..480e84917 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -580,6 +580,7 @@ public class ResourceManager { public static final ResourceLocation assembly_machine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_machine.png"); public static final ResourceLocation assemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assemfac.png"); public static final ResourceLocation assembly_factory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_factory.png"); + public static final ResourceLocation assembly_factory_sparks_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_factory_sparks.png"); //Chemplant public static final ResourceLocation chemplant_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_base_new.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java index a303ef057..06cdbf265 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java @@ -12,7 +12,9 @@ import com.hbm.render.item.ItemRenderBase; import com.hbm.tileentity.machine.TileEntityMachineAssemblyFactory; import net.minecraft.block.Block; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -145,7 +147,7 @@ public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements GL11.glTranslated(0, arm4[3], 0); ResourceManager.assembly_factory.renderPart("Striker4"); GL11.glTranslated(0, 1.625, -0.3125); - GL11.glRotated(-arm4[4], 1, 0, 0); + GL11.glRotated(arm4[4], 1, 0, 0); GL11.glTranslated(0, -1.625, 0.3125); ResourceManager.assembly_factory.renderPart("Blade4"); } GL11.glPopMatrix(); @@ -189,6 +191,67 @@ public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements } GL11.glPopMatrix(); } + + RenderArcFurnace.fullbright(true); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + bindTexture(ResourceManager.assembly_factory_sparks_tex); + + Tessellator tess = Tessellator.instance; + double wide = 0.1875D; + double narrow = 0.00D; + double length = 1.25D; + double uMin = ((tileEntity.getWorldObj().getTotalWorldTime() / 10D + interp)) % 10; + double uMax = uMin + 1; + double epsilon = 0.01D; + + // renders two layers of sparks, one with regular UV and one with mirrored +0.5 offset + // render left and right of the blade with small offset to eliminate z-fighting + GL11.glPushMatrix(); if(arm2[3] <= -0.375D) { + GL11.glTranslated(0.5 + slide1, 1.0625D, -arm2[2] / 45D); // arm angle/45 is a seemingly good enough approximation + tess.startDrawingQuads(); + tess.setColorRGBA_F(1F, 1F, 1F, 0F); + tess.addVertexWithUV(-epsilon, -wide, length, uMin + 0.5, 0); + tess.addVertexWithUV(-epsilon, wide, length, uMin + 0.5, 1); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + tess.addVertexWithUV(-epsilon, narrow, 0, uMax + 0.5, 1); + tess.addVertexWithUV(-epsilon, -narrow, 0, uMax + 0.5, 0); + + tess.setColorRGBA_F(1F, 1F, 1F, 0F); + tess.addVertexWithUV(epsilon, -wide, length, uMin, 1); + tess.addVertexWithUV(epsilon, wide, length, uMin, 0); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + tess.addVertexWithUV(epsilon, narrow, 0, uMax, 0); + tess.addVertexWithUV(epsilon, -narrow, 0, uMax, 1); + tess.draw(); + } GL11.glPopMatrix(); + + GL11.glPushMatrix(); if(arm4[3] <= -0.375D) { + GL11.glTranslated(-0.5 - slide2, 1.0625D, arm4[2] / 45D); + tess.startDrawingQuads(); + tess.setColorRGBA_F(1F, 1F, 1F, 0F); + tess.addVertexWithUV(-epsilon, -wide, -length, uMin + 0.5, 0); + tess.addVertexWithUV(-epsilon, wide, -length, uMin + 0.5, 1); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + tess.addVertexWithUV(-epsilon, narrow, 0, uMax + 0.5, 1); + tess.addVertexWithUV(-epsilon, -narrow, 0, uMax + 0.5, 0); + + tess.setNormal(-1, 0, 0); + tess.setColorRGBA_F(1F, 1F, 1F, 0F); + tess.addVertexWithUV(epsilon, -wide, -length, uMin, 1); + tess.addVertexWithUV(epsilon, wide, -length, uMin, 0); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + tess.addVertexWithUV(epsilon, narrow, 0, uMax, 0); + tess.addVertexWithUV(epsilon, -narrow, 0, uMax, 1); + tess.draw(); + } GL11.glPopMatrix(); + + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + RenderArcFurnace.fullbright(false); } GL11.glShadeModel(GL11.GL_FLAT); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java index 0613437c8..295d1b4a7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -186,7 +186,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl this.networkPackNT(100); } else { - if(MainRegistry.proxy.me().getDistance(xCoord , yCoord, zCoord) < 50) { + if((didProcess[0] ||didProcess[1] ||didProcess[2] ||didProcess[3]) && MainRegistry.proxy.me().getDistance(xCoord , yCoord, zCoord) < 50) { if(audio == null) { audio = createAudioLoop(); audio.startSound(); @@ -443,7 +443,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl public TragicYuri(int group) { striker = new AssemblerArm( group == 0 ? 0 : 3); saw = new AssemblerArm( group == 0 ? 1 : 2).yepThatsASaw(); - timeUntilReposition = 200; + timeUntilReposition = 140 + rand.nextInt(161); } public void update(boolean working) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index 6b804feaa..5140ccffc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -346,7 +346,7 @@ public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implem * All movement related stuff has to be repeated on the client, but only for the client's player * Otherwise this could lead to desync since the motion is never sent form the server */ - if(tank.getFill() > 0 && !MainRegistry.proxy.me().capabilities.isCreativeMode) { + if(wasOn && !MainRegistry.proxy.me().capabilities.isCreativeMode) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getRotation(ForgeDirection.UP); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); diff --git a/src/main/resources/assets/hbm/manual/machine/assembler.json b/src/main/resources/assets/hbm/manual/machine/assembler.json index a39c70492..bbae88842 100644 --- a/src/main/resources/assets/hbm/manual/machine/assembler.json +++ b/src/main/resources/assets/hbm/manual/machine/assembler.json @@ -7,7 +7,7 @@ "zh_CN": "装配机" }, "content": { - "en_US": "Universal machine for building things with up to twelve item inputs. Important early on and used widely throughout progression. Build in an [[anvil|Anvil]], using plates from a [[press|Press]].", + "en_US": "Universal machine for building things with up to twelve item inputs. Important early on and used widely throughout progression. Built in an [[anvil|Anvil]], using plates from a [[press|Press]].", "zh_CN": "用于装配物品的通用机器,最多能够输入十二种物品。前期的重要机器,并且在 整个游戏流程中广泛使用。在[[砧|Anvil]]中使用金属板等合成,需要的金属板可在[[锻压机|Press]]中制造。" } } diff --git a/src/main/resources/assets/hbm/textures/armor/t51_arm.png b/src/main/resources/assets/hbm/textures/armor/t51_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6f976194e7eeb13ea83fb16c9524dcca1cbbb4 GIT binary patch literal 502 zcmV1^@s6>NuCl00004b3#c}2nYxW zdb>!3`IW+9j2%8+95aS&?{KJLhq0vYc8lR6<|A3M9P#6 z0(?slTV%dI1xio|N_=5XrRNVUq>)FIq~`}}Jg|@?=0h$?hbNL~VwVY(qE>pTLlcN3 zF_$r2TYHkgOB#q)Ot~ zJ+nu&nfByDwQ-@^xKM4(2o2Jmi9>03I=VA$gOfls^&Kv1@7~3pekiGl;Z#-4QOOco zJIjsRI$9{_2(mcIHM_VwMN#+@Db*K&6NX4a?~p)`M^S?>7L zP85F`V;FhpvwRh5#!(lljSJPrjL>jq>*3_7K>#r0eJ@@9$EC(N8k7$(RC;R7DifIr zwZ~=msa2*?0=VOH`OTExg=*tMwQ-@^gvcCt)wqoB_1eg0)^kCjbfaR%QQ3|21%EPR s%sA?6R2$wJ%}(~L(HwiwSu>9Q0po(32r{hubN~PV07*qoM6N<$f_VnxUjP6A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/armor/t51_chest.png b/src/main/resources/assets/hbm/textures/armor/t51_chest.png new file mode 100644 index 0000000000000000000000000000000000000000..1362ee9a8ae05c7d5421e1cbc3ff119ae6cf38d2 GIT binary patch literal 820 zcmeAS@N?(olHy`uVBq!ia0vp^CxQ4S2OE&=%MvyQQY^(zo*^7SP{WbZ!N9=u+SA1` zq+-t7+o!Xd9T*%g`n+ua{rs})Nj2Y{3;iZ7oU>Wb(X~KN+3wh!;<$$R+C9Hn63Uet z6@)lO2};A@!_RlZKl=L&_f6k=x76~v@cFjQXH>dlnJd59?dkInvogNXx@o=P@||@v zH#6T|dSlW|mL?B{id|bzN&GZfEt98%MfQzj-)PTnxjL!kpCi9|pp%-{8Q^^5nP z{^?j3BlknE?6~vEQc?#82G2 zlc!sB=jZ$FIKva!UNmP6B5n=igu|9cZYnuU2WA5X MPgg&ebxsLQ0Aj!JzyJUM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/armor/t51_leg.png b/src/main/resources/assets/hbm/textures/armor/t51_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..0c71e515f6256c6aecde23f8dafe46c3cf7b5e70 GIT binary patch literal 380 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 literal 0 HcmV?d00001 From a79125b94d888ac344750b60b85cbb883eb1119e Mon Sep 17 00:00:00 2001 From: George Paton Date: Mon, 15 Sep 2025 10:57:05 +1000 Subject: [PATCH 15/26] generic animation enum selection, still item specific but now a lot easier to refactor to non-item animations --- .../com/hbm/handler/GunConfiguration.java | 18 +- .../java/com/hbm/items/IAnimatedItem.java | 19 +- .../java/com/hbm/items/tool/ItemBoltgun.java | 19 +- .../java/com/hbm/items/tool/ItemChainsaw.java | 13 +- .../com/hbm/items/weapon/ItemCrucible.java | 22 +- .../com/hbm/items/weapon/sedna/GunConfig.java | 40 +- .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 18 +- .../weapon/sedna/factory/GunStateDecider.java | 56 +- .../hbm/items/weapon/sedna/factory/Lego.java | 110 ++-- .../weapon/sedna/factory/Orchestras.java | 496 +++++++++--------- .../weapon/sedna/factory/XFactory10ga.java | 10 +- .../weapon/sedna/factory/XFactory12ga.java | 90 ++-- .../weapon/sedna/factory/XFactory22lr.java | 12 +- .../weapon/sedna/factory/XFactory357.java | 18 +- .../weapon/sedna/factory/XFactory35800.java | 16 +- .../weapon/sedna/factory/XFactory40mm.java | 28 +- .../weapon/sedna/factory/XFactory44.java | 42 +- .../weapon/sedna/factory/XFactory50.java | 28 +- .../weapon/sedna/factory/XFactory556mm.java | 38 +- .../weapon/sedna/factory/XFactory75Bolt.java | 12 +- .../weapon/sedna/factory/XFactory762mm.java | 28 +- .../weapon/sedna/factory/XFactory9mm.java | 34 +- .../sedna/factory/XFactoryAccelerator.java | 72 +-- .../sedna/factory/XFactoryBlackPowder.java | 10 +- .../sedna/factory/XFactoryCatapult.java | 6 +- .../weapon/sedna/factory/XFactoryEnergy.java | 16 +- .../weapon/sedna/factory/XFactoryFlamer.java | 26 +- .../weapon/sedna/factory/XFactoryFolly.java | 10 +- .../weapon/sedna/factory/XFactoryRocket.java | 36 +- .../weapon/sedna/factory/XFactoryTool.java | 36 +- .../weapon/sedna/impl/ItemGunChemthrower.java | 30 +- .../weapon/sedna/mods/WeapnModG3SawedOff.java | 6 +- .../sedna/mods/WeaponModCarbineBayonet.java | 16 +- .../weapon/sedna/mods/WeaponModGreasegun.java | 8 +- .../mods/WeaponModLiberatorSpeedloader.java | 10 +- .../sedna/mods/WeaponModMASBayonet.java | 16 +- .../mods/WeaponModPanzerschreckSawedOff.java | 6 +- .../java/com/hbm/packet/PacketDispatcher.java | 2 +- ...ionPacket.java => HbmAnimationPacket.java} | 52 +- .../com/hbm/render/anim/AnimationEnums.java | 27 + .../com/hbm/render/anim/HbmAnimations.java | 22 +- .../weapon/sedna/ItemRenderCongoLake.java | 26 +- 42 files changed, 808 insertions(+), 792 deletions(-) rename src/main/java/com/hbm/packet/toclient/{GunAnimationPacket.java => HbmAnimationPacket.java} (68%) create mode 100644 src/main/java/com/hbm/render/anim/AnimationEnums.java diff --git a/src/main/java/com/hbm/handler/GunConfiguration.java b/src/main/java/com/hbm/handler/GunConfiguration.java index 9cce19944..f703d47e4 100644 --- a/src/main/java/com/hbm/handler/GunConfiguration.java +++ b/src/main/java/com/hbm/handler/GunConfiguration.java @@ -7,14 +7,14 @@ import java.util.function.Consumer; import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.util.ResourceLocation; @Deprecated public class GunConfiguration implements Cloneable { - + /** * alt function restrictions: * alt can not be reloaded (reload type of 0, ammo cap of 0) @@ -35,9 +35,9 @@ public class GunConfiguration implements Cloneable { public int firingMode; //weapon won't fire after weapon breaks (main only) public int durability; - + //animations! - public HashMap animations = new HashMap(); + public HashMap animations = new HashMap(); //lazy-ish loading for animations, required for loading animations from ResourceManager, since that occurs after we've initialised the guns public Consumer loadAnimations; public boolean animationsLoaded = false; @@ -47,7 +47,7 @@ public class GunConfiguration implements Cloneable { public boolean isCentered; //texture overlay when sneaking public ResourceLocation scopeTexture; - + //duration of every animation cycle, used also for how quickly a burst fire rifle can fire public int firingDuration; //sound path to the shooting sound @@ -65,7 +65,7 @@ public class GunConfiguration implements Cloneable { //whether the reload sound should be played at the beginning or at the end of the reload public boolean reloadSoundEnd = true; public String equipSound = ""; - + //how much ammo the clip can hold, 0 if drawn from inventory public int ammoCap; //0 does not allow direct reload, 1 is full clip, 2 is single bullet @@ -76,7 +76,7 @@ public class GunConfiguration implements Cloneable { public boolean allowsInfinity; //whether the ammo count should be displayed public boolean showAmmo = true; - + //for electrically powered weapons: //the Maximum capacity of the gun public long maxCharge; @@ -84,7 +84,7 @@ public class GunConfiguration implements Cloneable { public long chargeRate; //how much energy is discharged per shot public long dischargePerShot; - + public String name = ""; public EnumGunManufacturer manufacturer = EnumGunManufacturer.NONE; public List comment = new ArrayList(); @@ -94,7 +94,7 @@ public class GunConfiguration implements Cloneable { //crosshair public Crosshair crosshair; - + //casing eject behavior public CasingEjector ejector = null; diff --git a/src/main/java/com/hbm/items/IAnimatedItem.java b/src/main/java/com/hbm/items/IAnimatedItem.java index 01de00001..010c377f3 100644 --- a/src/main/java/com/hbm/items/IAnimatedItem.java +++ b/src/main/java/com/hbm/items/IAnimatedItem.java @@ -1,30 +1,25 @@ package com.hbm.items; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.GunAnimationPacket; +import com.hbm.packet.toclient.HbmAnimationPacket; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.HbmAnimations.AnimType; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -public interface IAnimatedItem { +public interface IAnimatedItem> { // Fetch the animation for a given type - public BusAnimation getAnimation(AnimType type, ItemStack stack); + public BusAnimation getAnimation(T type, ItemStack stack); - // Run the swing animation - public default void playAnimation(EntityPlayer player) { - playAnimation(player, AnimType.CYCLE); - } + // Runtime erasure means we have to explicitly give the class a second time :( + public Class getEnum(); // Run a specified animation - public default void playAnimation(EntityPlayer player, AnimType type) { + public default void playAnimation(EntityPlayer player, T type) { if(player instanceof EntityPlayerMP) { - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(type.ordinal(), 0, 0), (EntityPlayerMP) player); + PacketDispatcher.wrapper.sendTo(new HbmAnimationPacket(type.ordinal(), 0, 0), (EntityPlayerMP) player); } } diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index 94eea2823..6524f41ea 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -7,16 +7,14 @@ import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.render.anim.AnimationEnums.ToolAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import api.hbm.block.IToolable; import api.hbm.block.IToolable.ToolType; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -27,7 +25,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class ItemBoltgun extends Item implements IAnimatedItem { +public class ItemBoltgun extends Item implements IAnimatedItem { public ItemBoltgun() { this.setMaxStackSize(1); @@ -74,7 +72,7 @@ public class ItemBoltgun extends Item implements IAnimatedItem { data.setByte("count", (byte)1); PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, entity.posX, entity.posY + entity.height / 2 - entity.yOffset, entity.posZ), new TargetPoint(world.provider.dimensionId, entity.posX, entity.posY, entity.posZ, 50)); - playAnimation(player); + playAnimation(player, ToolAnimation.SWING); } return true; @@ -107,7 +105,7 @@ public class ItemBoltgun extends Item implements IAnimatedItem { data.setByte("count", (byte)1); PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, x + fX + dir.offsetX * off, y + fY + dir.offsetY * off, z + fZ + dir.offsetZ * off), new TargetPoint(world.provider.dimensionId, x, y, z, 50)); - playAnimation(player); + playAnimation(player, ToolAnimation.SWING); } return false; @@ -117,11 +115,16 @@ public class ItemBoltgun extends Item implements IAnimatedItem { } @Override - @SideOnly(Side.CLIENT) - public BusAnimation getAnimation(AnimType type, ItemStack stack) { + public Class getEnum() { + return ToolAnimation.class; + } + + @Override + public BusAnimation getAnimation(ToolAnimation type, ItemStack stack) { return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence() .addPos(1, 0, 1, 50) .addPos(0, 0, 1, 100)); } + } diff --git a/src/main/java/com/hbm/items/tool/ItemChainsaw.java b/src/main/java/com/hbm/items/tool/ItemChainsaw.java index c80fba942..c09acca18 100644 --- a/src/main/java/com/hbm/items/tool/ItemChainsaw.java +++ b/src/main/java/com/hbm/items/tool/ItemChainsaw.java @@ -3,17 +3,17 @@ package com.hbm.items.tool; import com.hbm.inventory.fluid.FluidType; import com.hbm.items.IAnimatedItem; import com.hbm.items.IHeldSoundProvider; +import com.hbm.render.anim.AnimationEnums.ToolAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundProvider, IAnimatedItem { +public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundProvider, IAnimatedItem { public ItemChainsaw(float damage, double movement, ToolMaterial material, EnumToolType type, int maxFuel, int consumption, int fillRate, FluidType... acceptedFuels) { super(damage, movement, material, type, maxFuel, consumption, fillRate, acceptedFuels); @@ -28,13 +28,13 @@ public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundPro if(stack.getItemDamage() >= stack.getMaxDamage()) return false; - playAnimation((EntityPlayer) entityLiving); + playAnimation((EntityPlayer) entityLiving, ToolAnimation.SWING); return false; } @Override - public BusAnimation getAnimation(AnimType type, ItemStack stack) { + public BusAnimation getAnimation(ToolAnimation type, ItemStack stack) { int forward = 150; int sideways = 100; int retire = 200; @@ -70,4 +70,9 @@ public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundPro .addPos(0, 0, 0, retire)); } } + + @Override + public Class getEnum() { + return ToolAnimation.class; + } } diff --git a/src/main/java/com/hbm/items/weapon/ItemCrucible.java b/src/main/java/com/hbm/items/weapon/ItemCrucible.java index e712e1faf..9007c7ab4 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCrucible.java +++ b/src/main/java/com/hbm/items/weapon/ItemCrucible.java @@ -8,14 +8,12 @@ import com.google.common.collect.Multimap; import com.hbm.handler.threading.PacketThreading; import com.hbm.items.IAnimatedItem; import com.hbm.items.IEquipReceiver; -import com.hbm.items.ModItems; import com.hbm.items.tool.ItemSwordAbility; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.render.anim.AnimationEnums.ToolAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations; -import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.anim.HbmAnimations.Animation; import com.hbm.util.ShadyUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -38,7 +36,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; -public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IAnimatedItem { +public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IAnimatedItem { public ItemCrucible(float damage, double movement, ToolMaterial material) { super(damage, movement, material); @@ -55,7 +53,7 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IA World world = player.worldObj; world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.cDeploy", 1.0F, 1.0F); - playAnimation(player, AnimType.EQUIP); + playAnimation(player, ToolAnimation.EQUIP); } } @@ -72,7 +70,7 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IA if(stack.getItemDamage() >= stack.getMaxDamage()) return false; - playAnimation((EntityPlayerMP)entityLiving, AnimType.CYCLE); + playAnimation((EntityPlayerMP)entityLiving, ToolAnimation.SWING); return false; } @@ -139,9 +137,9 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IA } @Override - public BusAnimation getAnimation(AnimType type, ItemStack stack) { + public BusAnimation getAnimation(ToolAnimation type, ItemStack stack) { /* crucible deploy */ - if(type == AnimType.EQUIP) { + if(type == ToolAnimation.EQUIP) { return new BusAnimation() .addBus("GUARD_ROT", new BusAnimationSequence() @@ -151,7 +149,7 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IA } /* crucible swing */ - if(type == AnimType.CYCLE) { + if(type == ToolAnimation.SWING) { if(HbmAnimations.getRelevantTransformation("SWING_ROT")[0] == 0) { @@ -182,4 +180,10 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IA private void playSwing(float pitchProbablyIDontFuckingCare) { Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:weapon.cSwing"), pitchProbablyIDontFuckingCare)); } + + @Override + public Class getEnum() { + return ToolAnimation.class; + } + } diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java index 65db47377..5c8602153 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java @@ -11,8 +11,8 @@ import com.hbm.items.weapon.sedna.factory.GunStateDecider; import com.hbm.items.weapon.sedna.factory.Lego; import com.hbm.items.weapon.sedna.hud.IHUDComponent; import com.hbm.items.weapon.sedna.mods.WeaponModManager; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -20,13 +20,13 @@ import net.minecraft.util.ResourceLocation; /** * Despite how complicated the GunConfig looks, it actually only exists to hold together a bunch of fields. Everything else is infrastructure for getting and setting. * The gun config determines general gun specific stats like durability, crosshair, animations, receivers, click handling and the decider. - * + * * @author hbm * */ public class GunConfig { - public List smokeNodes = new ArrayList(); - + public List smokeNodes = new ArrayList<>(); + public static final String O_RECEIVERS = "O_RECEIVERS"; public static final String F_DURABILITY = "F_DURABILITY"; public static final String I_DRAWDURATION = "I_DRAWDURATION"; @@ -51,9 +51,9 @@ public class GunConfig { public static final String CON_DECIDER = "CON_DECIDER"; public static final String FUN_ANIMNATIONS = "FUN_ANIMNATIONS"; public static final String O_HUDCOMPONENTS = "O_HUDCOMPONENTS"; - + /* FIELDS */ - + public int index; /** List of receivers used by the gun, primary and secondary are usually indices 0 and 1 respectively, if applicable */ protected Receiver[] receivers_DNA; @@ -84,9 +84,9 @@ public class GunConfig { /** The engine for the state machine that determines the gun's overall behavior */ protected BiConsumer decider_DNA; /** Lambda that returns the relevant animation for the given params */ - protected BiFunction animations_DNA; + protected BiFunction animations_DNA; protected IHUDComponent[] hudComponents_DNA; - + /* GETTERS */ public Receiver[] getReceivers(ItemStack stack) { return WeaponModManager.eval(receivers_DNA, stack, O_RECEIVERS, this, this.index); } @@ -112,14 +112,14 @@ public class GunConfig { public BiConsumer getReleaseSecondary(ItemStack stack) { return WeaponModManager.eval(this.onReleaseSecondary_DNA, stack, CON_ONRELEASESECONDARY, this, this.index); } public BiConsumer getReleaseTertiary(ItemStack stack) { return WeaponModManager.eval(this.onReleaseTertiary_DNA, stack, CON_ONRELEASETERTIARY, this, this.index); } public BiConsumer getReleaseReload(ItemStack stack) { return WeaponModManager.eval(this.onReleaseReload_DNA, stack, CON_ONRELEASERELOAD, this, this.index); } - + public BiConsumer getDecider(ItemStack stack) { return WeaponModManager.eval(this.decider_DNA, stack, CON_DECIDER, this, this.index); } - - public BiFunction getAnims(ItemStack stack) { return WeaponModManager.eval(this.animations_DNA, stack, FUN_ANIMNATIONS, this, this.index); } - public IHUDComponent[] getHUDComponents(ItemStack stack) { return WeaponModManager.eval(this.hudComponents_DNA, stack, O_HUDCOMPONENTS, this, this.index); } - + + public BiFunction getAnims(ItemStack stack) { return WeaponModManager.eval(this.animations_DNA, stack, FUN_ANIMNATIONS, this, this.index); } + public IHUDComponent[] getHUDComponents(ItemStack stack) { return WeaponModManager.eval(this.hudComponents_DNA, stack, O_HUDCOMPONENTS, this, this.index); } + /* SETTERS */ - + public GunConfig rec(Receiver... receivers) { this.receivers_DNA = receivers; for(Receiver r : receivers_DNA) r.parent = this; return this; } public GunConfig dura(float dura) { this.durability_DNA = dura; return this; } public GunConfig draw(int draw) { this.drawDuration_DNA = draw; return this; } @@ -134,7 +134,7 @@ public class GunConfig { public GunConfig smoke(BiConsumer smoke) { this.smokeHandler_DNA = smoke; return this; } public GunConfig orchestra(BiConsumer orchestra) { this.orchestra_DNA = orchestra; return this; } - + //press public GunConfig pp(BiConsumer lambda) { this.onPressPrimary_DNA = lambda; return this; } public GunConfig ps(BiConsumer lambda) { this.onPressSecondary_DNA = lambda; return this; } @@ -146,14 +146,14 @@ public class GunConfig { public GunConfig rs(BiConsumer lambda) { this.onReleaseSecondary_DNA = lambda; return this; } public GunConfig rt(BiConsumer lambda) { this.onReleaseTertiary_DNA = lambda; return this; } public GunConfig rr(BiConsumer lambda) { this.onReleaseReload_DNA = lambda; return this; } - + //decider public GunConfig decider(BiConsumer lambda) { this.decider_DNA = lambda; return this; } - + //client - public GunConfig anim(BiFunction lambda) { this.animations_DNA = lambda; return this; } - public GunConfig hud(IHUDComponent... components) { this.hudComponents_DNA = components; return this; } - + public GunConfig anim(BiFunction lambda) { this.animations_DNA = lambda; return this; } + public GunConfig hud(IHUDComponent... components) { this.hudComponents_DNA = components; return this; } + /** Standard package for keybind handling and decider using LEGO prefabs: Primary fire on LMB, * reload on R, aiming on MMB and the standard decider which includes jamming and auto fire handling*/ public GunConfig setupStandardConfiguration() { diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 2506d5d84..54bc6b758 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -24,8 +24,8 @@ import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.GunAnimationPacket; -import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.packet.toclient.HbmAnimationPacket; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.util.RenderScreenOverlay; import com.hbm.sound.AudioWrapper; import com.hbm.util.BobMathUtil; @@ -247,8 +247,8 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I @Override public void onEquip(EntityPlayer player, ItemStack stack) { for(int i = 0; i < this.configs_DNA.length; i++) { - if(this.getLastAnim(stack, i) == AnimType.EQUIP && this.getAnimTimer(stack, i) < 5) continue; - playAnimation(player, stack, AnimType.EQUIP, i); + if(this.getLastAnim(stack, i) == GunAnimation.EQUIP && this.getAnimTimer(stack, i) < 5) continue; + playAnimation(player, stack, GunAnimation.EQUIP, i); this.setPrimary(stack, i, false); this.setSecondary(stack, i, false); this.setTertiary(stack, i, false); @@ -256,9 +256,9 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I } } - public static void playAnimation(EntityPlayer player, ItemStack stack, AnimType type, int index) { + public static void playAnimation(EntityPlayer player, ItemStack stack, GunAnimation type, int index) { if(player instanceof EntityPlayerMP) { - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(type.ordinal(), 0, index), (EntityPlayerMP) player); + PacketDispatcher.wrapper.sendTo(new HbmAnimationPacket(type.ordinal(), 0, index), (EntityPlayerMP) player); setLastAnim(stack, index, type); setAnimTimer(stack, index, 0); } @@ -327,7 +327,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I this.setState(stack, i, GunState.DRAWING); this.setTimer(stack, i, configs[i].getDrawDuration(stack)); } - this.setLastAnim(stack, i, AnimType.CYCLE); //prevents new guns from initializing with DRAWING, 0 + this.setLastAnim(stack, i, GunAnimation.CYCLE); //prevents new guns from initializing with DRAWING, 0 } this.setIsAiming(stack, false); this.setReloadCancel(stack, false); @@ -371,8 +371,8 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I public static boolean getIsLockedOn(ItemStack stack) { return getValueBool(stack, KEY_LOCKEDON); } public static void setIsLockedOn(ItemStack stack, boolean value) { setValueBool(stack, KEY_LOCKEDON, value); } // ANIM TRACKING // - public static AnimType getLastAnim(ItemStack stack, int index) { return EnumUtil.grabEnumSafely(AnimType.class, getValueInt(stack, KEY_LASTANIM + index)); } - public static void setLastAnim(ItemStack stack, int index, AnimType value) { setValueInt(stack, KEY_LASTANIM + index, value.ordinal()); } + public static GunAnimation getLastAnim(ItemStack stack, int index) { return EnumUtil.grabEnumSafely(GunAnimation.class, getValueInt(stack, KEY_LASTANIM + index)); } + public static void setLastAnim(ItemStack stack, int index, GunAnimation value) { setValueInt(stack, KEY_LASTANIM + index, value.ordinal()); } public static int getAnimTimer(ItemStack stack, int index) { return getValueInt(stack, KEY_ANIMTIMER + index); } public static void setAnimTimer(ItemStack stack, int index, int value) { setValueInt(stack, KEY_ANIMTIMER + index, value); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java index 75992ca7e..d30f91c85 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java @@ -7,17 +7,17 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.mags.IMagazine; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public class GunStateDecider { - - /** + + /** * The meat and bones of the gun system's state machine. * This standard decider can handle guns with an automatic primary receiver, as well as one receiver's reloading state. * It supports draw delays as well as semi and auto fire @@ -30,83 +30,83 @@ public class GunStateDecider { deciderStandardReload(stack, ctx, lastState, 0, index); deciderAutoRefire(stack, ctx, lastState, 0, index, () -> { return ItemGunBaseNT.getPrimary(stack, index) && ItemGunBaseNT.getMode(stack, ctx.configIndex) == 0; }); }; - + /** Transitions the gun from DRAWING to IDLE */ public static void deciderStandardFinishDraw(ItemStack stack, GunState lastState, int index) { - + //transition to idle if(lastState == GunState.DRAWING) { ItemGunBaseNT.setState(stack, index, GunState.IDLE); ItemGunBaseNT.setTimer(stack, index, 0); } } - + /** Transitions the gun from DRAWING to IDLE */ public static void deciderStandardClearJam(ItemStack stack, GunState lastState, int index) { - + //transition to idle if(lastState == GunState.JAMMED) { ItemGunBaseNT.setState(stack, index, GunState.IDLE); ItemGunBaseNT.setTimer(stack, index, 0); } } - + /** Triggers a reload action on the first receiver. If the mag is not full and reloading is still possible, set to RELOADING, otherwise IDLE */ public static void deciderStandardReload(ItemStack stack, LambdaContext ctx, GunState lastState, int recIndex, int gunIndex) { - + if(lastState == GunState.RELOADING) { - + EntityLivingBase entity = ctx.entity; EntityPlayer player = ctx.getPlayer(); GunConfig cfg = ctx.config; Receiver rec = cfg.getReceivers(stack)[recIndex]; IMagazine mag = rec.getMagazine(stack); - + mag.reloadAction(stack, ctx.inventory); boolean cancel = ItemGunBaseNT.getReloadCancel(stack); - + //if after reloading the gun can still reload, assume a tube mag and resume reloading if(!cancel && mag.canReload(stack, ctx.inventory)) { ItemGunBaseNT.setState(stack, gunIndex, GunState.RELOADING); ItemGunBaseNT.setTimer(stack, gunIndex, rec.getReloadCycleDuration(stack)); - ItemGunBaseNT.playAnimation(player, stack, AnimType.RELOAD_CYCLE, gunIndex); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.RELOAD_CYCLE, gunIndex); //if no more reloading can be done, go idle } else { - + if(getStandardJamChance(stack, cfg, gunIndex) > entity.getRNG().nextFloat()) { ItemGunBaseNT.setState(stack, gunIndex, GunState.JAMMED); ItemGunBaseNT.setTimer(stack, gunIndex, rec.getJamDuration(stack)); - ItemGunBaseNT.playAnimation(player, stack, AnimType.JAMMED, gunIndex); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.JAMMED, gunIndex); } else { ItemGunBaseNT.setState(stack, gunIndex, GunState.DRAWING); int duration = rec.getReloadEndDuration(stack) + (mag.getAmountBeforeReload(stack) <= 0 ? rec.getReloadCockOnEmptyPost(stack) : 0); ItemGunBaseNT.setTimer(stack, gunIndex, duration); - ItemGunBaseNT.playAnimation(player, stack, AnimType.RELOAD_END, gunIndex); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.RELOAD_END, gunIndex); } - + ItemGunBaseNT.setReloadCancel(stack, false); } - + mag.setAmountAfterReload(stack, mag.getAmount(stack, ctx.inventory)); } } - + public static float getStandardJamChance(ItemStack stack, GunConfig config, int index) { float percent = (float) ItemGunBaseNT.getWear(stack, index) / config.getDurability(stack); if(percent < 0.66F) return 0F; return Math.min((percent - 0.66F) * 4F, 1F); } - + /** Triggers a re-fire of the primary if the fire delay has expired, the left mouse button is down and re-firing is enabled, otherwise switches to IDLE */ public static void deciderAutoRefire(ItemStack stack, LambdaContext ctx, GunState lastState, int recIndex, int gunIndex, BooleanSupplier refireCondition) { - + if(lastState == GunState.COOLDOWN) { EntityLivingBase entity = ctx.entity; EntityPlayer player = ctx.getPlayer(); GunConfig cfg = ctx.config; Receiver rec = cfg.getReceivers(stack)[recIndex]; - + //if the gun supports re-fire (i.e. if it's an auto) if(rec.getRefireOnHold(stack) && refireCondition.getAsBoolean()) { //if there's a bullet loaded, fire again @@ -114,9 +114,9 @@ public class GunStateDecider { rec.getOnFire(stack).accept(stack, ctx); ItemGunBaseNT.setState(stack, gunIndex, GunState.COOLDOWN); ItemGunBaseNT.setTimer(stack, gunIndex, rec.getDelayAfterFire(stack)); - + if(rec.getFireSound(stack) != null) entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, rec.getFireSound(stack), rec.getFireVolume(stack), rec.getFirePitch(stack)); - + int remaining = rec.getRoundsPerCycle(stack) - 1; for(int i = 0; i < remaining; i++) if(rec.getCanFire(stack).apply(stack, ctx)) rec.getOnFire(stack).accept(stack, ctx); //if not, check if dry firing is allowed for refires @@ -124,7 +124,7 @@ public class GunStateDecider { //if refire after dry is allowed, switch to COOLDOWN which will trigger a refire, otherwise switch to DRAWING ItemGunBaseNT.setState(stack, gunIndex, rec.getRefireAfterDry(stack) ? GunState.COOLDOWN : GunState.DRAWING); ItemGunBaseNT.setTimer(stack, gunIndex, rec.getDelayAfterDryFire(stack)); - ItemGunBaseNT.playAnimation(player, stack, AnimType.CYCLE_DRY, gunIndex); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.CYCLE_DRY, gunIndex); //if not, revert to idle } else { ItemGunBaseNT.setState(stack, gunIndex, GunState.IDLE); @@ -132,7 +132,7 @@ public class GunStateDecider { } //if not, go idle } else { - + //reload on empty, only for non-refiring guns if(rec.getReloadOnEmpty(stack) && rec.getMagazine(stack).getAmount(stack, ctx.inventory) <= 0) { ItemGunBaseNT.setIsAiming(stack, false); @@ -143,12 +143,12 @@ public class GunStateDecider { mag.setAmountBeforeReload(stack, loaded); ItemGunBaseNT.setState(stack, ctx.configIndex, GunState.RELOADING); ItemGunBaseNT.setTimer(stack, ctx.configIndex, rec.getReloadBeginDuration(stack) + (loaded <= 0 ? rec.getReloadCockOnEmptyPre(stack) : 0)); - ItemGunBaseNT.playAnimation(player, stack, AnimType.RELOAD, ctx.configIndex); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.RELOAD, ctx.configIndex); } else { ItemGunBaseNT.setState(stack, gunIndex, GunState.IDLE); ItemGunBaseNT.setTimer(stack, gunIndex, 0); } - + } else { ItemGunBaseNT.setState(stack, gunIndex, GunState.IDLE); ItemGunBaseNT.setTimer(stack, gunIndex, 0); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java index 9289be9f6..094274b53 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java @@ -25,9 +25,9 @@ import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.main.MainRegistry; import com.hbm.particle.helper.BlackPowderCreator; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -38,38 +38,38 @@ import net.minecraftforge.common.util.ForgeDirection; /** * "LEGO" - i.e. standardized building blocks which can be used to set up gun configs easily. - * + * * small update, 24/11/03: this turned into fucking spaghetti. fuuuuuuuck. - * + * * @author hbm */ @NotableComments public class Lego { - + public static final Random ANIM_RAND = new Random(); - + /** * If IDLE and the mag of receiver 0 can be loaded, set state to RELOADING. Used by keybinds. */ public static BiConsumer LAMBDA_STANDARD_RELOAD = (stack, ctx) -> { - + EntityPlayer player = ctx.getPlayer(); Receiver rec = ctx.config.getReceivers(stack)[0]; GunState state = ItemGunBaseNT.getState(stack, ctx.configIndex); - + if(state == GunState.IDLE) { - + ItemGunBaseNT.setIsAiming(stack, false); IMagazine mag = rec.getMagazine(stack); - + if(mag.canReload(stack, ctx.inventory)) { int loaded = mag.getAmount(stack, ctx.inventory); mag.setAmountBeforeReload(stack, loaded); ItemGunBaseNT.setState(stack, ctx.configIndex, GunState.RELOADING); ItemGunBaseNT.setTimer(stack, ctx.configIndex, rec.getReloadBeginDuration(stack) + (loaded <= 0 ? rec.getReloadCockOnEmptyPre(stack) : 0)); - ItemGunBaseNT.playAnimation(player, stack, AnimType.RELOAD, ctx.configIndex); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.RELOAD, ctx.configIndex); if(ctx.config.getReloadChangesType(stack)) mag.initNewType(stack, ctx.inventory); } else { - ItemGunBaseNT.playAnimation(player, stack, AnimType.INSPECT, ctx.configIndex); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.INSPECT, ctx.configIndex); if(!ctx.config.getInspectCancel(stack)) { ItemGunBaseNT.setState(stack, ctx.configIndex, GunState.DRAWING); ItemGunBaseNT.setTimer(stack, ctx.configIndex, ctx.config.getInspectDuration(stack)); @@ -77,10 +77,10 @@ public class Lego { } } }; - + /** If IDLE and ammo is loaded, fire and set to JUST_FIRED. */ public static BiConsumer LAMBDA_STANDARD_CLICK_PRIMARY = (stack, ctx) -> { clickReceiver(stack, ctx, 0); }; - + public static void clickReceiver(ItemStack stack, LambdaContext ctx, int receiver) { EntityLivingBase entity = ctx.entity; @@ -88,42 +88,42 @@ public class Lego { Receiver rec = ctx.config.getReceivers(stack)[receiver]; int index = ctx.configIndex; GunState state = ItemGunBaseNT.getState(stack, index); - + if(state == GunState.IDLE) { - + if(rec.getCanFire(stack).apply(stack, ctx)) { rec.getOnFire(stack).accept(stack, ctx); - + if(rec.getFireSound(stack) != null) entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, rec.getFireSound(stack), rec.getFireVolume(stack), rec.getFirePitch(stack)); - + int remaining = rec.getRoundsPerCycle(stack) - 1; for(int i = 0; i < remaining; i++) if(rec.getCanFire(stack).apply(stack, ctx)) rec.getOnFire(stack).accept(stack, ctx); - + ItemGunBaseNT.setState(stack, index, GunState.COOLDOWN); ItemGunBaseNT.setTimer(stack, index, rec.getDelayAfterFire(stack)); } else { - + if(rec.getDoesDryFire(stack)) { - ItemGunBaseNT.playAnimation(player, stack, AnimType.CYCLE_DRY, index); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.CYCLE_DRY, index); ItemGunBaseNT.setState(stack, index, rec.getRefireAfterDry(stack) ? GunState.COOLDOWN : GunState.DRAWING); ItemGunBaseNT.setTimer(stack, index, rec.getDelayAfterDryFire(stack)); } } } - + if(state == GunState.RELOADING) { ItemGunBaseNT.setReloadCancel(stack, true); } } - + /** If IDLE, switch mode between 0 and 1. */ public static BiConsumer LAMBDA_STANDARD_CLICK_SECONDARY = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; int index = ctx.configIndex; GunState state = ItemGunBaseNT.getState(stack, index); - + if(state == GunState.IDLE) { int mode = ItemGunBaseNT.getMode(stack, 0); ItemGunBaseNT.setMode(stack, index, 1 - mode); @@ -133,12 +133,12 @@ public class Lego { entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "hbm:weapon.switchmode2", 1F, 1F); } }; - + /** Default smoke. */ public static BiConsumer LAMBDA_STANDARD_SMOKE = (stack, ctx) -> { handleStandardSmoke(ctx.entity, stack, 2000, 0.025D, 1.15D, ctx.configIndex); }; - + public static void handleStandardSmoke(EntityLivingBase entity, ItemStack stack, int smokeDuration, double alphaDecay, double widthGrowth, int index) { ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); long lastShot = gun.lastShot[index]; @@ -146,14 +146,14 @@ public class Lego { boolean smoking = lastShot + smokeDuration > System.currentTimeMillis(); if(!smoking && !smokeNodes.isEmpty()) smokeNodes.clear(); - + if(smoking) { Vec3 prev = Vec3.createVectorHelper(-entity.motionX, -entity.motionY, -entity.motionZ); prev.rotateAroundY((float) (entity.rotationYaw * Math.PI / 180D)); double accel = 15D; double side = (entity.rotationYaw - entity.prevRotationYawHead) * 0.1D; double waggle = 0.025D; - + for(SmokeNode node : smokeNodes) { node.forward += -prev.zCoord * accel + entity.worldObj.rand.nextGaussian() * waggle; node.lift += prev.yCoord + 1.5D; @@ -161,50 +161,50 @@ public class Lego { if(node.alpha > 0) node.alpha -= alphaDecay; node.width *= widthGrowth; } - + double alpha = (System.currentTimeMillis() - lastShot) / (double) smokeDuration; alpha = (1 - alpha) * 0.5D; - + if(gun.getState(stack, index) == GunState.RELOADING || smokeNodes.size() == 0) alpha = 0; smokeNodes.add(new SmokeNode(alpha)); } } - + /** Toggles isAiming. Used by keybinds. */ public static BiConsumer LAMBDA_TOGGLE_AIM = (stack, ctx) -> { ItemGunBaseNT.setIsAiming(stack, !ItemGunBaseNT.getIsAiming(stack)); }; /** Returns true if the mag has ammo in it. Used by keybind functions on whether to fire, and deciders on whether to trigger a refire. */ public static BiFunction LAMBDA_STANDARD_CAN_FIRE = (stack, ctx) -> { return ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmount(stack, ctx.inventory) > 0; }; - + /** Returns true if the mag has ammo in it, and the gun is in the locked on state */ public static BiFunction LAMBDA_LOCKON_CAN_FIRE = (stack, ctx) -> { return ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmount(stack, ctx.inventory) > 0 && ItemGunBaseNT.getIsLockedOn(stack); }; - - - + + + /** JUMPER - bypasses mag testing and just allows constant fire */ public static BiFunction LAMBDA_DEBUG_CAN_FIRE = (stack, ctx) -> { return true; }; /** Spawns an EntityBulletBaseMK4 with the loaded bulletcfg */ public static BiConsumer LAMBDA_STANDARD_FIRE = (stack, ctx) -> { - doStandardFire(stack, ctx, AnimType.CYCLE, true); + doStandardFire(stack, ctx, GunAnimation.CYCLE, true); }; /** Spawns an EntityBulletBaseMK4 with the loaded bulletcfg, ignores wear */ public static BiConsumer LAMBDA_NOWEAR_FIRE = (stack, ctx) -> { - doStandardFire(stack, ctx, AnimType.CYCLE, false); + doStandardFire(stack, ctx, GunAnimation.CYCLE, false); }; /** Spawns an EntityBulletBaseMK4 with the loaded bulletcfg, then resets lockon progress */ public static BiConsumer LAMBDA_LOCKON_FIRE = (stack, ctx) -> { - doStandardFire(stack, ctx, AnimType.CYCLE, true); + doStandardFire(stack, ctx, GunAnimation.CYCLE, true); ItemGunBaseNT.setIsLockedOn(stack, false); }; - - public static void doStandardFire(ItemStack stack, LambdaContext ctx, AnimType anim, boolean calcWear) { + + public static void doStandardFire(ItemStack stack, LambdaContext ctx, GunAnimation anim, boolean calcWear) { EntityLivingBase entity = ctx.entity; EntityPlayer player = ctx.getPlayer(); int index = ctx.configIndex; if(anim != null) ItemGunBaseNT.playAnimation(player, stack, anim, ctx.configIndex); - + boolean aim = ItemGunBaseNT.getIsAiming(stack); Receiver primary = ctx.config.getReceivers(stack)[0]; IMagazine mag = primary.getMagazine(stack); @@ -214,19 +214,19 @@ public class Lego { double forwardOffset = offset.xCoord; double heightOffset = offset.yCoord; double sideOffset = offset.zCoord; - + /*forwardOffset = 0.75; heightOffset = -0.125; sideOffset = -0.25D;*/ - + int projectiles = config.projectilesMin; if(config.projectilesMax > config.projectilesMin) projectiles += entity.getRNG().nextInt(config.projectilesMax - config.projectilesMin + 1); projectiles = (int) (projectiles * primary.getSplitProjectiles(stack)); - + for(int i = 0; i < projectiles; i++) { float damage = calcDamage(ctx, stack, primary, calcWear, index); float spread = calcSpread(ctx, stack, primary, config, calcWear, index, aim); - + if(config.pType == ProjectileType.BULLET) { EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(entity, config, damage, spread, sideOffset, heightOffset, forwardOffset); if(ItemGunBaseNT.getIsLockedOn(stack)) mk4.lockonTarget = entity.worldObj.getEntityByID(ItemGunBaseNT.getLockonTarget(stack)); @@ -242,18 +242,18 @@ public class Lego { entity.worldObj.spawnEntityInWorld(mk4); } } - + if(player != null) player.addStat(MainRegistry.statBullets, 1); mag.useUpAmmo(stack, ctx.inventory, 1); if(calcWear) ItemGunBaseNT.setWear(stack, index, Math.min(ItemGunBaseNT.getWear(stack, index) + config.wear, ctx.config.getDurability(stack))); } - + public static float getStandardWearSpread(ItemStack stack, GunConfig config, int index) { float percent = (float) ItemGunBaseNT.getWear(stack, index) / config.getDurability(stack); if(percent < 0.5F) return 0F; return (percent - 0.5F) * 2F; } - + /** Returns the standard multiplier for damage based on wear */ public static float getStandardWearDamage(ItemStack stack, GunConfig config, int index) { float percent = (float) ItemGunBaseNT.getWear(stack, index) / config.getDurability(stack); @@ -265,7 +265,7 @@ public class Lego { public static float calcDamage(LambdaContext ctx, ItemStack stack, Receiver primary, boolean calcWear, int index) { return primary.getBaseDamage(stack) * (calcWear ? getStandardWearDamage(stack, ctx.config, index) : 1); } - + public static float calcSpread(LambdaContext ctx, ItemStack stack, Receiver primary, BulletConfig config, boolean calcWear, int index, boolean aim) { // the gun's innate spread, SMGs will have poor accuracy no matter what float spreadInnate = primary.getInnateSpread(stack); @@ -275,10 +275,10 @@ public class Lego { float spreadHipfire = aim ? 0F : primary.getHipfireSpread(stack); // extra spread caused by weapon durability, [0;0.125] by default float spreadWear = !calcWear ? 0F : (getStandardWearSpread(stack, ctx.config, index) * primary.getDurabilitySpread(stack)); - + return spreadInnate + spreadAmmo + spreadHipfire + spreadWear; } - + public static void standardExplode(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, float range) { standardExplode(bullet, mop, range, 1F); } public static void standardExplode(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, float range, float damageMod) { ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, range, bullet.getThrower()); @@ -301,9 +301,9 @@ public class Lego { vnt.setSFX(new ExplosionEffectTiny()); vnt.explode(); } - + /** anims for the DEBUG revolver, mostly a copy of the li'lpip but with some fixes regarding the cylinder movement */ - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DEBUG_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DEBUG_ANIMS = (stack, type) -> { switch(type) { case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250)) @@ -325,15 +325,15 @@ public class Lego { .addBus("RELAOD_TILT", new BusAnimationSequence().addPos(-15, 0, 0, 100).addPos(65, 0, 0, 100).addPos(45, 0, 0, 50).addPos(0, 0, 0, 200).addPos(0, 0, 0, 200).addPos(-80, 0, 0, 100).addPos(-80, 0, 0, 100).addPos(0, 0, 0, 200)) .addBus("RELOAD_CYLINDER", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(90, 0, 0, 100).addPos(90, 0, 0, 450).addPos(0, 0, 0, 70)); } - + return null; }; - + /* * Be honest. Do you genuinely think posting a random screenshot of your game with absolutely ZERO context of what modpack, what * Shaders if any or literally any context at all would come to a magic solution? * For all we know you accidentally rubbed Vaseline all over your monitor and jizzed in the hdmi socket of your pc - * + * * ~ u/Wolfyy47_, 2024 */ } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 33c583b54..46311576e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -17,7 +17,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.helper.CasingCreator; -import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.sound.AudioWrapper; import com.hbm.util.EntityDamageUtil; @@ -40,10 +40,10 @@ public class Orchestras { public static BiConsumer DEBUG_ORCHESTRA = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 3) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 34) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); @@ -56,14 +56,14 @@ public class Orchestras { if(casing != null) for(int i = 0; i < mag.getCapacity(stack); i++) CasingCreator.composeEffect(entity.worldObj, entity, 0.25, -0.125, -0.125, -0.05, 0, 0, 0.01, casing.getName()); } } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 3) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } @@ -72,24 +72,24 @@ public class Orchestras { public static BiConsumer ORCHESTRA_PEPPERBOX = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 24) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); if(timer == 55) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 1F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 21) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.6F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.8F); if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.6F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 3) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 28) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); if(timer == 45) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.6F); } @@ -98,26 +98,26 @@ public class Orchestras { public static BiConsumer ORCHESTRA_ATLAS = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); if(timer == 44) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.9F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.9F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 24) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 34) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } @@ -126,26 +126,26 @@ public class Orchestras { public static BiConsumer ORCHESTRA_DANI = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); if(timer == 44) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.9F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.9F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 24) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 34) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } @@ -154,35 +154,35 @@ public class Orchestras { public static BiConsumer ORCHESTRA_HENRY = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); } - if(type == AnimType.RELOAD_CYCLE) { + if(type == GunAnimation.RELOAD_CYCLE) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); } - if(type == AnimType.RELOAD_END) { + if(type == GunAnimation.RELOAD_END) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.9F); if(timer == 12 && ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmountBeforeReload(stack) <= 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.9F); if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 1F); if(timer == 44) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 1F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 14) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.5, -0.125, aiming ? -0.125 : -0.375D, 0, 0.12, -0.12, 0.01, -7.5F + (float)entity.getRNG().nextGaussian() * 5F, (float)entity.getRNG().nextGaussian() * 1.5F, casing.getName(), true, 60, 0.5D, 20); } if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 1F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 1F); } @@ -191,34 +191,34 @@ public class Orchestras { public static BiConsumer ORCHESTRA_GREASEGUN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.EQUIP) { + if(type == GunAnimation.EQUIP) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 2) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.55, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -7.5F + (float)entity.getRNG().nextGaussian() * 5F, 12F + (float)entity.getRNG().nextGaussian() * 5F, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.8F); if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 24) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.8F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1.25F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); } @@ -227,33 +227,33 @@ public class Orchestras { public static BiConsumer ORCHESTRA_MARESLEG = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.8F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunReload", 1F, 1F); } - if(type == AnimType.RELOAD_CYCLE) { + if(type == GunAnimation.RELOAD_CYCLE) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunReload", 1F, 1F); } - if(type == AnimType.RELOAD_END) { + if(type == GunAnimation.RELOAD_END) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.7F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.7F); if(timer == 17) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); if(timer == 29) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 14) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, -0.125, aiming ? -0.125 : -0.375D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 5F, (float)entity.getRNG().nextGaussian() * 2.5F, casing.getName(), true, 60, 0.5D, 20); } if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); } @@ -262,33 +262,33 @@ public class Orchestras { public static BiConsumer ORCHESTRA_MARESLEG_SHORT = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.8F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunReload", 1F, 1F); } - if(type == AnimType.RELOAD_CYCLE) { + if(type == GunAnimation.RELOAD_CYCLE) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunReload", 1F, 1F); } - if(type == AnimType.RELOAD_END) { + if(type == GunAnimation.RELOAD_END) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.7F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.7F); if(timer == 17) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); if(timer == 29) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 14) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, -0.125, aiming ? -0.125 : -0.375D, 0, -0.08, 0, 0.01, -15F + (float)entity.getRNG().nextGaussian() * 5F, (float)entity.getRNG().nextGaussian() * 2.5F, casing.getName(), true, 60, 0.5D, 20); } if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); } @@ -297,11 +297,11 @@ public class Orchestras { public static BiConsumer ORCHESTRA_MARESLEG_AKIMBO = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 14) { int offset = ctx.configIndex == 0 ? -1 : 1; SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); @@ -317,11 +317,11 @@ public class Orchestras { public static BiConsumer ORCHESTRA_FLAREGUN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.8F); if(timer == 4) { IMagazine mag = ctx.config.getReceivers(stack)[0].getMagazine(stack); @@ -334,14 +334,14 @@ public class Orchestras { if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertCanister", 1F, 1F); if(timer == 24) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.8F); if(timer == 29) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); } @@ -350,10 +350,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_NOPIP = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 3) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 34) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); @@ -366,14 +366,14 @@ public class Orchestras { if(casing != null) for(int i = 0; i < mag.getCapacity(stack); i++) CasingCreator.composeEffect(entity.worldObj, entity, 0.25, -0.125, -0.125, -0.05, 0, 0, 0.01, -6.5F + (float)entity.getRNG().nextGaussian() * 3F, (float)entity.getRNG().nextGaussian() * 5F, casing.getName()); } } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 3) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } @@ -382,32 +382,32 @@ public class Orchestras { public static BiConsumer ORCHESTRA_CARBINE = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 1) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, 0.21, -0.06, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, 2.5F + (float)entity.getRNG().nextGaussian() * 2F, casing.getName(), true, 60, 0.5D, 20); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); } - if(type == AnimType.RELOAD_END) { + if(type == GunAnimation.RELOAD_END) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); if(timer == 31) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 6) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); } @@ -416,56 +416,56 @@ public class Orchestras { public static BiConsumer ORCHESTRA_AM180 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); if(ClientConfig.GUN_ANIMS_LEGACY.get()) { - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.4375, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, -0.06, 0, 0.01, (float)entity.getRNG().nextGaussian() * 10F, (float)entity.getRNG().nextGaussian() * 10F, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 6) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.9F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.25F, 1F); if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.9F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 35) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); } } else { - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.4375, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, -0.06, 0, 0.01, (float)entity.getRNG().nextGaussian() * 10F, (float)entity.getRNG().nextGaussian() * 10F, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 6) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.9F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 6) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.25F, 1F); if(timer == 48) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 54) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.9F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 6) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.8F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1.0F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 6) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 53) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); } @@ -475,10 +475,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_LIBERATOR = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.75F); if(timer == 4) { IMagazine mag = ctx.config.getReceivers(stack)[0].getMagazine(stack); @@ -488,21 +488,21 @@ public class Orchestras { } if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); } - if(type == AnimType.RELOAD_CYCLE) { + if(type == GunAnimation.RELOAD_CYCLE) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); } - if(type == AnimType.RELOAD_END) { + if(type == GunAnimation.RELOAD_END) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.75F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.75F); IMagazine mag = ctx.config.getReceivers(stack)[0].getMagazine(stack); int toEject = mag.getAmountAfterReload(stack) - mag.getAmount(stack, ctx.inventory); @@ -518,21 +518,21 @@ public class Orchestras { public static BiConsumer ORCHESTRA_CONGOLAKE = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 15) { IMagazine mag = ctx.config.getReceivers(stack)[0].getMagazine(stack); SpentCasing casing = mag.getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.625, aiming ? -0.0625 : -0.25, aiming ? 0 : -0.375D, 0, 0.18, 0.12, 0.01, -5F + (float)entity.getRNG().nextGaussian() * 3.5F, -10F + entity.getRNG().nextFloat() * 5F, casing.getName(), true, 60, 0.5D, 20); } } - if(type == AnimType.RELOAD || type == AnimType.RELOAD_CYCLE) { + if(type == GunAnimation.RELOAD || type == GunAnimation.RELOAD_CYCLE) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.glReload", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 9) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.glOpen", 1F, 1F); if(timer == 27) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.glClose", 1F, 1F); } @@ -540,10 +540,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_FLAMER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE && entity.worldObj.isRemote) { + if(type == GunAnimation.CYCLE && entity.worldObj.isRemote) { AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity); if(timer < 5) { @@ -564,13 +564,13 @@ public class Orchestras { } } //stop sound due to state change - if(type != AnimType.CYCLE && entity.worldObj.isRemote) { + if(type != GunAnimation.CYCLE && entity.worldObj.isRemote) { AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity); if(runningAudio != null && runningAudio.isPlaying()) runningAudio.stopSound(); } if(entity.worldObj.isRemote) return; - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1F); if(timer == 35) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.5F, 1F); if(timer == 60) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.75F); @@ -582,10 +582,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_FLAMER_DAYBREAKER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1F); if(timer == 35) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.5F, 1F); if(timer == 60) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.75F); @@ -597,27 +597,27 @@ public class Orchestras { public static BiConsumer ORCHESTRA_LAG = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 1) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.0625, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 5F, 10F + entity.getRNG().nextFloat() * 10F, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.5F, 1.6F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); @@ -627,30 +627,30 @@ public class Orchestras { public static BiConsumer ORCHESTRA_UZI = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.EQUIP) { + if(type == GunAnimation.EQUIP) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1.25F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 1) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -2.5F + (float)entity.getRNG().nextGaussian() * 5F, 10F + (float)entity.getRNG().nextFloat() * 15F, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 4) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 17) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); if(timer == 31) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); } @@ -659,30 +659,30 @@ public class Orchestras { public static BiConsumer ORCHESTRA_UZI_AKIMBO = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.EQUIP) { + if(type == GunAnimation.EQUIP) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1.25F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 1) { int mult = ctx.configIndex == 0 ? -1 : 1; SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, -0.125, -0.375D * mult, 0, 0.18, -0.12 * mult, 0.01, -2.5F + (float)entity.getRNG().nextGaussian() * 5F, (10F + (float)entity.getRNG().nextFloat() * 15F) * mult, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 4) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 17) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); if(timer == 31) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1F); } @@ -691,22 +691,22 @@ public class Orchestras { public static BiConsumer ORCHESTRA_SPAS = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE || type == AnimType.ALT_CYCLE) { + if(type == GunAnimation.CYCLE || type == GunAnimation.ALT_CYCLE) { if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunCock", 1F, 1F); if(timer == 10) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); //turns out there's a reason why stovepipes look like that if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -3F + (float)entity.getRNG().nextGaussian() * 2.5F, -15F + entity.getRNG().nextFloat() * -5F, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunCock", 1F, 1F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { IMagazine mag = ctx.config.getReceivers(stack)[0].getMagazine(stack); if(mag.getAmount(stack, ctx.inventory) == 0) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); @@ -714,14 +714,14 @@ public class Orchestras { } if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunReload", 1F, 1F); } - if(type == AnimType.RELOAD_CYCLE) { + if(type == GunAnimation.RELOAD_CYCLE) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunReload", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunCockOpen", 1F, 1F); if(timer == 18) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunCockClose", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 18) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.foley.gunWhack", 1F, 1F); if(timer == 25) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.foley.gunWhack", 1F, 1F); if(timer == 29) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.shotgunCockClose", 1F, 1F); @@ -731,10 +731,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_PANERSCHRECK = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertCanister", 1F, 1F); } }; @@ -742,33 +742,33 @@ public class Orchestras { public static BiConsumer ORCHESTRA_G3 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean scoped = stack.getItem() == ModItems.gun_g3_zebra || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE); boolean aiming = ItemGunBaseNT.getIsAiming(stack) && !scoped; - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.5, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, (float)entity.getRNG().nextGaussian() * 5F, 12.5F + (float)entity.getRNG().nextFloat() * 5F, casing.getName()); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.8F); if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.9F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 4) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 28) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); @@ -778,7 +778,7 @@ public class Orchestras { public static BiConsumer ORCHESTRA_STINGER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); if(entity.worldObj.isRemote) { @@ -801,17 +801,17 @@ public class Orchestras { } } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertCanister", 1F, 1F); } }; public static BiConsumer ORCHESTRA_CHEMTHROWER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE && entity.worldObj.isRemote) { + if(type == GunAnimation.CYCLE && entity.worldObj.isRemote) { AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity); if(timer < 5) { @@ -832,7 +832,7 @@ public class Orchestras { } } //stop sound due to state change - if(type != AnimType.CYCLE && entity.worldObj.isRemote) { + if(type != GunAnimation.CYCLE && entity.worldObj.isRemote) { AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity); if(runningAudio != null && runningAudio.isPlaying()) runningAudio.stopSound(); } @@ -841,16 +841,16 @@ public class Orchestras { public static BiConsumer ORCHESTRA_AMAT = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.EQUIP) { + if(type == GunAnimation.EQUIP) { if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 0.5F, 1.25F); if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 0.5F, 1.25F); } - - if(type == AnimType.CYCLE) { + + if(type == GunAnimation.CYCLE) { if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); if(timer == 12) { @@ -861,28 +861,28 @@ public class Orchestras { 0.01, -10F + (float) entity.getRNG().nextGaussian() * 10F, (float) entity.getRNG().nextGaussian() * 12.5F, casing.getName(), true, 60, 0.5D, 10); } } - - if(type == AnimType.CYCLE_DRY) { + + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); } - - if(type == AnimType.RELOAD) { + + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 41) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 23) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 0.5F, 1F); if(timer == 45) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 0.5F, 1F); } @@ -891,15 +891,15 @@ public class Orchestras { public static BiConsumer ORCHESTRA_M2 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.EQUIP) { + if(type == GunAnimation.EQUIP) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:turret.howard_reload", 1F, 1F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.125, aiming ? 0 : -0.3125D, 0, 0.06, -0.18, 0.01, (float)entity.getRNG().nextGaussian() * 20F, 12.5F + (float)entity.getRNG().nextGaussian() * 7.5F, casing.getName()); @@ -910,21 +910,21 @@ public class Orchestras { public static BiConsumer ORCHESTRA_SHREDDER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.shredderCycle", 0.25F, 1.5F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.shredderCycle", 0.25F, 1.5F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 28) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); } @@ -933,25 +933,25 @@ public class Orchestras { public static BiConsumer ORCHESTRA_SHREDDER_SEXY = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0 && ctx.config.getReceivers(stack)[0].getMagazine(stack).getType(stack, null) == XFactory12ga.g12_equestrian_bj) { ItemGunBaseNT.setTimer(stack, 0, 20); } - + if(timer == 2) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? -0.0625 : -0.125, aiming ? -0.125 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); if(timer == 4) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.75F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); @@ -961,11 +961,11 @@ public class Orchestras { if(timer == 74) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); if(timer == 88) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.75F); if(timer == 100) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); - + if(timer == 55) ctx.config.getReceivers(stack)[0].getMagazine(stack).reloadAction(stack, ctx.inventory); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); if(timer == 25) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); @@ -982,10 +982,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_QUADRO = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertCanister", 1F, 1F); } }; @@ -993,11 +993,11 @@ public class Orchestras { public static BiConsumer ORCHESTRA_MINIGUN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { int rounds = WeaponModManager.hasUpgrade(stack, ctx.configIndex, WeaponModManager.ID_MINIGUN_SPEED) ? 3 : 1; for(int i = 0; i < rounds; i++) { @@ -1007,14 +1007,14 @@ public class Orchestras { } if(timer == (WeaponModManager.hasUpgrade(stack, 0, 207) ? 3 : 1)) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); if(timer == 1) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } }; @@ -1022,10 +1022,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_MINIGUN_DUAL = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { int index = ctx.configIndex == 0 ? -1 : 1; int rounds = WeaponModManager.hasUpgrade(stack, ctx.configIndex, WeaponModManager.ID_MINIGUN_SPEED) ? 3 : 1; @@ -1036,14 +1036,14 @@ public class Orchestras { } if(timer == (WeaponModManager.hasUpgrade(stack, 0, 207) ? 3 : 1)) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); if(timer == 1) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); } }; @@ -1051,19 +1051,19 @@ public class Orchestras { public static BiConsumer ORCHESTRA_MISSILE_LAUNCHER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1.25F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 1F, 0.9F); if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertCanister", 1F, 1F); if(timer == 42) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 1F, 0.9F); } - if(type == AnimType.JAMMED || type == AnimType.INSPECT) { + if(type == GunAnimation.JAMMED || type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 1F, 0.9F); if(timer == 27) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 1F, 0.9F); } @@ -1072,17 +1072,17 @@ public class Orchestras { public static BiConsumer ORCHESTRA_TESLA = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.shredderCycle", 0.25F, 1.25F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.shredderCycle", 0.25F, 1.25F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:block.squeakyToy", 0.25F, 1F); } }; @@ -1090,21 +1090,21 @@ public class Orchestras { public static BiConsumer ORCHESTRA_LASER_PISTOL = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1.5F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1.25F); if(timer == 34) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1.25F); if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.25F); } - - if(type == AnimType.JAMMED) { + + if(type == GunAnimation.JAMMED) { if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.25F); if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.25F, 1.5F); @@ -1114,30 +1114,30 @@ public class Orchestras { public static BiConsumer ORCHESTRA_STG77 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); if(ClientConfig.GUN_ANIMS_LEGACY.get()) { - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, aiming ? 0.125 : 0.125, aiming ? -0.125 : -0.25, aiming ? -0.125 : -0.25D, 0, 0.18, -0.12, 0.01, (float)entity.getRNG().nextGaussian() * 5F, 7.5F + entity.getRNG().nextFloat() * 5F, casing.getName()); } if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 0.25F, 1.25F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.8F); if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.9F); if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 0.25F, 1.25F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 24) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 34) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); @@ -1145,26 +1145,26 @@ public class Orchestras { if(timer == 124) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } } else { - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, aiming ? 0.125 : 0.25, aiming ? -0.125 : -0.25, aiming ? -0.125 : -0.25D, 0, 0.18, -0.12, 0.01, (float)entity.getRNG().nextGaussian() * 5F, 7.5F + entity.getRNG().nextFloat() * 5F, casing.getName()); } if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 0.25F, 1.25F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.8F); if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.9F); if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 0.25F, 1.25F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.25F, 1.25F); if(timer == 38) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 43) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 11) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); @@ -1176,10 +1176,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_TAU = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.SPINUP && entity.worldObj.isRemote) { + if(type == GunAnimation.SPINUP && entity.worldObj.isRemote) { AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity); if(timer < 300) { @@ -1199,32 +1199,32 @@ public class Orchestras { } } //stop sound due to state change - if(type != AnimType.SPINUP && entity.worldObj.isRemote) { + if(type != GunAnimation.SPINUP && entity.worldObj.isRemote) { AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity); if(runningAudio != null && runningAudio.isPlaying()) runningAudio.stopSound(); } if(entity.worldObj.isRemote) return; - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.tau", 0.5F, 0.9F + entity.getRNG().nextFloat() * 0.2F); } - if(type == AnimType.ALT_CYCLE) { + if(type == GunAnimation.ALT_CYCLE) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.tau", 0.5F, 0.7F + entity.getRNG().nextFloat() * 0.2F); } - if(type == AnimType.SPINUP) { + if(type == GunAnimation.SPINUP) { if(timer % 10 == 0 && timer < 130) { IMagazine mag = ctx.config.getReceivers(stack)[0].getMagazine(stack); if(mag.getAmount(stack, ctx.inventory) <= 0) { - ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.CYCLE_DRY, ctx.configIndex); + ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, GunAnimation.CYCLE_DRY, ctx.configIndex); return; } mag.useUpAmmo(stack, ctx.inventory, 1); } if(timer > 200) { - ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.CYCLE_DRY, ctx.configIndex); + ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, GunAnimation.CYCLE_DRY, ctx.configIndex); entity.attackEntityFrom(ModDamageSource.tauBlast, 1_000F); @@ -1253,10 +1253,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_FATMAN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.fatmanFull", 1F, 1F); } }; @@ -1264,27 +1264,27 @@ public class Orchestras { public static BiConsumer ORCHESTRA_LASRIFLE = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1.5F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 18) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.25F, 1F); if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 38) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); if(timer == 22) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); @@ -1294,10 +1294,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_COILGUN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.coilgunReload", 1F, 1F); } }; @@ -1305,14 +1305,14 @@ public class Orchestras { public static BiConsumer ORCHESTRA_HANGMAN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.8F); if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.8F); @@ -1327,7 +1327,7 @@ public class Orchestras { } } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 16 && ctx.getPlayer() != null) { MovingObjectPosition mop = EntityDamageUtil.getMouseOver(ctx.getPlayer(), 3.0D); if(mop != null) { @@ -1346,7 +1346,7 @@ public class Orchestras { } } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.8F); if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.8F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); @@ -1357,18 +1357,18 @@ public class Orchestras { public static BiConsumer ORCHESTRA_BOLTER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 1) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.5, aiming ? 0 : -0.125, aiming ? -0.0625 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 5F, 10F + entity.getRNG().nextFloat() * 10F, casing.getName()); } } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); } @@ -1377,10 +1377,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_FOLLY = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.screw", 1F, 1F); if(timer == 80) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertRocket", 1F, 1F); if(timer == 120) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.screw", 1F, 1F); @@ -1390,10 +1390,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_DOUBLE_BARREL = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.75F); if(timer == 19) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 0.9F); if(timer == 29) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.8F); @@ -1406,12 +1406,12 @@ public class Orchestras { } } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 0.75F); if(timer == 19) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.8F); } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); } }; @@ -1419,17 +1419,17 @@ public class Orchestras { public static BiConsumer ORCHESTRA_ABERRATOR = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.75F); if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 0.75F); if(timer == 42) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.75F); } - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 1) { int cba = (stack.getItem() == ModItems.gun_aberrator_eott && ctx.configIndex == 0) ? -1 : 1; SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); @@ -1437,25 +1437,25 @@ public class Orchestras { } } - if(type == AnimType.CYCLE_DRY) { + if(type == GunAnimation.CYCLE_DRY) { if(timer == 1) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); if(timer == 9) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.75F); } }; - + public static BiConsumer ORCHESTRA_MAS36 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack) && !WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE); - if(type == AnimType.EQUIP) { + if(type == GunAnimation.EQUIP) { if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1F); if(timer == 18) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); } - - if(type == AnimType.CYCLE) { + + if(type == GunAnimation.CYCLE) { if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); if(timer == 12) { @@ -1466,27 +1466,27 @@ public class Orchestras { 0.01, -10F + (float) entity.getRNG().nextGaussian() * 10F, (float) entity.getRNG().nextGaussian() * 12.5F, casing.getName(), true, 60, 0.5D, 10); } } - - if(type == AnimType.CYCLE_DRY) { + + if(type == GunAnimation.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); } - if(type == AnimType.RELOAD) { + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 1F, 1F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.rifleCock", 1F, 1F); if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 1F, 1F); } - if(type == AnimType.JAMMED) { + if(type == GunAnimation.JAMMED) { if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 23) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); } - if(type == AnimType.INSPECT) { + if(type == GunAnimation.INSPECT) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); if(timer == 17) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); } @@ -1495,10 +1495,10 @@ public class Orchestras { public static BiConsumer ORCHESTRA_FIREEXT = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - - if(type == AnimType.RELOAD) { + + if(type == GunAnimation.RELOAD) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pressureValve", 1F, 1F); } }; @@ -1506,15 +1506,15 @@ public class Orchestras { public static BiConsumer ORCHESTRA_CHARGE_THROWER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - - if(type == AnimType.CYCLE_DRY) { + + if(type == GunAnimation.CYCLE_DRY) { Entity e = entity.worldObj.getEntityByID(ItemGunChargeThrower.getLastHook(stack)); if(timer == 0 && e == null) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); } - - if(type == AnimType.RELOAD) { + + if(type == GunAnimation.RELOAD) { if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertRocket", 1F, 1F); if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 1F, 1F); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java index cefcc4aad..74d8e6b57 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java @@ -17,10 +17,10 @@ import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; @@ -32,7 +32,7 @@ public class XFactory10ga { public static BulletConfig g10_du; public static BulletConfig g10_slug; public static BulletConfig g10_explosive; - + public static BiConsumer LAMBDA_TINY_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; Lego.tinyExplode(bullet, mop, 1.5F); bullet.setDead(); @@ -79,12 +79,12 @@ public class XFactory10ga { .anim(XFactory12ga.LAMBDA_SEXY_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER_SEXY) ).setUnlocalizedName("gun_autoshotgun_heretic"); } - + public static BiConsumer LAMBDA_RECOIL_DOUBLE_BARREL = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DOUBLE_BARREL_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DOUBLE_BARREL_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-60, 0, 0, 0).addPos(0, 0, -3, 500, IType.SIN_DOWN)); @@ -148,7 +148,7 @@ public class XFactory10ga { .addPos(-5, 0, 0, 150, IType.SIN_DOWN) .addPos(0, 0, 0, 100, IType.SIN_FULL)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index c70d33501..2216a05d9 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -32,10 +32,10 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.BobMathUtil; import com.hbm.util.TrackerUtil; import com.hbm.util.Vec3NT; @@ -86,11 +86,11 @@ public class XFactory12ga { public static BulletConfig g12_sub_magnum; public static BulletConfig g12_sub_explosive; public static BulletConfig g12_sub_phosphorus; - + public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { Lego.standardExplode(bullet, mop, 2F); bullet.setDead(); }; - + public static BiConsumer LAMBDA_BOAT = (bullet, mop) -> { EntityDuchessGambit pippo = new EntityDuchessGambit(bullet.worldObj); pippo.posX = mop.hitVec.xCoord; @@ -100,13 +100,13 @@ public class XFactory12ga { bullet.worldObj.playSoundEffect(pippo.posX, pippo.posY + 50, pippo.posZ, "hbm:weapon.boat", 100F, 1F); bullet.setDead(); }; - + public static BulletConfig makeShredderConfig(BulletConfig original, BulletConfig submunition) { BulletConfig cfg = new BulletConfig().setBeam().setRenderRotations(false).setLife(5).setDamage(original.damageMult * original.projectilesMax).setupDamageClass(DamageClass.LASER); cfg.setItem(original.ammo); cfg.setCasing(original.casing); cfg.setOnBeamImpact((beam, mop) -> { - + int projectiles = submunition.projectilesMin; if(submunition.projectilesMax > submunition.projectilesMin) projectiles += beam.worldObj.rand.nextInt(submunition.projectilesMax - submunition.projectilesMin + 1); @@ -117,9 +117,9 @@ public class XFactory12ga { mop.hitVec.xCoord += dir.offsetX * 0.1; mop.hitVec.yCoord += dir.offsetY * 0.1; mop.hitVec.zCoord += dir.offsetZ * 0.1; - + spawnPulse(beam.worldObj, mop, beam.rotationYaw, beam.rotationPitch); - + List blast = beam.worldObj.getEntitiesWithinAABBExcludingEntity(beam, AxisAlignedBB.getBoundingBox(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord).expand(0.75, 0.75, 0.75)); DamageSource source = BulletConfig.getDamage(beam, beam.getThrower(), DamageClass.LASER); @@ -132,17 +132,17 @@ public class XFactory12ga { e.attackEntityFrom(source, beam.damage); } } - + for(int i = 0; i < projectiles; i++) { EntityBulletBaseMK4 bullet = new EntityBulletBaseMK4(beam.worldObj, beam.thrower, submunition, beam.damage * submunition.damageMult, 0.2F, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, dir.offsetX, dir.offsetY, dir.offsetZ); bullet.worldObj.spawnEntityInWorld(bullet); } } - + if(mop.typeOfHit == mop.typeOfHit.ENTITY) { - + spawnPulse(beam.worldObj, mop, beam.rotationYaw, beam.rotationPitch); - + for(int i = 0; i < projectiles; i++) { Vec3NT vec = new Vec3NT(beam.worldObj.rand.nextGaussian(), beam.worldObj.rand.nextGaussian(), beam.worldObj.rand.nextGaussian()).normalizeSelf(); EntityBulletBaseMK4 bullet = new EntityBulletBaseMK4(beam.worldObj, beam.thrower, submunition, beam.damage * submunition.damageMult, 0.2F, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, vec.xCoord, vec.yCoord, vec.zCoord); @@ -152,18 +152,18 @@ public class XFactory12ga { }); return cfg; } - + public static BulletConfig makeShredderSubmunition(BulletConfig original) { BulletConfig cfg = original.clone(); cfg.setRicochetAngle(90).setRicochetCount(3).setVel(0.5F).setLife(50).setupDamageClass(DamageClass.LASER).setOnRicochet(LAMBDA_SHREDDER_RICOCHET); return cfg; } - + //this sucks public static BiConsumer LAMBDA_SHREDDER_RICOCHET = (bullet, mop) -> { - + if(mop.typeOfHit == mop.typeOfHit.BLOCK) { - + Block b = bullet.worldObj.getBlock(mop.blockX, mop.blockY, mop.blockZ); if(b.getMaterial() == Material.glass) { bullet.worldObj.func_147480_a(mop.blockX, mop.blockY, mop.blockZ, false); @@ -185,12 +185,12 @@ public class XFactory12ga { double angle = Math.abs(BobMathUtil.getCrossAngle(vel, face) - 90); if(angle <= bullet.config.ricochetAngle) { - + spawnPulse(bullet.worldObj, mop, bullet.rotationYaw, bullet.rotationPitch); - + List blast = bullet.worldObj.getEntitiesWithinAABBExcludingEntity(bullet, AxisAlignedBB.getBoundingBox(bullet.posX, bullet.posY, bullet.posZ, bullet.posX, bullet.posY, bullet.posZ).expand(0.5, 0.5, 0.5)); DamageSource source = BulletConfig.getDamage(bullet, bullet.getThrower(), DamageClass.LASER); - + for(Entity e : blast) { if(!e.isEntityAlive()) continue; if(e instanceof EntityLivingBase) { @@ -200,13 +200,13 @@ public class XFactory12ga { e.attackEntityFrom(source, bullet.damage); } } - + bullet.ricochets++; if(bullet.ricochets > bullet.config.maxRicochetCount) { bullet.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); bullet.setDead(); } - + switch(mop.sideHit) { case 0: case 1: bullet.motionY *= -1; break; case 2: case 3: bullet.motionZ *= -1; break; @@ -223,13 +223,13 @@ public class XFactory12ga { } } }; - + public static void spawnPulse(World world, MovingObjectPosition mop, float yaw, float pitch) { double x = mop.hitVec.xCoord; double y = mop.hitVec.yCoord; double z = mop.hitVec.zCoord; - + if(mop.typeOfHit == mop.typeOfHit.BLOCK) { if(mop.sideHit == ForgeDirection.UP.ordinal()) { yaw = 0F; pitch = 0F; } if(mop.sideHit == ForgeDirection.DOWN.ordinal()) { yaw = 0F; pitch = 0F; } @@ -255,7 +255,7 @@ public class XFactory12ga { data.setFloat("scale", 0.75F); PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(world.provider.dimensionId, x, y, z, 100)); } - + public static void init() { float buckshotSpread = 0.035F; @@ -288,7 +288,7 @@ public class XFactory12ga { g12_shredder_magnum = makeShredderConfig(g12_magnum, g12_sub_magnum); g12_shredder_explosive = makeShredderConfig(g12_explosive, g12_sub_explosive); g12_shredder_phosphorus = makeShredderConfig(g12_phosphorus, g12_sub_phosphorus); - + ModItems.gun_maresleg = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(600).draw(10).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) @@ -330,7 +330,7 @@ public class XFactory12ga { .setupStandardConfiguration() .anim(LAMBDA_MARESLEG_SHORT_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG_SHORT) ).setUnlocalizedName("gun_maresleg_broken"); - + ModItems.gun_liberator = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(200).draw(20).inspect(21).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) @@ -373,7 +373,7 @@ public class XFactory12ga { .setupStandardConfiguration() .anim(LAMBDA_SHREDDER_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER) ).setUnlocalizedName("gun_autoshotgun_shredder"); - + ModItems.gun_autoshotgun_sexy = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() .dura(5_000).draw(20).inspect(65).reloadSequential(true).inspectCancel(false).crosshair(Crosshair.L_CIRCLE).hideCrosshair(false).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) @@ -385,28 +385,28 @@ public class XFactory12ga { .anim(LAMBDA_SEXY_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER_SEXY) ).setUnlocalizedName("gun_autoshotgun_sexy"); } - + public static Function LAMBDA_NAME_MARESLEG = (stack) -> { if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SAWED_OFF)) return stack.getUnlocalizedName() + "_short"; return null; }; - + public static BiConsumer LAMBDA_RECOIL_MARESLEG = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - + public static BiConsumer LAMBDA_RECOIL_LIBERATOR = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - + public static BiConsumer LAMBDA_RECOIL_AUTOSHOTGUN = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5) + 1.5F, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); }; - + public static BiConsumer LAMBDA_RECOIL_SEXY = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); }; - + public static BiConsumer LAMBDA_SPAS_SECONDARY = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; EntityPlayer player = ctx.getPlayer(); @@ -429,7 +429,7 @@ public class XFactory12ga { ItemGunBaseNT.setTimer(stack, index, 20); } else { if(rec.getDoesDryFire(stack)) { - ItemGunBaseNT.playAnimation(player, stack, AnimType.CYCLE_DRY, index); + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.CYCLE_DRY, index); ItemGunBaseNT.setState(stack, index, GunState.DRAWING); ItemGunBaseNT.setTimer(stack, index, rec.getDelayAfterDryFire(stack)); } @@ -440,7 +440,7 @@ public class XFactory12ga { } }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MARESLEG_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MARESLEG_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-60, 0, 0, 0).addPos(0, 0, -3, 500, IType.SIN_DOWN)); @@ -479,11 +479,11 @@ public class XFactory12ga { .addBus("LIFT", new BusAnimationSequence().addPos(-35, 0, 0, 300, IType.SIN_FULL).addPos(-35, 0, 0, 1150).addPos(0, 0, 0, 500, IType.SIN_FULL)) .addBus("TURN", new BusAnimationSequence().addPos(0, 0, 0, 450).addPos(0, 0, -90, 500, IType.SIN_FULL).addPos(0, 0, -90, 500).addPos(0, 0, 0, 500, IType.SIN_FULL)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MARESLEG_SHORT_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MARESLEG_SHORT_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-60, 0, 0, 0).addPos(0, 0, -3, 250, IType.SIN_DOWN)); @@ -504,12 +504,12 @@ public class XFactory12ga { .addBus("LEVER", new BusAnimationSequence().addPos(-85, 0, 0, 0).addPos(-15, 0, 0, 200).addPos(-15, 0, 0, 650).addPos(-85, 0, 0, 200).addPos(-15, 0, 0, 200).addPos(-15, 0, 0, 200).addPos(-85, 0, 0, 200).addPos(0, 0, 0, 200)) .addBus("FLAG", new BusAnimationSequence().addPos(1, 1, 1, 0)); } - + return LAMBDA_MARESLEG_ANIMS.apply(stack, type); }; /** This fucking sucks */ - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LIBERATOR_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LIBERATOR_ANIMS = (stack, type) -> { int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); switch(type) { case EQUIP: return new BusAnimation() @@ -602,11 +602,11 @@ public class XFactory12ga { .addBus(ammo < 3 ? "SHELL3" : "NULL", new BusAnimationSequence().addPos(2, -8, -2, 0)) .addBus(ammo < 4 ? "SHELL4" : "NULL", new BusAnimationSequence().addPos(2, -8, -2, 0)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SPAS_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SPAS_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-60, 0, 0, 0).addPos(0, 0, -3, 500, IType.SIN_DOWN)); @@ -621,11 +621,11 @@ public class XFactory12ga { case JAMMED: return ResourceManager.spas_12_anim.get("Jammed"); case INSPECT: return ResourceManager.spas_12_anim.get("Inspect"); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SHREDDER_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SHREDDER_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); @@ -647,11 +647,11 @@ public class XFactory12ga { .addBus("SPEEN", new BusAnimationSequence().addPos(0, 0, 0, 300).addPos(360, 0, 0, 700)) .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 1450).addPos(-2, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SEXY_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SEXY_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 1000, IType.SIN_DOWN)); @@ -676,7 +676,7 @@ public class XFactory12ga { .addBus("BOTTLE", new BusAnimationSequence().setPos(8, -8, -2).addPos(6, -4, -2, 500, IType.SIN_DOWN).addPos(3, -3, -5, 500, IType.SIN_FULL).addPos(3, -2, -5, 1000).addPos(4, -6, -2, 750, IType.SIN_FULL).addPos(6, -8, -2, 500, IType.SIN_UP)) .addBus("SIP", new BusAnimationSequence().setPos(25, 0, 0).hold(500).addPos(-90, 0, 0, 500, IType.SIN_FULL).addPos(-110, 0, 0, 1000).addPos(25, 0, 0, 750, IType.SIN_FULL)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java index 19c398e60..a5948b2d6 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java @@ -20,10 +20,10 @@ import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; @@ -57,21 +57,21 @@ public class XFactory22lr { ).setNameMutator(LAMBDA_NAME_AM180) .setUnlocalizedName("gun_am180"); } - + public static Function LAMBDA_NAME_AM180 = (stack) -> { if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER)) return stack.getUnlocalizedName() + "_silenced"; return null; }; - + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 3000, 0.05D, 1.1D, 0); }; - + public static BiConsumer LAMBDA_RECOIL_AM180 = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_AM180_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_AM180_ANIMS = (stack, type) -> { if(ClientConfig.GUN_ANIMS_LEGACY.get()) { switch(type) { case EQUIP: return new BusAnimation() @@ -106,7 +106,7 @@ public class XFactory22lr { case INSPECT: return ResourceManager.am180_anim.get("Inspect"); } } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java index adfc26784..dd2999528 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java @@ -14,10 +14,10 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.BusAnimationSequence; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; @@ -37,7 +37,7 @@ public class XFactory357 { m357_jhp = new BulletConfig().setItem(EnumAmmo.M357_JHP).setCasing(EnumCasingType.SMALL, 8).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F); m357_ap = new BulletConfig().setItem(EnumAmmo.M357_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(5F).setArmorPiercing(0.15F); m357_express = new BulletConfig().setItem(EnumAmmo.M357_EXPRESS).setCasing(EnumCasingType.SMALL, 8).setDoesPenetrate(true).setDamage(1.5F).setThresholdNegation(2F).setArmorPiercing(0.1F).setWear(1.5F); - + ModItems.gun_light_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) @@ -79,16 +79,16 @@ public class XFactory357 { .anim(LAMBDA_DANI_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI) ).setUnlocalizedName("gun_light_revolver_dani"); } - + public static BiConsumer LAMBDA_RECOIL_ATLAS = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - + public static BiConsumer LAMBDA_RECOIL_DANI = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.75)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ATLAS_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ATLAS_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, 0, 350, IType.SIN_DOWN)); @@ -116,15 +116,15 @@ public class XFactory357 { .addBus("RELOAD_ROT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, 0, 300).addPos(45, 0, 0, 500, IType.SIN_FULL).addPos(45, 0, 0, 500).addPos(-45, 0, 0, 50).addPos(-45, 0, 0, 100).addPos(0, 0, 0, 300)) .addBus("RELOAD_MOVE", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, 0, 300).addPos(0, -2.5, 0, 500, IType.SIN_FULL).addPos(0, -2.5, 0, 500).addPos(0, 0, 0, 350)); } - + return null; }; - - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DANI_ANIMS = (stack, type) -> { + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DANI_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(360 * 3, 0, 0, 1000, IType.SIN_DOWN)); } - + return LAMBDA_ATLAS_ANIMS.apply(stack, type); }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java index ddd435107..7e89c9cd5 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java @@ -18,10 +18,10 @@ import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -32,7 +32,7 @@ public class XFactory35800 { public static BulletConfig p35800; public static BulletConfig p35800_bl; - + public static BiConsumer LAMBDA_BLACK_IMPACT = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY) { Entity hit = mop.entityHit; @@ -45,10 +45,10 @@ public class XFactory35800 { fire.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); bullet.worldObj.spawnEntityInWorld(fire); } - + BulletConfig.LAMBDA_STANDARD_BEAM_HIT.accept(bullet, mop); }; - + public static void init() { p35800 = new BulletConfig().setItem(EnumAmmoSecret.P35_800).setArmorPiercing(0.5F).setThresholdNegation(50F).setBeam().setSpread(0.0F).setLife(3).setRenderRotations(false) @@ -66,7 +66,7 @@ public class XFactory35800 { .setupStandardConfiguration() .anim(LAMBDA_ABERRATOR).orchestra(Orchestras.ORCHESTRA_ABERRATOR) ).setUnlocalizedName("gun_aberrator"); - + ModItems.gun_aberrator_eott = new ItemGunBaseNT(WeaponQuality.SECRET, new GunConfig().dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) @@ -88,12 +88,12 @@ public class XFactory35800 { .anim(LAMBDA_ABERRATOR).orchestra(Orchestras.ORCHESTRA_ABERRATOR) ).setUnlocalizedName("gun_aberrator_eott"); } - + public static BiConsumer LAMBDA_RECOIL_ABERRATOR = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ABERRATOR = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ABERRATOR = (stack, type) -> { boolean aim = ItemGunBaseNT.getIsAiming(stack); int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null); switch(type) { @@ -122,7 +122,7 @@ public class XFactory35800 { case INSPECT: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(0, 0, 0, 0).addPos(-720, 0, 0, 1000, IType.SIN_FULL).addPos(-720, 0, 0, 250).addPos(0, 0, 0, 1000, IType.SIN_FULL)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java index ca090b375..c0cbc903f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java @@ -30,10 +30,10 @@ import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import com.hbm.util.TrackerUtil; import com.hbm.util.DamageResistanceHandler.DamageClass; @@ -52,7 +52,7 @@ public class XFactory40mm { public static BulletConfig g26_flare; public static BulletConfig g26_flare_supply; public static BulletConfig g26_flare_weapon; - + public static BulletConfig g40_he; public static BulletConfig g40_heat; public static BulletConfig g40_demo; @@ -97,7 +97,7 @@ public class XFactory40mm { public static BiConsumer LAMBDA_STANDARD_EXPLODE_PHOSPHORUS = (bullet, mop) -> { spawnFire(bullet, mop, true, 400); }; - + public static void spawnFire(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, boolean phosphorus, int duration) { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; World world = bullet.worldObj; @@ -125,7 +125,7 @@ public class XFactory40mm { public static Consumer LAMBDA_SPAWN_C130_SUPPLIESS = (entity) -> { spawnPlane(entity, C130PayloadType.SUPPLIES); }; public static Consumer LAMBDA_SPAWN_C130_WEAPONS = (entity) -> { spawnPlane(entity, C130PayloadType.WEAPONS); }; - + public static void spawnPlane(Entity entity, C130PayloadType payload) { if(!entity.worldObj.isRemote && entity.ticksExisted == 40) { EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity; @@ -139,13 +139,13 @@ public class XFactory40mm { TrackerUtil.setTrackingRange(bullet.worldObj, c130, 250); } } - + public static void init() { - + g26_flare = new BulletConfig().setItem(EnumAmmo.G26_FLARE).setCasing(EnumCasingType.LARGE, 4).setLife(100).setVel(2F).setGrav(0.015D).setRenderRotations(false).setOnImpact(LAMBDA_STANDARD_IGNITE).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x9E1616).setScale(2F).register("g26Flare")); g26_flare_supply = new BulletConfig().setItem(EnumAmmo.G26_FLARE_SUPPLY).setCasing(EnumCasingType.LARGE, 4).setLife(100).setVel(2F).setGrav(0.015D).setRenderRotations(false).setOnImpact(LAMBDA_STANDARD_IGNITE).setOnUpdate(LAMBDA_SPAWN_C130_SUPPLIESS).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x3C80F0).setScale(2F).register("g26FlareSupply")); g26_flare_weapon = new BulletConfig().setItem(EnumAmmo.G26_FLARE_WEAPON).setCasing(EnumCasingType.LARGE, 4).setLife(100).setVel(2F).setGrav(0.015D).setRenderRotations(false).setOnImpact(LAMBDA_STANDARD_IGNITE).setOnUpdate(LAMBDA_SPAWN_C130_WEAPONS).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x278400).setScale(2F).register("g26FlareWeapon")); - + BulletConfig g40_base = new BulletConfig().setLife(200).setVel(2F).setGrav(0.035D); g40_he = g40_base.clone().setItem(EnumAmmo.G40_HE).setCasing(EnumCasingType.LARGE, 4).setOnImpact(LAMBDA_STANDARD_EXPLODE).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x777777).setScale(2, 2F, 1.5F).register("g40")); g40_heat = g40_base.clone().setItem(EnumAmmo.G40_HEAT).setCasing(EnumCasingType.LARGE, 4).setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT).setDamage(0.5F).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x5E6854).setScale(2, 2F, 1.5F).register("g40heat")); @@ -163,7 +163,7 @@ public class XFactory40mm { .setupStandardConfiguration() .anim(LAMBDA_FLAREGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAREGUN) ).setUnlocalizedName("gun_flaregun"); - + ModItems.gun_congolake = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(400).draw(7).inspect(39).reloadSequential(true).reloadChangeType(true).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) @@ -175,16 +175,16 @@ public class XFactory40mm { .anim(LAMBDA_CONGOLAKE_ANIMS).orchestra(Orchestras.ORCHESTRA_CONGOLAKE) ).setUnlocalizedName("gun_congolake"); } - + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 1500, 0.025D, 1.05D, 0); }; - + public static BiConsumer LAMBDA_RECOIL_GL = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FLAREGUN_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FLAREGUN_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, 0, 350, IType.SIN_DOWN)); @@ -203,11 +203,11 @@ public class XFactory40mm { case INSPECT: return new BusAnimation() .addBus("FLIP", new BusAnimationSequence().addPos(-360 * 3, 0, 0, 1500, IType.SIN_FULL)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CONGOLAKE_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CONGOLAKE_ANIMS = (stack, type) -> { int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); switch(type) { case EQUIP: return ResourceManager.congolake_anim.get("Equip"); @@ -218,7 +218,7 @@ public class XFactory40mm { case JAMMED: return ResourceManager.congolake_anim.get("Jammed"); case INSPECT: return ResourceManager.congolake_anim.get("Inspect"); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java index 345ab3d4d..ad7225d4e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java @@ -25,10 +25,10 @@ import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; @@ -37,7 +37,7 @@ import net.minecraft.util.ResourceLocation; public class XFactory44 { public static final ResourceLocation scope_lilmac = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_44.png"); - + public static BulletConfig m44_bp; public static BulletConfig m44_sp; public static BulletConfig m44_fmj; @@ -46,7 +46,7 @@ public class XFactory44 { public static BulletConfig m44_express; public static BulletConfig m44_equestrian_pip; public static BulletConfig m44_equestrian_mn7; - + public static BiConsumer LAMBDA_BOXCAR = (bullet, mop) -> { EntityBoxcar pippo = new EntityBoxcar(bullet.worldObj); pippo.posX = mop.hitVec.xCoord; @@ -56,7 +56,7 @@ public class XFactory44 { bullet.worldObj.playSoundEffect(pippo.posX, pippo.posY + 50, pippo.posZ, "hbm:alarm.trainHorn", 100F, 1F); bullet.setDead(); }; - + public static BiConsumer LAMBDA_TORPEDO = (bullet, mop) -> { EntityTorpedo murky = new EntityTorpedo(bullet.worldObj); murky.posX = mop.hitVec.xCoord; @@ -149,34 +149,34 @@ public class XFactory44 { .anim(LAMBDA_HANGMAN_ANIMS).orchestra(Orchestras.ORCHESTRA_HANGMAN) ).setUnlocalizedName("gun_hangman"); } - + public static Function LAMBDA_NAME_NOPIP = (stack) -> { if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE)) return stack.getUnlocalizedName() + "_scoped"; return null; }; - + public static BiConsumer SMACK_A_FUCKER = (stack, ctx) -> { - if(ItemGunBaseNT.getState(stack, ctx.configIndex) == GunState.IDLE || ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) == AnimType.CYCLE) { + if(ItemGunBaseNT.getState(stack, ctx.configIndex) == GunState.IDLE || ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) == GunAnimation.CYCLE) { ItemGunBaseNT.setIsAiming(stack, false); ItemGunBaseNT.setState(stack, ctx.configIndex, GunState.DRAWING); ItemGunBaseNT.setTimer(stack, ctx.configIndex, ctx.config.getInspectDuration(stack)); - ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.INSPECT, ctx.configIndex); + ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, GunAnimation.INSPECT, ctx.configIndex); } }; - + public static BiConsumer LAMBDA_RECOIL_HENRY = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1)); }; - + public static BiConsumer LAMBDA_RECOIL_NOPIP = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - + public static BiConsumer LAMBDA_RECOIL_HANGMAN = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_HENRY_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_HENRY_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, -3, 350, IType.SIN_DOWN)) @@ -215,11 +215,11 @@ public class XFactory44 { .addBus("YEET", new BusAnimationSequence().addPos(0, 2, 0, 200, IType.SIN_DOWN).addPos(0, 0, 0, 200, IType.SIN_UP)) .addBus("ROLL", new BusAnimationSequence().addPos(0, 0, 360, 400)); } - + return null; }; - - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_NOPIP_ANIMS = (stack, type) -> { + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_NOPIP_ANIMS = (stack, type) -> { switch(type) { case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250)) @@ -241,18 +241,18 @@ public class XFactory44 { .addBus("RELAOD_TILT", new BusAnimationSequence().addPos(-15, 0, 0, 100).addPos(65, 0, 0, 100).addPos(45, 0, 0, 50).addPos(0, 0, 0, 200).addPos(0, 0, 0, 200).addPos(-80, 0, 0, 100).addPos(-80, 0, 0, 100).addPos(0, 0, 0, 200)) .addBus("RELOAD_CYLINDER", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(90, 0, 0, 100).addPos(90, 0, 0, 450).addPos(0, 0, 0, 70)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LILMAC_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LILMAC_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation().addBus("SPIN", new BusAnimationSequence().addPos(-360, 0, 0, 350)); } - + return LAMBDA_NOPIP_ANIMS.apply(stack, type); }; - - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_HANGMAN_ANIMS = (stack, type) -> { + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_HANGMAN_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); case CYCLE: return new BusAnimation() @@ -273,7 +273,7 @@ public class XFactory44 { .addBus("EQUIP", new BusAnimationSequence().addPos(0, 0, 0, 1000).addPos(-10, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 350, IType.SIN_FULL)) .addBus("ROLL", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, 25, 250, IType.SIN_FULL).addPos(0, 0, 25, 300).addPos(0, 0, 0, 250, IType.SIN_FULL)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index 9a0c0fcae..a86fc4e74 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -21,10 +21,10 @@ import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; @@ -34,7 +34,7 @@ public class XFactory50 { public static final ResourceLocation scope = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_amat.png"); public static final ResourceLocation scope_thermal = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_penance.png"); - + public static BulletConfig bmg50_sp; public static BulletConfig bmg50_fmj; public static BulletConfig bmg50_jhp; @@ -44,7 +44,7 @@ public class XFactory50 { public static BulletConfig bmg50_sm; public static BulletConfig bmg50_black; public static BulletConfig bmg50_equestrian; - + public static BiConsumer LAMBDA_BUILDING = (bullet, mop) -> { EntityBuilding silver = new EntityBuilding(bullet.worldObj); silver.posX = mop.hitVec.xCoord; @@ -53,7 +53,7 @@ public class XFactory50 { bullet.worldObj.spawnEntityInWorld(silver); bullet.setDead(); }; - + public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; Lego.tinyExplode(bullet, mop, 2F); bullet.setDead(); @@ -79,7 +79,7 @@ public class XFactory50 { .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_EQUESTRIAN).register("bmg50black")); bmg50_equestrian = new BulletConfig().setItem(EnumAmmoSecret.BMG50_EQUESTRIAN).setDamage(0F).setOnImpact(LAMBDA_BUILDING) .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_EQUESTRIAN).register("bmg50equestrian")); - + ModItems.gun_amat = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(350).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(scope).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) @@ -110,7 +110,7 @@ public class XFactory50 { .setupStandardConfiguration() .anim(LAMBDA_AMAT_ANIMS).orchestra(Orchestras.ORCHESTRA_AMAT) ).setUnlocalizedName("gun_amat_penance"); - + ModItems.gun_m2 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(10).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) @@ -122,27 +122,27 @@ public class XFactory50 { .anim(LAMBDA_M2_ANIMS).orchestra(Orchestras.ORCHESTRA_M2) ).setUnlocalizedName("gun_m2"); } - + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 2000, 0.05D, 1.1D, 0); }; - + public static BiConsumer LAMBDA_RECOIL_AMAT = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(12.5F, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1)); }; - + public static BiConsumer LAMBDA_RECOIL_M2 = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_AMAT_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_AMAT_ANIMS = (stack, type) -> { double turn = -60; double pullAmount = -2.5; double side = 4; double down = -2; double detach = 0.5; double apex = 7; - + switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)) @@ -169,18 +169,18 @@ public class XFactory50 { .addBus("SCOPE_THROW", new BusAnimationSequence().addPos(0, detach, 0, 100, IType.SIN_FULL).addPos(side, down, 0, 500, IType.SIN_FULL).addPos(side, down - 0.5, 0, 100).addPos(side, apex, 0, 350, IType.SIN_FULL).addPos(side, down - 0.5, 0, 350, IType.SIN_DOWN).addPos(side, down, 0, 100).hold(250).addPos(0, detach, 0, 500, IType.SIN_FULL).addPos(0, 0, 0, 250, IType.SIN_FULL)) .addBus("SCOPE_SPIN", new BusAnimationSequence().hold(700).addPos(-360, 0, 0, 700)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_M2_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_M2_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(80, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)); case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -0.25, 25).addPos(0, 0, 0, 75)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java index c37d6c78a..290ebdf33 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java @@ -25,10 +25,10 @@ import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; @@ -43,12 +43,12 @@ public class XFactory556mm { public static BulletConfig r556_fmj; public static BulletConfig r556_jhp; public static BulletConfig r556_ap; - + public static BulletConfig r556_inc_sp; public static BulletConfig r556_inc_fmj; public static BulletConfig r556_inc_jhp; public static BulletConfig r556_inc_ap; - + public static BiConsumer INCENDIARY = (bullet, mop) -> { if(mop.entityHit != null && mop.entityHit instanceof EntityLivingBase) { HbmLivingProps data = HbmLivingProps.getData((EntityLivingBase) mop.entityHit); @@ -71,7 +71,7 @@ public class XFactory556mm { r556_inc_fmj = r556_fmj.clone().setOnImpact(INCENDIARY); r556_inc_jhp = r556_jhp.clone().setOnImpact(INCENDIARY); r556_inc_ap = r556_ap.clone().setOnImpact(INCENDIARY); - + ModItems.gun_g3 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) @@ -105,21 +105,21 @@ public class XFactory556mm { .anim(LAMBDA_STG77_ANIMS).orchestra(Orchestras.ORCHESTRA_STG77) ).setUnlocalizedName("gun_stg77"); } - + public static Function LAMBDA_NAME_G3 = (stack) -> { if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER) && - WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK) && - WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_BLACK) && + WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK) && + WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_BLACK) && WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE)) return stack.getUnlocalizedName() + "_infiltrator"; - if(!WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK) && + if(!WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK) && WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_GREEN)) return stack.getUnlocalizedName() + "_a3"; return null; }; - + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 1500, 0.075D, 1.1D, 0); }; - + public static BiConsumer LAMBDA_STG77_DECIDER = (stack, ctx) -> { int index = ctx.configIndex; GunState lastState = ItemGunBaseNT.getState(stack, index); @@ -128,18 +128,18 @@ public class XFactory556mm { GunStateDecider.deciderStandardReload(stack, ctx, lastState, 0, index); GunStateDecider.deciderAutoRefire(stack, ctx, lastState, 0, index, () -> { return ItemGunBaseNT.getSecondary(stack, index); }); }; - + public static BiConsumer LAMBDA_RECOIL_G3 = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25)); }; - + public static BiConsumer LAMBDA_RECOIL_ZEBRA = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.125), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.125)); }; - + public static BiConsumer LAMBDA_RECOIL_STG = (stack, ctx) -> { }; - - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_G3_ANIMS = (stack, type) -> { + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_G3_ANIMS = (stack, type) -> { boolean empty = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory) <= 0; switch(type) { case EQUIP: return new BusAnimation() @@ -206,11 +206,11 @@ public class XFactory556mm { .addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 1000).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100).addPos(0, 0, 0, 250).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100)) .addBus("PLUG", new BusAnimationSequence().addPos(0, 0, 0, 1000).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100).addPos(0, 0, 0, 250).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_STG77_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_STG77_ANIMS = (stack, type) -> { if(ClientConfig.GUN_ANIMS_LEGACY.get()) { switch(type) { case EQUIP: return new BusAnimation() @@ -245,8 +245,8 @@ public class XFactory556mm { case INSPECT: return ResourceManager.stg77_anim.get("Inspect"); } } - - + + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java index 1638a2794..b24293199 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java @@ -17,9 +17,9 @@ import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; @@ -47,7 +47,7 @@ public class XFactory75Bolt { public static void init() { SpentCasing casing75 = new SpentCasing(CasingType.STRAIGHT).setColor(SpentCasing.COLOR_CASE_BRASS).setScale(2F, 2F, 1.5F); - + b75 = new BulletConfig().setItem(EnumAmmo.B75) .setCasing(casing75.clone().register("b75")).setOnImpact(LAMBDA_TINY_EXPLODE); b75_inc = new BulletConfig().setItem(EnumAmmo.B75_INC).setDamage(0.8F).setArmorPiercing(0.1F) @@ -66,16 +66,16 @@ public class XFactory75Bolt { .anim(LAMBDA_BOLTER_ANIMS).orchestra(Orchestras.ORCHESTRA_BOLTER) ).setUnlocalizedName("gun_bolter"); } - + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 2000, 0.05D, 1.1D, 0); }; - + public static BiConsumer LAMBDA_RECOIL_BOLT = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_BOLTER_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_BOLTER_ANIMS = (stack, type) -> { switch(type) { case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addPos(1, 0, 0, 25).addPos(0, 0, 0, 75)); @@ -86,7 +86,7 @@ public class XFactory75Bolt { .addBus("TILT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(1, 0, 0, 250).addPos(1, 0, 0, 700).addPos(0, 0, 0, 250)) .addBus("MAG", new BusAnimationSequence().addPos(0, 0, 0, 750).addPos(0.6, 0, 0, 250).addPos(0, 0, 0, 250)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java index 85e0d1b47..ac120ea9c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java @@ -20,10 +20,10 @@ import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.main.MainRegistry; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.DamageResistanceHandler.DamageClass; import net.minecraft.item.ItemStack; @@ -41,7 +41,7 @@ public class XFactory762mm { public static BulletConfig energy_lacunae; public static BulletConfig energy_lacunae_overcharge; public static BulletConfig energy_lacunae_ir; - + public static BiConsumer LAMBDA_TINY_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; Lego.tinyExplode(bullet, mop, 1.5F); bullet.setDead(); @@ -61,7 +61,7 @@ public class XFactory762mm { .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("r762du")); r762_he = new BulletConfig().setItem(EnumAmmo.R762_HE).setCasing(EnumCasingType.SMALL_STEEL, 6).setWear(3F).setDamage(1.75F).setOnImpact(LAMBDA_TINY_EXPLODE) .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("r762he")); - + energy_lacunae = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4 * 40).setupDamageClass(DamageClass.LASER).setBeam().setReloadCount(40).setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); energy_lacunae_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4 * 40).setupDamageClass(DamageClass.LASER).setBeam().setReloadCount(40).setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); energy_lacunae_ir = new BulletConfig().setItem(EnumAmmo.CAPACITOR_IR).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4 * 40).setupDamageClass(DamageClass.FIRE).setBeam().setReloadCount(40).setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(XFactoryEnergy.LAMBDA_IR_HIT); @@ -131,7 +131,7 @@ public class XFactory762mm { .anim(LAMBDA_MAS36_ANIMS).orchestra(Orchestras.ORCHESTRA_MAS36) ).setUnlocalizedName("gun_mas36"); } - + public static BiConsumer LAMBDA_SECOND_MINIGUN = (stack, ctx) -> { int index = ctx.configIndex; GunState lastState = ItemGunBaseNT.getState(stack, index); @@ -140,22 +140,22 @@ public class XFactory762mm { GunStateDecider.deciderStandardReload(stack, ctx, lastState, 0, index); GunStateDecider.deciderAutoRefire(stack, ctx, lastState, 0, index, () -> { return ItemGunBaseNT.getSecondary(stack, index) && ItemGunBaseNT.getMode(stack, ctx.configIndex) == 0; }); }; - + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 1500, 0.075D, 1.1D, 0); }; - + public static BiConsumer LAMBDA_RECOIL_CARBINE = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); }; - + public static BiConsumer LAMBDA_RECOIL_MINIGUN = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); }; - + public static BiConsumer LAMBDA_RECOIL_LACUNAE = (stack, ctx) -> { }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CARBINE_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CARBINE_ANIMS = (stack, type) -> { int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); switch(type) { case EQUIP: return new BusAnimation() @@ -183,11 +183,11 @@ public class XFactory762mm { .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, -0.75, 150, IType.SIN_DOWN).addPos(0, 0, -0.75, 1000).addPos(0, 0, 0, 100, IType.SIN_UP)) .addBus(ammo == 0 ? "NULL" : "REL", new BusAnimationSequence().addPos(0, 0.125, 1.25, 0).addPos(0, 0.125, 1.25, 500).addPos(0, 0.125, 0.5, 150, IType.SIN_DOWN).addPos(0, 0.125, 0.5, 1000).addPos(0, 0.125, 1.25, 100, IType.SIN_UP)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MINIGUN_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MINIGUN_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 1000, IType.SIN_FULL)); @@ -203,11 +203,11 @@ public class XFactory762mm { .addBus("EQUIP", new BusAnimationSequence().addPos(3, 0, 0, 150, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)) .addBus("ROTATE", new BusAnimationSequence().addPos(0, 0, -720, 1000, IType.SIN_DOWN)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MAS36_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MAS36_ANIMS = (stack, type) -> { int mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); double turn = -90; double pullAmount = ItemGunBaseNT.getIsAiming(stack) ? -1F : -1.5D; @@ -244,7 +244,7 @@ public class XFactory762mm { .addBus("BOLT_PULL", new BusAnimationSequence().hold(100).addPos(0, 0, -1D, 250, IType.SIN_UP).hold(500).addPos(0, 0, 0, 200, IType.LINEAR)) .addBus("BULLET", mag == 0 ? new BusAnimationSequence().setPos(-100, 0, 0) : new BusAnimationSequence().setPos(0, 0.1875, 1.5).hold(100).addPos(0, 0.125, 0.5, 250, IType.SIN_UP).hold(500).addPos(0, 0.1875, 1.5, 200, IType.LINEAR)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java index 5fbb723dd..15d4112fb 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java @@ -22,10 +22,10 @@ import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import com.hbm.util.DamageResistanceHandler.DamageClass; @@ -105,29 +105,29 @@ public class XFactory9mm { .anim(LAMBDA_UZI_ANIMS).orchestra(Orchestras.ORCHESTRA_UZI_AKIMBO) ).setUnlocalizedName("gun_uzi_akimbo"); } - + public static Function LAMBDA_NAME_GREASEGUN = (stack) -> { if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_GREASEGUN_CLEAN)) return stack.getUnlocalizedName() + "_m3"; return null; }; - + public static Function LAMBDA_NAME_UZI = (stack) -> { if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER)) return stack.getUnlocalizedName() + "_richter"; return null; }; - + public static BiConsumer LAMBDA_RECOIL_GREASEGUN = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(2, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); }; - + public static BiConsumer LAMBDA_RECOIL_LAG = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - + public static BiConsumer LAMBDA_RECOIL_UZI = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(1, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25)); }; - + public static BiConsumer LAMBDA_SECOND_UZI = (stack, ctx) -> { int index = ctx.configIndex; GunState lastState = ItemGunBaseNT.getState(stack, index); @@ -136,12 +136,12 @@ public class XFactory9mm { GunStateDecider.deciderStandardReload(stack, ctx, lastState, 0, index); GunStateDecider.deciderAutoRefire(stack, ctx, lastState, 0, index, () -> { return ItemGunBaseNT.getSecondary(stack, index) && ItemGunBaseNT.getMode(stack, ctx.configIndex) == 0; }); }; - + public static BiConsumer LAMBDA_FIRE_LAG = (stack, ctx) -> { - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); EntityPlayer player = ctx.getPlayer(); - if(player != null && type == AnimType.INSPECT && timer > 20 && timer < 60) { + if(player != null && type == GunAnimation.INSPECT && timer > 20 && timer < 60) { int index = ctx.configIndex; Receiver primary = ctx.config.getReceivers(stack)[0]; IMagazine mag = primary.getMagazine(stack); @@ -154,15 +154,15 @@ public class XFactory9mm { ItemGunBaseNT.setTimer(stack, index, primary.getDelayAfterFire(stack)); EntityDamageUtil.attackEntityFromNT(player, BulletConfig.getDamage(player, player, DamageClass.PHYSICAL), 1_000F, true, false, 1D, 5F, 0F); } else { - Lego.doStandardFire(stack, ctx, AnimType.CYCLE, true); + Lego.doStandardFire(stack, ctx, GunAnimation.CYCLE, true); } }; - + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 2000, 0.05D, 1.1D, ctx.configIndex); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_GREASEGUN_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_GREASEGUN_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(80, 0, 0, 0).addPos(80, 0, 0, 500).addPos(0, 0, 0, 500, IType.SIN_FULL)) @@ -190,11 +190,11 @@ public class XFactory9mm { .addBus("TURN", new BusAnimationSequence().addPos(0, 0, -45, 150).addPos(0, 0, 45, 150).addPos(0, 0, 45, 50).addPos(0, 0, 0, 250).addPos(0, 0, 0, 500).addPos(0, 0, 45, 150).addPos(0, 0, -45, 150).addPos(0, 0, 0, 150)) .addBus("FLAP", new BusAnimationSequence().addPos(0, 0, 0, 300).addPos(0, 0, 180, 150).addPos(0, 0, 180, 850).addPos(0, 0, 0, 150)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LAG_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LAG_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, 0, 350, IType.SIN_DOWN)); @@ -207,11 +207,11 @@ public class XFactory9mm { .addBus("ADD_TRANS", new BusAnimationSequence().addPos(-4, 0, -3, 500).addPos(-4, 0, -3, 2000).addPos(0, 0, 0, 500)) .addBus("ADD_ROT", new BusAnimationSequence().addPos(0, -2, 5, 500).addPos(0, -2, 5, 2000).addPos(0, 0, 0, 500)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_UZI_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_UZI_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(80, 0, 0, 0).addPos(80, 0, 0, 500).addPos(0, 0, 0, 500, IType.SIN_FULL)) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java index 86905b000..9f8e5a0c0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java @@ -20,10 +20,10 @@ import com.hbm.items.weapon.sedna.mags.MagazineBelt; import com.hbm.items.weapon.sedna.mags.MagazineInfinite; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; import com.hbm.main.MainRegistry; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.DamageResistanceHandler.DamageClass; import com.hbm.util.Vec3NT; @@ -37,7 +37,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; public class XFactoryAccelerator { - + public static MagazineBelt tauChargeMag = new MagazineBelt(); public static BulletConfig tau_uranium; @@ -50,13 +50,13 @@ public class XFactoryAccelerator { public static Consumer LAMBDA_UPDATE_TUNGSTEN = (entity) -> {breakInPath(entity, 1.25F); }; public static Consumer LAMBDA_UPDATE_FERRO = (entity) -> { breakInPath(entity, 2.5F); }; - + public static void breakInPath(Entity entity, float threshold) { Vec3 vec = Vec3.createVectorHelper(entity.posX - entity.prevPosX, entity.posY - entity.prevPosY, entity.posZ - entity.prevPosZ); double motion = Math.max(vec.lengthVector(), 0.1); vec = vec.normalize(); - + for(double d = 0; d < motion; d += 0.5) { double dX = entity.posX - vec.xCoord * d; @@ -71,7 +71,7 @@ public class XFactoryAccelerator { nbt.setDouble("posY", dY); nbt.setDouble("posZ", dZ); MainRegistry.proxy.effectNT(nbt); - + } else { int x = (int) Math.floor(dX); int y = (int) Math.floor(dY); @@ -84,7 +84,7 @@ public class XFactoryAccelerator { } } } - + public static void init() { tau_uranium = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setCasing(new ItemStack(ModItems.plate_lead, 2), 16).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloffByPen(false) @@ -99,7 +99,7 @@ public class XFactoryAccelerator { ni4ni_arc = new BulletConfig().setupDamageClass(DamageClass.PHYSICAL).setBeam().setLife(5).setThresholdNegation(10F).setArmorPiercing(0.2F).setRenderRotations(false).setDoesPenetrate(false) .setOnBeamImpact(BulletConfig.LAMBDA_BEAM_HIT); - + tauChargeMag.addConfigs(tau_uranium_charge); ModItems.gun_tau = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() @@ -141,54 +141,54 @@ public class XFactoryAccelerator { .anim(LAMBDA_NI4NI_ANIMS).orchestra(Orchestras.ORCHESTRA_COILGUN) ).setUnlocalizedName("gun_n_i_4_n_i"); } - + public static BiConsumer LAMBDA_TAU_PRIMARY_RELEASE = (stack, ctx) -> { - if(ctx.getPlayer() == null || ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) != AnimType.CYCLE) return; + if(ctx.getPlayer() == null || ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) != GunAnimation.CYCLE) return; ctx.getPlayer().worldObj.playSoundEffect(ctx.getPlayer().posX, ctx.getPlayer().posY, ctx.getPlayer().posZ, "hbm:weapon.fire.tauRelease", 1F, 1F); }; - + public static BiConsumer LAMBDA_TAU_SECONDARY_PRESS = (stack, ctx) -> { if(ctx.getPlayer() == null) return; if(ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmount(stack, ctx.inventory) <= 0) return; - ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.SPINUP, ctx.configIndex); + ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, GunAnimation.SPINUP, ctx.configIndex); tauChargeMag.getMagType(stack); //caches the last loaded ammo }; - + public static BiConsumer LAMBDA_TAU_SECONDARY_RELEASE = (stack, ctx) -> { if(ctx.getPlayer() == null) return; int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - - if(timer >= 10 && ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) == AnimType.SPINUP) { - ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.ALT_CYCLE, ctx.configIndex); + + if(timer >= 10 && ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) == GunAnimation.SPINUP) { + ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, GunAnimation.ALT_CYCLE, ctx.configIndex); int unitsUsed = 1 + Math.min(12, timer / 10); - + EntityLivingBase entity = ctx.entity; int index = ctx.configIndex; - + Receiver primary = ctx.config.getReceivers(stack)[0]; BulletConfig config = tauChargeMag.getFirstConfig(stack, ctx.inventory); - + Vec3 offset = primary.getProjectileOffset(stack); double forwardOffset = offset.xCoord; double heightOffset = offset.yCoord; double sideOffset = offset.zCoord; - + float damage = Lego.getStandardWearDamage(stack, ctx.config, index) * unitsUsed * 5; float spread = Lego.calcSpread(ctx, stack, primary, config, true, index, false); EntityBulletBeamBase mk4 = new EntityBulletBeamBase(entity, config, damage, spread, sideOffset, heightOffset, forwardOffset); entity.worldObj.spawnEntityInWorld(mk4); - + ItemGunBaseNT.setWear(stack, index, Math.min(ItemGunBaseNT.getWear(stack, index) + config.wear * unitsUsed, ctx.config.getDurability(stack))); - + } else { - ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.CYCLE_DRY, ctx.configIndex); + ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, GunAnimation.CYCLE_DRY, ctx.configIndex); } }; - + public static BiConsumer LAMBDA_NI4NI_SECONDARY_PRESS = (stack, ctx) -> { if(ctx.getPlayer() == null) return; EntityPlayer player = ctx.getPlayer(); - + if(ItemGunNI4NI.getCoinCount(stack) > 0) { Vec3NT vec = new Vec3NT(player.getLookVec()).multiply(0.8D); EntityCoin coin = new EntityCoin(player.worldObj); @@ -199,20 +199,20 @@ public class XFactoryAccelerator { coin.rotationYaw = player.rotationYaw; coin.setThrower(player); player.worldObj.spawnEntityInWorld(coin); - + player.worldObj.playSoundAtEntity(player, "random.orb", 1.0F, 1F + player.getRNG().nextFloat() * 0.25F); - + ItemGunNI4NI.setCoinCount(stack, ItemGunNI4NI.getCoinCount(stack) - 1); } }; - + public static BiConsumer LAMBDA_RECOIL_TAU = (stack, ctx) -> { }; - + public static BiConsumer LAMBDA_RECOIL_COILGUN = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_TAU_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_TAU_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)); @@ -229,18 +229,18 @@ public class XFactoryAccelerator { case SPINUP: return new BusAnimation() .addBus("ROTATE", new BusAnimationSequence().addPos(0, 0, 360 * 6, 3000, IType.SIN_UP).addPos(0, 0, 0, 0).addPos(0, 0, 360 * 40, 500 * 20)); } - + return null; }; - public static BiFunction LAMBDA_COILGUN_ANIMS = (stack, type) -> { - if(type == AnimType.EQUIP) return new BusAnimation().addBus("RELOAD", new BusAnimationSequence().addPos(1, 0, 0, 0).addPos(0, 0, 0, 250)); - if(type == AnimType.CYCLE) return new BusAnimation().addBus("RECOIL", new BusAnimationSequence().addPos(ItemGunBaseNT.getIsAiming(stack) ? 0.5 : 1, 0, 0, 100).addPos(0, 0, 0, 200)); - if(type == AnimType.RELOAD) return new BusAnimation().addBus("RELOAD", new BusAnimationSequence().addPos(1, 0, 0, 250).addPos(1, 0, 0, 500).addPos(0, 0, 0, 250)); + public static BiFunction LAMBDA_COILGUN_ANIMS = (stack, type) -> { + if(type == GunAnimation.EQUIP) return new BusAnimation().addBus("RELOAD", new BusAnimationSequence().addPos(1, 0, 0, 0).addPos(0, 0, 0, 250)); + if(type == GunAnimation.CYCLE) return new BusAnimation().addBus("RECOIL", new BusAnimationSequence().addPos(ItemGunBaseNT.getIsAiming(stack) ? 0.5 : 1, 0, 0, 100).addPos(0, 0, 0, 200)); + if(type == GunAnimation.RELOAD) return new BusAnimation().addBus("RELOAD", new BusAnimationSequence().addPos(1, 0, 0, 250).addPos(1, 0, 0, 500).addPos(0, 0, 0, 250)); return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_NI4NI_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_NI4NI_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-360 * 2, 0, 0, 500)); @@ -252,7 +252,7 @@ public class XFactoryAccelerator { case INSPECT: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-360 * 3, 0, 0, 750).hold(100).addPos(0, 0, 0, 750)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java index e8637d22a..343c968b5 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java @@ -13,10 +13,10 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; @@ -28,7 +28,7 @@ public class XFactoryBlackPowder { public static BulletConfig shot = new BulletConfig().setItem(EnumAmmo.STONE_SHOT).setBlackPowder(true).setHeadshot(1F).setSpread(0.1F).setRicochetAngle(45).setProjectiles(6, 6).setDamage(1F/6F); public static void init() { - + ModItems.gun_pepperbox = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) @@ -40,12 +40,12 @@ public class XFactoryBlackPowder { .anim(LAMBDA_PEPPERBOX_ANIMS).orchestra(Orchestras.ORCHESTRA_PEPPERBOX) ).setUnlocalizedName("gun_pepperbox"); } - + public static BiConsumer LAMBDA_RECOIL_PEPPERBOX = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PEPPERBOX_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PEPPERBOX_ANIMS = (stack, type) -> { switch(type) { case CYCLE: return new BusAnimation() .addBus("ROTATE", new BusAnimationSequence().addPos(0, 0, 0, 1025).addPos(60, 0, 0, 250)) @@ -72,7 +72,7 @@ public class XFactoryBlackPowder { .addBus("TRANSLATE", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, -6, 0, 400, IType.SIN_FULL).addPos(0, -6, 0, 2000).addPos(0, 0, 0, 400, IType.SIN_FULL)) .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(45, 0, 0, 400, IType.SIN_FULL).addPos(45, 0, 0, 2000).addPos(0, 0, 0, 400, IType.SIN_FULL)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java index 42d957506..331884264 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java @@ -28,10 +28,10 @@ import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.item.ItemStack; @@ -99,7 +99,7 @@ public class XFactoryCatapult { vnt.explode(); incrementRad(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 1.5F); - + bullet.worldObj.playSoundEffect(mop.hitVec.xCoord, mop.hitVec.yCoord + 0.5, mop.hitVec.zCoord, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); NBTTagCompound data = new NBTTagCompound(); data.setString("type", "muke"); @@ -176,7 +176,7 @@ public class XFactoryCatapult { public static BiConsumer LAMBDA_RECOIL_FATMAN = (stack, ctx) -> { }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FATMAN_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FATMAN_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 1000, IType.SIN_DOWN)); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java index 4167419d7..4ebb193a9 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java @@ -26,10 +26,10 @@ import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.DamageResistanceHandler.DamageClass; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -104,15 +104,15 @@ public class XFactoryEnergy { public static BiConsumer LAMBDA_LIGHTNING_SPLIT = (beam, mop) -> { LAMBDA_LIGHTNING_HIT.accept(beam, mop); if(mop.typeOfHit != mop.typeOfHit.ENTITY) return; - + double range = 20; List potentialTargets = beam.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord).expand(range, range, range)); Collections.shuffle(potentialTargets); - + for(EntityLivingBase target : potentialTargets) { if(target == beam.thrower) continue; if(target == mop.entityHit) continue; - + Vec3 delta = Vec3.createVectorHelper(target.posX - mop.hitVec.xCoord, target.posY + target.height / 2 - mop.hitVec.yCoord, target.posZ - mop.hitVec.zCoord); if(delta.lengthVector() > 20) continue; EntityBulletBeamBase sub = new EntityBulletBeamBase(beam.thrower, energy_tesla_ir_sub, beam.damage); @@ -169,7 +169,7 @@ public class XFactoryEnergy { energy_emerald = energy_las.clone().setArmorPiercing(0.5F).setThresholdNegation(10F); energy_emerald_overcharge = energy_las_overcharge.clone().setArmorPiercing(0.5F).setThresholdNegation(15F); energy_emerald_ir = energy_las_ir.clone().setArmorPiercing(0.5F).setThresholdNegation(10F); - + ModItems.gun_tesla_cannon = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(1_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE) .rec(new Receiver(0) @@ -226,7 +226,7 @@ public class XFactoryEnergy { public static BiConsumer LAMBDA_RECOIL_ENERGY = (stack, ctx) -> { }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_TESLA_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_TESLA_ANIMS = (stack, type) -> { int amount = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); switch(type) { case EQUIP: return new BusAnimation() @@ -245,7 +245,7 @@ public class XFactoryEnergy { return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LASER_PISTOL = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LASER_PISTOL = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); @@ -266,7 +266,7 @@ public class XFactoryEnergy { return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LASRIFLE = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LASRIFLE = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java index 50e845278..0d1fc8db3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java @@ -22,10 +22,10 @@ import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.particle.helper.FlameCreator; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.DamageResistanceHandler.DamageClass; import net.minecraft.block.Block; @@ -42,7 +42,7 @@ public class XFactoryFlamer { public static BulletConfig flame_nograv; public static BulletConfig flame_nograv_bf; - + public static BulletConfig flame_diesel; public static BulletConfig flame_gas; public static BulletConfig flame_napalm; @@ -80,7 +80,7 @@ public class XFactoryFlamer { public static BiConsumer LAMBDA_LINGER_GAS = (bullet, mop) -> { igniteIfPossible(bullet, mop); }; public static BiConsumer LAMBDA_LINGER_NAPALM = (bullet, mop) -> { if(!igniteIfPossible(bullet, mop)) spawnFire(bullet, mop, 2.5F, 1F, 200, EntityFireLingering.TYPE_DIESEL); }; public static BiConsumer LAMBDA_LINGER_BALEFIRE = (bullet, mop) -> { spawnFire(bullet, mop, 3F, 1F, 300, EntityFireLingering.TYPE_BALEFIRE); }; - + public static boolean igniteIfPossible(EntityBulletBaseMK4 bullet, MovingObjectPosition mop) { if(mop.typeOfHit == mop.typeOfHit.BLOCK) { World world = bullet.worldObj; @@ -96,7 +96,7 @@ public class XFactoryFlamer { } return false; } - + public static void spawnFire(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, float width, float height, int duration, int type) { if(mop.typeOfHit == mop.typeOfHit.BLOCK) { List fires = bullet.worldObj.getEntitiesWithinAABB(EntityFireLingering.class, @@ -119,15 +119,15 @@ public class XFactoryFlamer { .setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_NAPALM); flame_balefire = new BulletConfig().setItem(EnumAmmo.FLAME_BALEFIRE).setCasing(new ItemStack(ModItems.plate_steel, 2), 500).setupDamageClass(DamageClass.FIRE).setLife(200).setVel(1F).setGrav(0.02D).setReloadCount(500).setSelfDamageDelay(20).setKnockback(0F) .setOnUpdate(LAMBDA_BALEFIRE).setOnRicochet(LAMBDA_LINGER_BALEFIRE); - + flame_nograv = flame_diesel.clone().setGrav(0); flame_nograv_bf = flame_balefire.clone().setGrav(0).setLife(100); - + flame_topaz_diesel = flame_diesel .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D); flame_topaz_gas = flame_gas .clone().setProjectiles(2).setSpread(0.05F); flame_topaz_napalm = flame_napalm .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D); flame_topaz_balefire = flame_balefire .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D); - + flame_daybreaker_diesel = flame_diesel.clone().setLife(200).setVel(2F).setGrav(0.035D) .setOnImpact((bullet, mop) -> { Lego.standardExplode(bullet, mop, 5F); spawnFire(bullet, mop, 6F, 2F, 200, EntityFireLingering.TYPE_DIESEL); bullet.setDead(); }); flame_daybreaker_gas = flame_gas.clone().setLife(200).setVel(2F).setGrav(0.035D) @@ -136,7 +136,7 @@ public class XFactoryFlamer { .setOnImpact((bullet, mop) -> { Lego.standardExplode(bullet, mop, 7.5F); spawnFire(bullet, mop, 6F, 2F, 300, EntityFireLingering.TYPE_DIESEL); bullet.setDead(); }); flame_daybreaker_balefire = flame_balefire.clone().setLife(200).setVel(2F).setGrav(0.035D) .setOnImpact((bullet, mop) -> { Lego.standardExplode(bullet, mop, 5F); spawnFire(bullet, mop, 7.5F, 2.5F, 400, EntityFireLingering.TYPE_BALEFIRE); bullet.setDead(); }); - + ModItems.gun_flamer = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(20_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE) .rec(new Receiver(0) @@ -167,7 +167,7 @@ public class XFactoryFlamer { .setupStandardConfiguration() .anim(LAMBDA_FLAMER_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAMER_DAYBREAKER) ).setUnlocalizedName("gun_flamer_daybreaker"); - + ModItems.gun_chemthrower = new ItemGunChemthrower(WeaponQuality.A_SIDE, new GunConfig() .dura(90_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) @@ -180,7 +180,7 @@ public class XFactoryFlamer { ).setUnlocalizedName("gun_chemthrower"); } - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FLAMER_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FLAMER_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); @@ -189,16 +189,16 @@ public class XFactoryFlamer { case JAMMED: return new BusAnimation() .addBus("ROTATE", new BusAnimationSequence().addPos(0, 0, 45, 250, IType.SIN_FULL).addPos(0, 0, 45, 350).addPos(0, 0, -15, 150, IType.SIN_FULL).addPos(0, 0, 0, 100, IType.SIN_FULL)); } - + return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CHEMTHROWER_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CHEMTHROWER_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java index 793284b3d..1e1786917 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java @@ -22,10 +22,10 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.ContaminationUtil; import com.hbm.util.EntityDamageUtil; import com.hbm.util.Vec3NT; @@ -119,17 +119,17 @@ public class XFactoryFolly { if(ItemGunBaseNT.getState(stack, ctx.configIndex) == GunState.IDLE) { boolean wasAiming = ItemGunBaseNT.getIsAiming(stack); ItemGunBaseNT.setIsAiming(stack, !wasAiming); - if(!wasAiming) ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.SPINUP, ctx.configIndex); + if(!wasAiming) ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, GunAnimation.SPINUP, ctx.configIndex); } }; public static BiConsumer LAMBDA_FIRE = (stack, ctx) -> { - Lego.doStandardFire(stack, ctx, AnimType.CYCLE, false); + Lego.doStandardFire(stack, ctx, GunAnimation.CYCLE, false); }; public static BiFunction LAMBDA_CAN_FIRE = (stack, ctx) -> { if(!ItemGunBaseNT.getIsAiming(stack)) return false; - if(ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) != AnimType.SPINUP) return false; + if(ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) != GunAnimation.SPINUP) return false; if(ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex) < 100) return false; return ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmount(stack, ctx.inventory) > 0; }; @@ -138,7 +138,7 @@ public class XFactoryFolly { ItemGunBaseNT.setupRecoil(25, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FOLLY_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FOLLY_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-60, 0, 0, 0).addPos(5, 0, 0, 1500, IType.SIN_DOWN).addPos(0, 0, 0, 500, IType.SIN_FULL)); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java index a70a284d5..5d5f1fb50 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java @@ -26,10 +26,10 @@ import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import com.hbm.util.DamageResistanceHandler.DamageClass; @@ -46,7 +46,7 @@ import net.minecraftforge.common.util.ForgeDirection; public class XFactoryRocket { public static BulletConfig[] rocket_template; - + public static BulletConfig[] rocket_rpzb; public static BulletConfig[] rocket_qd; public static BulletConfig[] rocket_ml; @@ -60,24 +60,24 @@ public class XFactoryRocket { EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity; if(bullet.accel < 4) bullet.accel += 0.4D; if(bullet.getThrower() == null || !(bullet.getThrower() instanceof EntityPlayer)) return; - + EntityPlayer player = (EntityPlayer) bullet.getThrower(); if(Vec3.createVectorHelper(bullet.posX - player.posX, bullet.posY - player.posY, bullet.posZ - player.posZ).lengthVector() > 100) return; if(player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ItemGunBaseNT) || !ItemGunBaseNT.getIsAiming(player.getHeldItem())) return; - + MovingObjectPosition mop = Library.rayTrace(player, 200, 1); if(mop == null || mop.hitVec == null) return; - + Vec3 vec = Vec3.createVectorHelper(mop.hitVec.xCoord - bullet.posX, mop.hitVec.yCoord - bullet.posY, mop.hitVec.zCoord - bullet.posZ); if(vec.lengthVector() < 3) return; vec = vec.normalize(); - + double speed = Vec3.createVectorHelper(bullet.motionX, bullet.motionY, bullet.motionZ).lengthVector(); bullet.motionX = vec.xCoord * speed; bullet.motionY = vec.yCoord * speed; bullet.motionZ = vec.zCoord * speed; }; - + // IMPACT public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; @@ -110,7 +110,7 @@ public class XFactoryRocket { public static BiConsumer LAMBDA_STANDARD_EXPLODE_PHOSPHORUS = (bullet, mop) -> { spawnFire(bullet, mop, true, 600); }; - + public static void spawnFire(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, boolean phosphorus, int duration) { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; World world = bullet.worldObj; @@ -135,18 +135,18 @@ public class XFactoryRocket { } } } - + public static BulletConfig makeRPZB(BulletConfig original) { return original.clone(); } public static BulletConfig makeQD(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_STEERING_ACCELERATE); } public static BulletConfig makeML(BulletConfig original) { return original.clone(); } - + //this is starting to get messy but we need to put this crap *somewhere* and fragmenting it into a billion classes with two methods each just isn't gonna help public static void init() { rocket_template = new BulletConfig[5]; - + BulletConfig baseRocket = new BulletConfig().setLife(300).setSelfDamageDelay(10).setVel(0F).setGrav(0D).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STANDARD_ACCELERATE); - + rocket_template[0] = baseRocket.clone().setItem(EnumAmmo.ROCKET_HE).setOnImpact(LAMBDA_STANDARD_EXPLODE); rocket_template[1] = baseRocket.clone().setItem(EnumAmmo.ROCKET_HEAT).setDamage(0.5F).setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT); rocket_template[2] = baseRocket.clone().setItem(EnumAmmo.ROCKET_DEMO).setDamage(0.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE_DEMO); @@ -156,7 +156,7 @@ public class XFactoryRocket { rocket_rpzb = new BulletConfig[rocket_template.length]; rocket_qd = new BulletConfig[rocket_template.length]; rocket_ml = new BulletConfig[rocket_template.length]; - + for(int i = 0; i < rocket_template.length; i++) { rocket_rpzb[i] = makeRPZB(rocket_template[i]); rocket_qd[i] = makeQD(rocket_template[i]); @@ -210,7 +210,7 @@ public class XFactoryRocket { public static BiConsumer LAMBDA_STINGER_SECONDARY_PRESS = (stack, ctx) -> { ItemGunStinger.setIsLockingOn(stack, true); }; public static BiConsumer LAMBDA_STINGER_SECONDARY_RELEASE = (stack, ctx) -> { ItemGunStinger.setIsLockingOn(stack, false); }; - + public static BiConsumer LAMBDA_MISSILE_LAUNCHER_PRIMARY_PRESS = (stack, ctx) -> { if(ItemGunBaseNT.getIsAiming(stack)) { int target = ItemGunStinger.getLockonTarget(ctx.getPlayer(), 150D, 20D); @@ -222,10 +222,10 @@ public class XFactoryRocket { Lego.LAMBDA_STANDARD_CLICK_PRIMARY.accept(stack, ctx); ItemGunBaseNT.setIsLockedOn(stack, false); }; - + public static BiConsumer LAMBDA_RECOIL_ROCKET = (stack, ctx) -> { }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PANZERSCHRECK_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PANZERSCHRECK_ANIMS = (stack, type) -> { boolean empty = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory) <= 0; switch(type) { case EQUIP: return new BusAnimation() @@ -242,7 +242,7 @@ public class XFactoryRocket { return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_QUADRO_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_QUADRO_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); @@ -258,7 +258,7 @@ public class XFactoryRocket { return null; }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MISSILE_LAUNCHER_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MISSILE_LAUNCHER_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 1000, IType.SIN_DOWN)); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index 6800ea13f..3237bd1d0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -28,10 +28,10 @@ import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.particle.helper.ExplosionCreator; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.tileentity.IRepairable; import com.hbm.tileentity.IRepairable.EnumExtinguishType; import com.hbm.util.CompatExternal; @@ -52,15 +52,15 @@ import net.minecraftforge.common.util.ForgeDirection; public class XFactoryTool { public static final ResourceLocation scope = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_tool.png"); - + public static BulletConfig fext_water; public static BulletConfig fext_foam; public static BulletConfig fext_sand; - + public static BulletConfig ct_hook; public static BulletConfig ct_mortar; public static BulletConfig ct_mortar_charge; - + public static BiConsumer LAMBDA_WATER_HIT = (bullet, mop) -> { if(!bullet.worldObj.isRemote) { int ix = mop.blockX; @@ -80,7 +80,7 @@ public class XFactoryTool { bullet.setDead(); } }; - + public static Consumer LAMBDA_WATER_UPDATE = (bullet) -> { if(bullet.worldObj.isRemote) { NBTTagCompound data = new NBTTagCompound(); @@ -102,7 +102,7 @@ public class XFactoryTool { } } }; - + public static BiConsumer LAMBDA_FOAM_HIT = (bullet, mop) -> { if(!bullet.worldObj.isRemote) { int ix = mop.blockX; @@ -135,7 +135,7 @@ public class XFactoryTool { if(fizz) bullet.worldObj.playSoundEffect(bullet.posX, bullet.posY, bullet.posZ, "random.fizz", 1.0F, 1.5F + bullet.worldObj.rand.nextFloat() * 0.5F); } }; - + public static Consumer LAMBDA_FOAM_UPDATE = (bullet) -> { if(bullet.worldObj.isRemote) { NBTTagCompound data = new NBTTagCompound(); @@ -149,7 +149,7 @@ public class XFactoryTool { MainRegistry.proxy.effectNT(data); } }; - + public static BiConsumer LAMBDA_SAND_HIT = (bullet, mop) -> { if(!bullet.worldObj.isRemote) { int ix = mop.blockX; @@ -174,7 +174,7 @@ public class XFactoryTool { } } }; - + public static Consumer LAMBDA_SAND_UPDATE = (bullet) -> { if(bullet.worldObj.isRemote) { NBTTagCompound data = new NBTTagCompound(); @@ -199,7 +199,7 @@ public class XFactoryTool { } bullet.ignoreFrustumCheck = true; }; - + public static BiConsumer LAMBDA_HOOK = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.BLOCK) { Vec3NT vec = new Vec3NT(-bullet.motionX, -bullet.motionY, -bullet.motionZ).normalizeSelf().multiply(0.05); @@ -207,7 +207,7 @@ public class XFactoryTool { bullet.getStuck(mop.blockX, mop.blockY, mop.blockZ, mop.sideHit); } }; - + public static BiConsumer LAMBDA_MORTAR = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 5, bullet.getThrower()); @@ -219,7 +219,7 @@ public class XFactoryTool { vnt.explode(); bullet.setDead(); }; - + public static BiConsumer LAMBDA_MORTAR_CHARGE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 15, bullet.getThrower()); @@ -246,14 +246,14 @@ public class XFactoryTool { .setOnUpdate(LAMBDA_SAND_UPDATE) .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) .setOnRicochet(LAMBDA_SAND_HIT); - + ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(6_000).setVel(3F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false) .setOnUpdate(LAMBDA_SET_HOOK).setOnImpact(LAMBDA_HOOK); ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setDamage(2.5F).setLife(200).setVel(3F).setGrav(0.035D) .setOnImpact(LAMBDA_MORTAR); ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setDamage(5F).setLife(200).setVel(3F).setGrav(0.035D) .setOnImpact(LAMBDA_MORTAR_CHARGE); - + ModItems.gun_fireext = new ItemGunBaseNT(WeaponQuality.UTILITY, new GunConfig() .dura(5_000).draw(10).inspect(55).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCLE) .rec(new Receiver(0) @@ -264,7 +264,7 @@ public class XFactoryTool { .setupStandardConfiguration() .orchestra(Orchestras.ORCHESTRA_FIREEXT) ).setUnlocalizedName("gun_fireext"); - + ModItems.gun_charge_thrower = new ItemGunChargeThrower(WeaponQuality.UTILITY, new GunConfig() .dura(3_000).draw(10).inspect(55).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) @@ -276,12 +276,12 @@ public class XFactoryTool { .anim(LAMBDA_CT_ANIMS).orchestra(Orchestras.ORCHESTRA_CHARGE_THROWER) ).setUnlocalizedName("gun_charge_thrower"); } - + public static BiConsumer LAMBDA_RECOIL_CT = (stack, ctx) -> { ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CT_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CT_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(-45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); @@ -295,7 +295,7 @@ public class XFactoryTool { .addBus("TURN", new BusAnimationSequence().addPos(0, 60, 0, 500, IType.SIN_FULL).hold(1750).addPos(0, 0, 0, 500, IType.SIN_FULL)) .addBus("ROLL", new BusAnimationSequence().hold(750).addPos(0, 0, -90, 500, IType.SIN_FULL).hold(1000).addPos(0, 0, 0, 500, IType.SIN_FULL)); } - + return null; }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java index 366b0df8a..630ad74fe 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java +++ b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java @@ -11,7 +11,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.items.weapon.sedna.mags.MagazineFluid; -import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import api.hbm.fluidmk2.IFillableItem; import net.minecraft.entity.EntityLivingBase; @@ -20,35 +20,35 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.Vec3; public class ItemGunChemthrower extends ItemGunBaseNT implements IFillableItem { - + public static final int CONSUMPTION = 3; public ItemGunChemthrower(WeaponQuality quality, GunConfig... cfg) { super(quality, cfg); } - + @Override public boolean acceptsFluid(FluidType type, ItemStack stack) { return getFluidType(stack) == type || this.getMagCount(stack) == 0; } - + public static final int transferSpeed = 50; @Override public int tryFill(FluidType type, int amount, ItemStack stack) { - + if(!acceptsFluid(type, stack)) return amount; if(this.getMagCount(stack) == 0) this.setMagType(stack, type.getID()); - + int fill = this.getMagCount(stack); int req = this.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getCapacity(stack) - fill; int toFill = Math.min(amount, req); toFill = Math.min(toFill, transferSpeed); this.setMagCount(stack, fill + toFill); - + return amount - toFill; } - + public FluidType getFluidType(ItemStack stack) { return Fluids.fromID(this.getMagType(stack)); } @@ -69,32 +69,32 @@ public class ItemGunChemthrower extends ItemGunBaseNT implements IFillableItem { @Override public FluidType getFirstFluidType(ItemStack stack) { return Fluids.fromID(this.getMagType(stack)); } @Override public int getFill(ItemStack stack) { return this.getMagCount(stack); } - + public static int getMagType(ItemStack stack) { return ItemGunBaseNT.getValueInt(stack, MagazineFluid.KEY_MAG_TYPE + 0); } public static void setMagType(ItemStack stack, int value) { ItemGunBaseNT.setValueInt(stack, MagazineFluid.KEY_MAG_TYPE + 0, value); } public static int getMagCount(ItemStack stack) { return ItemGunBaseNT.getValueInt(stack, MagazineFluid.KEY_MAG_COUNT + 0); } public static void setMagCount(ItemStack stack, int value) { ItemGunBaseNT.setValueInt(stack, MagazineFluid.KEY_MAG_COUNT + 0, value); } - + public static BiFunction LAMBDA_CAN_FIRE = (stack, ctx) -> { return ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmount(stack, ctx.inventory) >= CONSUMPTION; }; public static BiConsumer LAMBDA_FIRE = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; EntityPlayer player = ctx.getPlayer(); int index = ctx.configIndex; - ItemGunBaseNT.playAnimation(player, stack, AnimType.CYCLE, ctx.configIndex); - + ItemGunBaseNT.playAnimation(player, stack, GunAnimation.CYCLE, ctx.configIndex); + Receiver primary = ctx.config.getReceivers(stack)[0]; IMagazine mag = primary.getMagazine(stack); - + Vec3 offset = primary.getProjectileOffset(stack); double forwardOffset = offset.xCoord; double heightOffset = offset.yCoord; double sideOffset = offset.zCoord; - + EntityChemical chem = new EntityChemical(entity.worldObj, entity, sideOffset, heightOffset, forwardOffset); chem.setFluid((FluidType) mag.getType(stack, ctx.inventory)); entity.worldObj.spawnEntityInWorld(chem); - + mag.useUpAmmo(stack, ctx.inventory, CONSUMPTION); ItemGunBaseNT.setWear(stack, index, Math.min(ItemGunBaseNT.getWear(stack, index) + 1F, ctx.config.getDurability(stack))); }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeapnModG3SawedOff.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeapnModG3SawedOff.java index ce7a202e6..209ab2b71 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeapnModG3SawedOff.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeapnModG3SawedOff.java @@ -4,10 +4,10 @@ import java.util.function.BiFunction; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.factory.XFactory556mm; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; @@ -23,8 +23,8 @@ public class WeapnModG3SawedOff extends WeaponModBase { if(key == GunConfig.FUN_ANIMNATIONS) return (T) LAMBDA_G3_ANIMS; return base; } - - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_G3_ANIMS = (stack, type) -> { + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_G3_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_FULL)); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCarbineBayonet.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCarbineBayonet.java index 9bd319669..e85a7e71b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCarbineBayonet.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCarbineBayonet.java @@ -9,10 +9,10 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.factory.Orchestras; import com.hbm.items.weapon.sedna.factory.XFactory44; import com.hbm.items.weapon.sedna.factory.XFactory762mm; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import net.minecraft.block.Block; @@ -36,15 +36,15 @@ public class WeaponModCarbineBayonet extends WeaponModBase { if(key == GunConfig.I_INSPECTCANCEL) return cast(false, base); return base; } - + public static BiConsumer ORCHESTRA_CARBINE = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.INSPECT) { - + if(type == GunAnimation.INSPECT) { + if(timer == 15 && ctx.getPlayer() != null) { MovingObjectPosition mop = EntityDamageUtil.getMouseOver(ctx.getPlayer(), 3.0D); if(mop != null) { @@ -63,16 +63,16 @@ public class WeaponModCarbineBayonet extends WeaponModBase { } return; } - + Orchestras.ORCHESTRA_CARBINE.accept(stack, ctx); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CARBINE_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CARBINE_ANIMS = (stack, type) -> { switch(type) { case INSPECT: return new BusAnimation() .addBus("STAB", new BusAnimationSequence().addPos(0, 1, -2, 250, IType.SIN_DOWN).hold(250).addPos(0, 1, 5, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 500, IType.SIN_FULL)); } - + return XFactory762mm.LAMBDA_CARBINE_ANIMS.apply(stack, type); }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGreasegun.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGreasegun.java index 60ffeff59..72c41e01f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGreasegun.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGreasegun.java @@ -9,7 +9,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.factory.Orchestras; import com.hbm.particle.SpentCasing; import com.hbm.particle.helper.CasingCreator; -import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; @@ -30,15 +30,15 @@ public class WeaponModGreasegun extends WeaponModBase { if(key == GunConfig.CON_ORCHESTRA) return (T) ORCHESTRA_GREASEGUN; return base; } - + public static BiConsumer ORCHESTRA_GREASEGUN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); boolean aiming = ItemGunBaseNT.getIsAiming(stack); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(timer == 1) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.55, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -7.5F + (float)entity.getRNG().nextGaussian() * 5F, 12F + (float)entity.getRNG().nextGaussian() * 5F, casing.getName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java index 8d4070708..ea60c428d 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java @@ -8,15 +8,15 @@ import com.hbm.items.weapon.sedna.factory.XFactory12ga; import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; public class WeaponModLiberatorSpeedloader extends WeaponModBase { - + public static MagazineFullReload MAG = new MagazineFullReload(0, 4); public WeaponModLiberatorSpeedloader(int id) { @@ -31,11 +31,11 @@ public class WeaponModLiberatorSpeedloader extends WeaponModBase { if(MAG.acceptedBullets.isEmpty()) MAG.acceptedBullets.addAll(originalMag.acceptedBullets); return (T) MAG; } - + return base; } - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LIBERATOR_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LIBERATOR_ANIMS = (stack, type) -> { switch(type) { case RELOAD: return new BusAnimation() .addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 100)) @@ -51,7 +51,7 @@ public class WeaponModLiberatorSpeedloader extends WeaponModBase { .addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 0).addPos(15, 0, 0, 250).addPos(0, 0, 0, 50).addPos(0, 0, 0, 550).addPos(15, 0, 0, 100).addPos(15, 0, 0, 600).addPos(0, 0, 0, 50)) .addBus("BREAK", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_UP).addPos(0, 0, 0, 600).addPos(45, 0, 0, 250, IType.SIN_DOWN).addPos(45, 0, 0, 300).addPos(0, 0, 0, 150, IType.SIN_UP)); } - + return XFactory12ga.LAMBDA_LIBERATOR_ANIMS.apply(stack, type); }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModMASBayonet.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModMASBayonet.java index 876be1c3b..42e6b6910 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModMASBayonet.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModMASBayonet.java @@ -9,10 +9,10 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.factory.Orchestras; import com.hbm.items.weapon.sedna.factory.XFactory44; import com.hbm.items.weapon.sedna.factory.XFactory762mm; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import net.minecraft.block.Block; @@ -36,15 +36,15 @@ public class WeaponModMASBayonet extends WeaponModBase { if(key == GunConfig.I_INSPECTCANCEL) return cast(false, base); return base; } - + public static BiConsumer ORCHESTRA_MAS36 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; - AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - if(type == AnimType.INSPECT) { - + if(type == GunAnimation.INSPECT) { + if(timer == 15 && ctx.getPlayer() != null) { MovingObjectPosition mop = EntityDamageUtil.getMouseOver(ctx.getPlayer(), 3.0D); if(mop != null) { @@ -63,16 +63,16 @@ public class WeaponModMASBayonet extends WeaponModBase { } return; } - + Orchestras.ORCHESTRA_MAS36.accept(stack, ctx); }; - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MAS36_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_MAS36_ANIMS = (stack, type) -> { switch(type) { case INSPECT: return new BusAnimation() .addBus("STAB", new BusAnimationSequence().addPos(0, 1, -2, 250, IType.SIN_DOWN).hold(250).addPos(0, 1, 5, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 500, IType.SIN_FULL)); } - + return XFactory762mm.LAMBDA_MAS36_ANIMS.apply(stack, type); }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModPanzerschreckSawedOff.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModPanzerschreckSawedOff.java index 7e45dfaa6..b4b9bab20 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModPanzerschreckSawedOff.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModPanzerschreckSawedOff.java @@ -10,10 +10,10 @@ import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.factory.Lego; import com.hbm.items.weapon.sedna.factory.XFactoryRocket; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.util.EntityDamageUtil; import com.hbm.util.DamageResistanceHandler.DamageClass; @@ -32,13 +32,13 @@ public class WeaponModPanzerschreckSawedOff extends WeaponModBase { return base; } - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PANZERSCHRECK_ANIMS = (stack, type) -> { + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PANZERSCHRECK_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_DOWN)); } return XFactoryRocket.LAMBDA_PANZERSCHRECK_ANIMS.apply(stack, type); }; - + public static BiConsumer LAMBDA_FIRE = (stack, ctx) -> { Lego.LAMBDA_STANDARD_FIRE.accept(stack, ctx); if(ctx.entity != null) { diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 524319f01..e61fd0082 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -44,7 +44,7 @@ public class PacketDispatcher { //Signals server to do coord based satellite stuff wrapper.registerMessage(SatCoordPacket.Handler.class, SatCoordPacket.class, i++, Side.SERVER); //Triggers gun animations of the client - wrapper.registerMessage(GunAnimationPacket.Handler.class, GunAnimationPacket.class, i++, Side.CLIENT); + wrapper.registerMessage(HbmAnimationPacket.Handler.class, HbmAnimationPacket.class, i++, Side.CLIENT); //Sends a funi text to display like a music disc announcement wrapper.registerMessage(PlayerInformPacket.Handler.class, PlayerInformPacket.class, i++, Side.CLIENT); //Universal keybind packet diff --git a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/HbmAnimationPacket.java similarity index 68% rename from src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java rename to src/main/java/com/hbm/packet/toclient/HbmAnimationPacket.java index 7409d41e6..389afb680 100644 --- a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java +++ b/src/main/java/com/hbm/packet/toclient/HbmAnimationPacket.java @@ -9,10 +9,11 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations; -import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.anim.HbmAnimations.Animation; +import com.hbm.util.EnumUtil; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; @@ -24,51 +25,51 @@ import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -public class GunAnimationPacket implements IMessage { +public class HbmAnimationPacket implements IMessage { public short type; public int receiverIndex; - public int gunIndex; + public int itemIndex; - public GunAnimationPacket() { } + public HbmAnimationPacket() { } - public GunAnimationPacket(int type) { + public HbmAnimationPacket(int type) { this.type = (short) type; this.receiverIndex = 0; - this.gunIndex = 0; + this.itemIndex = 0; } - public GunAnimationPacket(int type, int rec) { + public HbmAnimationPacket(int type, int rec) { this.type = (short) type; this.receiverIndex = rec; - this.gunIndex = 0; + this.itemIndex = 0; } - public GunAnimationPacket(int type, int rec, int gun) { + public HbmAnimationPacket(int type, int rec, int gun) { this.type = (short) type; this.receiverIndex = rec; - this.gunIndex = gun; + this.itemIndex = gun; } @Override public void fromBytes(ByteBuf buf) { type = buf.readShort(); receiverIndex = buf.readInt(); - gunIndex = buf.readInt(); + itemIndex = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { buf.writeShort(type); buf.writeInt(receiverIndex); - buf.writeInt(gunIndex); + buf.writeInt(itemIndex); } - public static class Handler implements IMessageHandler { + public static class Handler implements IMessageHandler { @Override @SideOnly(Side.CLIENT) - public IMessage onMessage(GunAnimationPacket m, MessageContext ctx) { + public IMessage onMessage(HbmAnimationPacket m, MessageContext ctx) { try { @@ -79,9 +80,9 @@ public class GunAnimationPacket implements IMessage { if(stack == null) return null; if(stack.getItem() instanceof ItemGunBaseNT) { - handleSedna(player, stack, slot, AnimType.values()[m.type], m.receiverIndex, m.gunIndex); + handleSedna(player, stack, slot, GunAnimation.values()[m.type], m.receiverIndex, m.itemIndex); } else if(stack.getItem() instanceof IAnimatedItem) { - handleItem(player, stack, slot, AnimType.values()[m.type], m.receiverIndex, m.gunIndex); + handleItem(player, stack, slot, m.type, m.receiverIndex, m.itemIndex); } } catch(Exception x) { } @@ -89,11 +90,11 @@ public class GunAnimationPacket implements IMessage { return null; } - public static void handleSedna(EntityPlayer player, ItemStack stack, int slot, AnimType type, int receiverIndex, int gunIndex) { + public static void handleSedna(EntityPlayer player, ItemStack stack, int slot, GunAnimation type, int receiverIndex, int gunIndex) { ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); GunConfig config = gun.getConfig(stack, gunIndex); - if(type == AnimType.CYCLE) { + if(type == GunAnimation.CYCLE) { if(gunIndex < gun.lastShot.length) gun.lastShot[gunIndex] = System.currentTimeMillis(); gun.shotRand = player.worldObj.rand.nextDouble(); @@ -105,25 +106,26 @@ public class GunAnimationPacket implements IMessage { } } - BiFunction anims = config.getAnims(stack); + BiFunction anims = config.getAnims(stack); BusAnimation animation = anims.apply(stack, type); - if(animation == null && (type == AnimType.ALT_CYCLE || type == AnimType.CYCLE_EMPTY)) { - animation = anims.apply(stack, AnimType.CYCLE); + if(animation == null && (type == GunAnimation.ALT_CYCLE || type == GunAnimation.CYCLE_EMPTY)) { + animation = anims.apply(stack, GunAnimation.CYCLE); } if(animation != null) { Minecraft.getMinecraft().entityRenderer.itemRenderer.resetEquippedProgress(); Minecraft.getMinecraft().entityRenderer.itemRenderer.itemToRender = stack; - boolean isReloadAnimation = type == AnimType.RELOAD || type == AnimType.RELOAD_CYCLE; + boolean isReloadAnimation = type == GunAnimation.RELOAD || type == GunAnimation.RELOAD_CYCLE; if(isReloadAnimation && ArmorTrenchmaster.isTrenchMaster(player)) animation.setTimeMult(0.5D); HbmAnimations.hotbar[slot][gunIndex] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, isReloadAnimation && config.getReloadAnimSequential(stack)); } } - public static void handleItem(EntityPlayer player, ItemStack stack, int slot, AnimType type, int receiverIndex, int itemIndex) { - IAnimatedItem item = (IAnimatedItem) stack.getItem(); - BusAnimation animation = item.getAnimation(type, stack); + public static void handleItem(EntityPlayer player, ItemStack stack, int slot, short type, int receiverIndex, int itemIndex) { + IAnimatedItem item = (IAnimatedItem) stack.getItem(); + Class> animClass = item.getEnum(); + BusAnimation animation = item.getAnimation(EnumUtil.grabEnumSafely(animClass, type), stack); if(animation != null) { HbmAnimations.hotbar[slot][itemIndex] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation); diff --git a/src/main/java/com/hbm/render/anim/AnimationEnums.java b/src/main/java/com/hbm/render/anim/AnimationEnums.java new file mode 100644 index 000000000..7c91e468f --- /dev/null +++ b/src/main/java/com/hbm/render/anim/AnimationEnums.java @@ -0,0 +1,27 @@ +package com.hbm.render.anim; + +public class AnimationEnums { + + // A NOTE ON SHOTGUN STYLE RELOADS + // Make sure the RELOAD adds shells, not just RELOAD_CYCLE, they all proc once for each loaded shell + public static enum GunAnimation { + RELOAD, //either a full reload or start of a reload + RELOAD_CYCLE, //animation that plays for every individual round (for shotguns and similar single round loading weapons) + RELOAD_END, //animation for transitioning from our RELOAD_CYCLE to idle + CYCLE, //animation for every firing cycle + CYCLE_EMPTY, //animation for the final shot in the magazine + CYCLE_DRY, //animation for trying to fire, but no round is available + ALT_CYCLE, //animation for alt fire cycles + SPINUP, //animation for actionstart + SPINDOWN, //animation for actionend + EQUIP, //animation for drawing the weapon + INSPECT, //animation for inspecting the weapon + JAMMED, //animation for jammed weapons + } + + public static enum ToolAnimation { + SWING, + EQUIP, + } + +} diff --git a/src/main/java/com/hbm/render/anim/HbmAnimations.java b/src/main/java/com/hbm/render/anim/HbmAnimations.java index 831927b52..7078f668b 100644 --- a/src/main/java/com/hbm/render/anim/HbmAnimations.java +++ b/src/main/java/com/hbm/render/anim/HbmAnimations.java @@ -18,24 +18,6 @@ public class HbmAnimations { //animation is playing, though this will cancel the animation entirely. public static final Animation[][] hotbar = new Animation[9][8]; //now with 8 parallel rails per slot! time to get railed! - public static enum AnimType { - RELOAD, //either a full reload or start of a reload - RELOAD_CYCLE, //animation that plays for every individual round (for shotguns and similar single round loading weapons) - RELOAD_END, //animation for transitioning from our RELOAD_CYCLE to idle - CYCLE, //animation for every firing cycle / weapon swing - CYCLE_EMPTY, //animation for the final shot in the magazine - CYCLE_DRY, //animation for trying to fire, but no round is available - ALT_CYCLE, //animation for alt fire cycles - SPINUP, //animation for actionstart - SPINDOWN, //animation for actionend - EQUIP, //animation for drawing the weapon - INSPECT, //animation for inspecting the weapon - JAMMED, //animation for jammed weapons - } - - // A NOTE ON SHOTGUN STYLE RELOADS - // Make sure the RELOAD adds shells, not just RELOAD_CYCLE, they all proc once for each loaded shell - public static class Animation { //the "name" of the animation slot. if the item has a different key than @@ -55,9 +37,7 @@ public class HbmAnimations { } public Animation(String key, long startMillis, BusAnimation animation, boolean holdLastFrame) { - this.key = key; - this.startMillis = startMillis; - this.animation = animation; + this(key, startMillis, animation); this.holdLastFrame = holdLastFrame; } } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderCongoLake.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderCongoLake.java index 8dfd5df3a..b628ce34a 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderCongoLake.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderCongoLake.java @@ -9,8 +9,8 @@ import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; +import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.HbmAnimations; -import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; @@ -29,7 +29,7 @@ public class ItemRenderCongoLake extends ItemRenderWeaponBase { @Override public void setupFirstPerson(ItemStack stack) { GL11.glTranslated(0, 0, 0.875); - + float offset = 0.8F; standardAimingTransform(stack, -1.5F * offset, -2F * offset, 1.25F * offset, @@ -38,12 +38,12 @@ public class ItemRenderCongoLake extends ItemRenderWeaponBase { @Override public void renderFirstPerson(ItemStack stack) { - + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.congolake_tex); double scale = 0.5D; GL11.glScaled(scale, scale, scale); - + HbmAnimations.applyRelevantTransformation("Gun"); ResourceManager.congolake.renderPart("Gun"); @@ -94,30 +94,30 @@ public class ItemRenderCongoLake extends ItemRenderWeaponBase { GL11.glPushMatrix(); { IMagazine mag = gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack); - if(gun.getLastAnim(stack, 0) != AnimType.INSPECT || mag.getAmount(stack, MainRegistry.proxy.me().inventory) > 0) { //omit when inspecting and no shell is loaded - + if(gun.getLastAnim(stack, 0) != GunAnimation.INSPECT || mag.getAmount(stack, MainRegistry.proxy.me().inventory) > 0) { //omit when inspecting and no shell is loaded + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.casings_tex); - + HbmAnimations.applyRelevantTransformation("Shell"); - + SpentCasing casing = mag.getCasing(stack, MainRegistry.proxy.me().inventory); int[] colors = casing != null ? casing.getColors() : new int[] { SpentCasing.COLOR_CASE_40MM }; - + Color shellColor = new Color(colors[0]); GL11.glColor3f(shellColor.getRed() / 255F, shellColor.getGreen() / 255F, shellColor.getBlue() / 255F); ResourceManager.congolake.renderPart("Shell"); - + Color shellForeColor = new Color(colors.length > 1 ? colors[1] : colors[0]); GL11.glColor3f(shellForeColor.getRed() / 255F, shellForeColor.getGreen() / 255F, shellForeColor.getBlue() / 255F); ResourceManager.congolake.renderPart("ShellFore"); - + GL11.glColor3f(1F, 1F, 1F); } } GL11.glPopMatrix(); double smokeScale = 0.25; - + GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glPushMatrix(); GL11.glTranslated(0, 1.75, 4.25); @@ -170,7 +170,7 @@ public class ItemRenderCongoLake extends ItemRenderWeaponBase { @Override public void renderOther(ItemStack stack, ItemRenderType type) { GL11.glEnable(GL11.GL_LIGHTING); - + GL11.glShadeModel(GL11.GL_SMOOTH); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.congolake_tex); ResourceManager.congolake.renderAll(); From b9fabc3af40ae74feee81589c027935495b96f5b Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 15 Sep 2025 16:27:29 +0200 Subject: [PATCH 16/26] ow --- changelog | 31 +++------- gradle.properties | 2 +- .../inventory/recipes/anvil/AnvilRecipes.java | 1 - .../java/com/hbm/items/bomb/ItemSolinium.java | 2 +- .../java/com/hbm/items/food/ItemLemon.java | 4 +- .../java/com/hbm/items/machine/ItemMold.java | 2 +- .../com/hbm/items/special/ItemHotDusted.java | 2 +- .../hbm/items/special/ItemSchraranium.java | 5 +- .../hbm/items/weapon/ItemCustomMissile.java | 18 +++--- .../items/weapon/ItemCustomMissilePart.java | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 5 +- ...eEntityMachineSchrabidiumTransmutator.java | 2 +- .../storage/TileEntityMassStorage.java | 59 ++++++++----------- src/main/resources/assets/hbm/lang/de_DE.lang | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 16 ++--- 16 files changed, 62 insertions(+), 93 deletions(-) diff --git a/changelog b/changelog index 682553da7..696da46e0 100644 --- a/changelog +++ b/changelog @@ -1,27 +1,10 @@ -## Added -* New assembly factory - * Once again four recipe units at double the base speed - * Upgrades and stats are identical to the chemical factory - * Comes with an improved version of the old assemfac animations - ## Changed -* Updated chinese localization -* Added more QMAW manual pages -* WIAJ presentations now use the same configurable keybind as QMAW - * Shift has to be held for the presentations, while F1 will open the standard QMAW page -* Double UZIs no longer render weirdly when dropped -* Added keyboard controls to the recipe selector's scroll function - * Up and down keys scroll by one line - * PgUp and PgDown scroll by 5 lines (full page) - * Pos1 and End keys scroll to the top and bottom of the list respectively -* C4, like semtex, is now edible -* Assembly machines can now be made with the assembly machine - * The recipe is similar to the anvil recipe, but it uses only half as much steel, and one analog circuit instead of four vacuum tubes +* Added a (LEGACY) tag to the schrabidium transmutator +* Existing schrabidium transmutators are now way slower + * get souped +* Removed the schraranium tooltip mentioning the transmutator +* Changed the last remaining recipes that use the old steel pipes item, as well as the recipe for the steel pipes + * Any remaining steel pipes can be either smelted in a crucible or shredded ## Fixed -* Fixed fusion reactor item IO being broken -* Fixed issue with the chemical factory where the declogging feature would be triggered by a recipe processor that doesn't even own the reported slot -* Fixed the new PA not triggering the omega-12 achievement - * In addition to granting the achievement to nearby players on recipe completion, it is also granted when taking it out of the output slot -* Fixed the PUREX recipe for processing ZIRNOX MEU fuel not yielding technetium as it should -* Fixed turbofans pulling in players even when disabled via redstone \ No newline at end of file +* Fixed various issues with the localization \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 77f883e59..4272a5935 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=5453 +mod_build_number=5454 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 291cc2341..e6b9fc306 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -123,7 +123,6 @@ public class AnvilRecipes extends SerializableRecipe { smithingRecipes.add(new AnvilSmithingMold(10, new OreDictStack(IRON.ingot(), 9), new OreDictStack("ingot", 9))); smithingRecipes.add(new AnvilSmithingMold(11, new OreDictStack(IRON.plate(), 9), new OreDictStack("plate", 9))); smithingRecipes.add(new AnvilSmithingMold(12, new OreDictStack(IRON.block()), new OreDictStack("block"))); - smithingRecipes.add(new AnvilSmithingMold(13, new ComparableStack(ModItems.pipes_steel), new ItemStack[] {new ItemStack(ModItems.pipes_steel)})); smithingRecipes.add(new AnvilSmithingMold(20, new OreDictStack(ALLOY.wireDense(), 1), new OreDictStack("wireDense", 1))); smithingRecipes.add(new AnvilSmithingMold(21, new OreDictStack(ALLOY.wireDense(), 9), new OreDictStack("wireDense", 9))); diff --git a/src/main/java/com/hbm/items/bomb/ItemSolinium.java b/src/main/java/com/hbm/items/bomb/ItemSolinium.java index 9951a7111..26e8f45ae 100644 --- a/src/main/java/com/hbm/items/bomb/ItemSolinium.java +++ b/src/main/java/com/hbm/items/bomb/ItemSolinium.java @@ -14,7 +14,7 @@ public class ItemSolinium extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { list.add(I18nUtil.resolveKey("item.bomb_part.used_in")); - list.add(ModBlocks.nuke_solinium.getLocalizedName() + " name"); + list.add(ModBlocks.nuke_solinium.getLocalizedName()); super.addInformation(itemstack, player, list, bool); } } diff --git a/src/main/java/com/hbm/items/food/ItemLemon.java b/src/main/java/com/hbm/items/food/ItemLemon.java index 2d211ff2f..12dc09817 100644 --- a/src/main/java/com/hbm/items/food/ItemLemon.java +++ b/src/main/java/com/hbm/items/food/ItemLemon.java @@ -35,10 +35,10 @@ public class ItemLemon extends ItemFood { } if(this == ModItems.med_ipecac) { - String[] lines = I18nUtil.resolveKeyArray("item.med_ipecac.desc"); + String[] lines = I18nUtil.resolveKeyArray("item.med_ipecac.desс"); for (String line : lines) { list.add(line); - } + } } if(this == ModItems.med_ptsd) { diff --git a/src/main/java/com/hbm/items/machine/ItemMold.java b/src/main/java/com/hbm/items/machine/ItemMold.java index 25b273d4f..7d6b0a092 100644 --- a/src/main/java/com/hbm/items/machine/ItemMold.java +++ b/src/main/java/com/hbm/items/machine/ItemMold.java @@ -75,7 +75,7 @@ public class ItemMold extends Item { registerMold(new MoldShape( 11, L, "plates", MaterialShapes.PLATE, 9)); registerMold(new MoldShape( 21, L, "wires_dense", MaterialShapes.DENSEWIRE, 9)); registerMold(new MoldBlock( 12, L, "block", MaterialShapes.BLOCK)); - registerMold(new MoldSingle( 13, L, "pipes", new ItemStack(ModItems.pipes_steel), Mats.MAT_STEEL, MaterialShapes.BLOCK.q(3))); + //registerMold(new MoldSingle( 13, L, "pipes", new ItemStack(ModItems.pipes_steel), Mats.MAT_STEEL, MaterialShapes.BLOCK.q(3))); registerMold(new MoldMulti( 16, S, "c9", MaterialShapes.PLATE.q(1, 4), Mats.MAT_GUNMETAL, DictFrame.fromOne(ModItems.casing, EnumCasingType.SMALL), diff --git a/src/main/java/com/hbm/items/special/ItemHotDusted.java b/src/main/java/com/hbm/items/special/ItemHotDusted.java index 0c9f3f86d..8a4d75202 100644 --- a/src/main/java/com/hbm/items/special/ItemHotDusted.java +++ b/src/main/java/com/hbm/items/special/ItemHotDusted.java @@ -14,7 +14,7 @@ public class ItemHotDusted extends ItemHot { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add(String.format(I18nUtil.resolveKey("item.hot_dusted.forged"), stack.getItemDamage())); + list.add(I18nUtil.resolveKey("item.hot_dusted.forged", stack.getItemDamage())); } public static int getMaxHeat(ItemStack stack) { diff --git a/src/main/java/com/hbm/items/special/ItemSchraranium.java b/src/main/java/com/hbm/items/special/ItemSchraranium.java index 4e092b9a6..d3644a682 100644 --- a/src/main/java/com/hbm/items/special/ItemSchraranium.java +++ b/src/main/java/com/hbm/items/special/ItemSchraranium.java @@ -40,9 +40,6 @@ public class ItemSchraranium extends ItemCustomLore { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - if(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMFullSchrab) - list.add("pankæk"); - else - super.addInformation(itemstack, player, list, bool); + if(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMFullSchrab) list.add("pankæk"); } } diff --git a/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java b/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java index 6d428a401..1dba37387 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java +++ b/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java @@ -65,33 +65,33 @@ public class ItemCustomMissile extends Item { ItemCustomMissilePart thruster = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "thruster")); // warhead name - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.warhead") + ": " + EnumChatFormatting.GRAY + warhead.getWarhead((WarheadType)warhead.attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.warhead") + ": " + EnumChatFormatting.GRAY + warhead.getWarhead((WarheadType)warhead.attributes[0])); // strength - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.strength") + ": " + EnumChatFormatting.GRAY + (Float)warhead.attributes[1]); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.strength") + ": " + EnumChatFormatting.GRAY + (Float)warhead.attributes[1]); // fuel type & amount - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.fuelType") + ": " + EnumChatFormatting.GRAY + fuselage.getFuel((FuelType)fuselage.attributes[0])); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)fuselage.attributes[1] + "l"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.fuelType") + ": " + EnumChatFormatting.GRAY + fuselage.getFuel((FuelType)fuselage.attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)fuselage.attributes[1] + "l"); // chip inaccuracy - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.chipInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)chip.attributes[0] * 100 + "%"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.chipInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)chip.attributes[0] * 100 + "%"); // fin inaccuracy if(stability != null) - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.finInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)stability.attributes[0] * 100 + "%"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.finInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)stability.attributes[0] * 100 + "%"); else - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.finInaccuracy") + ": " + EnumChatFormatting.GRAY + "100%"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.finInaccuracy") + ": " + EnumChatFormatting.GRAY + "100%"); // size - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.size") + ": " + EnumChatFormatting.GRAY + fuselage.getSize(fuselage.top) + "/" + fuselage.getSize(fuselage.bottom)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.size") + ": " + EnumChatFormatting.GRAY + fuselage.getSize(fuselage.top) + "/" + fuselage.getSize(fuselage.bottom)); // health float health = warhead.health + fuselage.health + thruster.health; if(stability != null) health += stability.health; - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.health") + ": " + EnumChatFormatting.GRAY + health + "HP"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.desc.health") + ": " + EnumChatFormatting.GRAY + health + "HP"); } catch(Exception ex) { list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("error.generic")); diff --git a/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java b/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java index 29b391eaf..ab2b40f42 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java +++ b/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java @@ -305,7 +305,7 @@ public class ItemCustomMissilePart extends Item { case SOLID: return EnumChatFormatting.GOLD + I18nUtil.resolveKey("item.missile.fuel.solid"); case HYDROGEN: - return EnumChatFormatting.DARK_AQUA + I18nUtil.resolveKey("item.missile.fuel.ethanol_peroxide"); // closest match + return EnumChatFormatting.DARK_AQUA + I18nUtil.resolveKey("item.missile.fuel.hydrogen"); // closest match case XENON: return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("item.missile.fuel.xenon"); case BALEFIRE: diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 5b17eb388..95f5a80bc 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 (5453)"; + public static final String VERSION = "1.0.27 BETA (5454)"; //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 2a51edc27..da4758b0d 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -97,7 +97,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.hazmat_cloth_grey, 1), new Object[] { " P ", "ICI", " L ", 'C', ModItems.hazmat_cloth_red, 'P', IRON.plate(), 'L', PB.plate(), 'I', ANY_RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModItems.asbestos_cloth, 8), new Object[] { "SCS", "CPC", "SCS", 'S', Items.string, 'P', BR.dust(), 'C', Blocks.wool }); addRecipeAuto(new ItemStack(ModItems.bolt_spike, 2), new Object[] { "BB", "B ", "B ", 'B', STEEL.bolt()}); - addRecipeAuto(new ItemStack(ModItems.pipes_steel, 1), new Object[] { "B", "B", "B", 'B', STEEL.block() }); addRecipeAuto(new ItemStack(ModItems.plate_polymer, 8), new Object[] { "DD", 'D', ANY_PLASTIC.ingot() }); addRecipeAuto(new ItemStack(ModItems.plate_polymer, 8), new Object[] { "DD", 'D', ANY_RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModItems.plate_polymer, 16), new Object[] { "DD", 'D', FIBER.ingot()}); @@ -355,7 +354,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.stamp_desh_flat, 1), new Object[] { "BDB", "DSD", "BDB", 'B', brick, 'D', DESH.ingot(), 'S', FERRO.ingot() }); } - addRecipeAuto(new ItemStack(ModBlocks.watz_pump, 1), new Object[] { "MPM", "PCP", "PSP", 'M', ModItems.motor_desh, 'P', ANY_RESISTANTALLOY.plateCast(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'S', ModItems.pipes_steel }); + addRecipeAuto(new ItemStack(ModBlocks.watz_pump, 1), new Object[] { "MPM", "PCP", "PSP", 'M', ModItems.motor_desh, 'P', ANY_RESISTANTALLOY.plateCast(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'S', DURA.pipe() }); addRecipeAuto(new ItemStack(ModBlocks.reinforced_stone, 4), new Object[] { "FBF", "BFB", "FBF", 'F', Blocks.cobblestone, 'B', Blocks.stone }); addRecipeAuto(new ItemStack(ModBlocks.brick_light, 4), new Object[] { "FBF", "BFB", "FBF", 'F', Blocks.fence, 'B', Blocks.brick_block }); @@ -755,7 +754,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.dfc_core, 1), new Object[] { "DLD", "LML", "DLD", 'D', ModItems.ingot_bismuth, 'L', DNT.block(), 'M', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID) }); addRecipeAuto(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModItems.crystal_xen, 'L', ModItems.sat_head_laser }); addRecipeAuto(new ItemStack(ModBlocks.dfc_receiver, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModBlocks.block_dineutronium, 'L', STEEL.shell() }); - addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', ModItems.pipes_steel }); + addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', STEEL.pipe() }); addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModBlocks.fusion_conductor, 'L', ModItems.crystal_xen }); addRecipeAuto(new ItemStack(ModBlocks.barrel_plastic, 1), new Object[] { "IPI", "I I", "IPI", 'I', ModItems.plate_polymer, 'P', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.barrel_iron, 1), new Object[] { "IPI", "I I", "IPI", 'I', IRON.plate(), 'P', IRON.ingot() }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java index 6f9016127..206645805 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java @@ -29,7 +29,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB public long power = 0; public int process = 0; public static final long maxPower = 5000000; - public static final int processSpeed = 600; + public static final int processSpeed = 6000; private AudioWrapper audio; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 3d3213d2c..cba7bf1f0 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -101,13 +101,10 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } public boolean quickInsert(ItemStack stack) { - if (!canInsert(stack)) - return false; - - int remaining = getCapacity() - getStockpile(); + if(!canInsert(stack)) return false; - if (remaining < stack.stackSize) - return false; + int remaining = getCapacity() - getStockpile(); + if(remaining < stack.stackSize) return false; this.stack += stack.stackSize; stack.stackSize = 0; @@ -117,15 +114,12 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } public ItemStack quickExtract() { - if (!output) { - return null; - } + if(!output) return null; int amount = getType().getMaxStackSize(); - if (getStockpile() < amount) - return null; - + if(getStockpile() < amount) return null; + ItemStack result = slots[1].copy(); result.stackSize = amount; this.stack -= amount; @@ -138,18 +132,17 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa public int getTotalStockpile() { ItemStack type = getType(); - if (type == null) - return 0; + if(type == null) return 0; int result = getStockpile(); ItemStack inStack = slots[0]; - if (inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { - result += inStack.stackSize; - } + if(inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { + result += inStack.stackSize; + } ItemStack outStack = slots[2]; - if (outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { + if(outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { result += outStack.stackSize; } @@ -170,9 +163,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa private int changeTotalStockpile(int amount, boolean actually, int sign) { ItemStack type = getType(); - - if (type == null) - return amount; + if(type == null) return amount; int stockpileAvail = sign > 0 ? getCapacity() - getStockpile() : getStockpile(); @@ -186,21 +177,21 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa int inputAvail = 0; ItemStack inStack = slots[0]; - if (inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { + if(inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { inputAvail = sign > 0 ? inStack.getMaxStackSize() - inStack.stackSize : inStack.stackSize; - } else if (inStack == null) { + } else if(inStack == null) { inputAvail = sign > 0 ? type.getMaxStackSize() : 0; } - if (amount > 0 && inputAvail > 0) { + if(amount > 0 && inputAvail > 0) { int depositInput = Math.min(amount, inputAvail); - if (actually) { - if (slots[0] == null) { // Only possible with sign == +1 + if(actually) { + if(slots[0] == null) { // Only possible with sign == +1 slots[0] = slots[1].copy(); slots[0].stackSize = 0; } slots[0].stackSize += sign * depositInput; - if (slots[0].stackSize == 0) { + if(slots[0].stackSize == 0) { slots[0] = null; } } @@ -209,28 +200,28 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa int outputAvail = 0; ItemStack outStack = slots[2]; - if (outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { + if(outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { outputAvail = sign > 0 ? outStack.getMaxStackSize() - outStack.stackSize : outStack.stackSize; - } else if (outStack == null) { + } else if(outStack == null) { outputAvail = sign > 0 ? type.getMaxStackSize() : 0; } - if (amount > 0 && outputAvail > 0) { + if(amount > 0 && outputAvail > 0) { int depositOutput = Math.min(amount, outputAvail); - if (actually) { - if (slots[2] == null) { // Only possible with sign == +1 + if(actually) { + if(slots[2] == null) { // Only possible with sign == +1 slots[2] = slots[1].copy(); slots[2].stackSize = 0; } slots[2].stackSize += sign * depositOutput; - if (slots[2].stackSize == 0) { + if(slots[2].stackSize == 0) { slots[2] = null; } } amount -= depositOutput; } - if (actually) { + if(actually) { this.markDirty(); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 2e54e7e49..ee010eec8 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4504,7 +4504,7 @@ tile.machine_satlinker.name=Satelliten-ID-Manager tile.machine_sawmill.name=Stirling-Sägemühle tile.machine_sawmill.desc=Benötigt externe Hitzequelle.$Wärmestransferrate: T*0.1 TU/t$Minimalaufnahme: 100 TU/t, Maximalaufnahme: 300 TU/t tile.machine_schrabidium_battery.name=Schrabidium-Energiespeicherblock -tile.machine_schrabidium_transmutator.name=Schrabidium-Transmutationsgerät +tile.machine_schrabidium_transmutator.name=Schrabidium-Transmutationsgerät (LEGACY) tile.machine_selenium.name=Hochleistungs-Sternmotor tile.machine_shredder.name=Brecher tile.machine_silex.name=Laser-Isotopentrenner (SILEX) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 4157a22a5..fe825c74c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3389,8 +3389,9 @@ item.missile_emp_strong.name=Strong EMP Missile item.missile_endo.name=Endothermic Missile item.missile_exo.name=Exothermic Missile item.missile.fuel.balefire=BF Rocket Fuel -item.missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen item.missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide +item.missile.fuel.hydrogen=Liquid Hydrogen / Liquid Oxygen +item.missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen item.missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen item.missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide item.missile.fuel.solid=Solid Fuel @@ -5642,8 +5643,8 @@ tile.machine_arc_welder.name=Arc Welder tile.machine_armor_table.name=Armor Modification Table tile.machine_ashpit.name=Ashpit tile.machine_ashpit.desc=Collects ashes from fireboxes and heating ovens -tile.machine_assembler.name=Assembly Machine (Legacy) -tile.machine_assemfac.name=Assembly Factory (Legacy) +tile.machine_assembler.name=Assembly Machine (LEGACY) +tile.machine_assemfac.name=Assembly Factory (LEGACY) tile.machine_assembly_factory.name=Assembly Factory tile.machine_assembly_factory.desc=Quadruple assembly machine.$Recipes process twice as fast,$but need twice as much power.$Needs to be cooled with water,$produces low-pressure steam. tile.machine_assembly_machine.name=Assembly Machine @@ -5662,11 +5663,11 @@ tile.machine_boiler_off.name=Old Boiler tile.machine_catalytic_cracker.name=Catalytic Cracking Tower tile.machine_catalytic_reformer.name=Catalytic Reformer tile.machine_centrifuge.name=Centrifuge -tile.machine_chemfac.name=Chemical Factory (Legacy) +tile.machine_chemfac.name=Chemical Factory (LEGACY) tile.machine_chemical_factory.name=Chemical Factory tile.machine_chemical_factory.desc=Quadruple chemical plant.$Recipes process twice as fast,$but need twice as much power.$Needs to be cooled with water,$produces low-pressure steam. tile.machine_chemical_plant.name=Chemical Plant -tile.machine_chemplant.name=Chemical Plant (Legacy) +tile.machine_chemplant.name=Chemical Plant (LEGACY) tile.machine_chungus.name=Leviathan Steam Turbine tile.machine_chungus.desc=Efficiency: 85%% tile.machine_coal_off.name=Combustion Generator @@ -5769,7 +5770,7 @@ tile.machine_satlinker.name=Satellite ID Manager tile.machine_sawmill.name=Stirling Sawmill tile.machine_sawmill.desc=Requires external heat source.$Heat transfer rate: T*0.1 TU/t$Min intake: 100 TU/t, Max intake: 300 TU/t tile.machine_schrabidium_battery.name=Schrabidium Energy Storage Block -tile.machine_schrabidium_transmutator.name=Schrabidium Transmutation Device +tile.machine_schrabidium_transmutator.name=Schrabidium Transmutation Device (LEGACY) tile.machine_selenium.name=Radial Performance Engine tile.machine_shredder.name=Shredder tile.machine_silex.name=Laser Isotope Separation Chamber (SILEX) @@ -5842,6 +5843,7 @@ tile.nuke_n45.name=N45 Naval Mine tile.nuke_prototype.name=The Prototype tile.nuke_solinium.name=The Blue Rinse tile.nuke_tsar.name=Tsar Bomba +tile.oc_cable_paintable.name=Paintable Network Cable tile.oil_duct.name=Oil Pipe tile.oil_duct_solid.name=Coated Oil Pipe tile.oil_pipe.name=Crude Oil Extraction Pipe @@ -6445,5 +6447,3 @@ desc.gui.upgrade.effectiveness= * §aEffectiveness§r: Stacks to level 3 desc.gui.upgrade.overdrive= * §7Overdrive§r: Stacks to level 3 desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 - -tile.oc_cable_paintable.name=Paintable Network Cable From 2efce806a9c45476f2c66857353f5d67390f0029 Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 16 Sep 2025 09:52:52 +1000 Subject: [PATCH 17/26] aim IAnimatedItem like a bow --- src/main/java/com/hbm/items/IAnimatedItem.java | 5 ++++- src/main/java/com/hbm/items/tool/ItemBoltgun.java | 5 +++++ .../java/com/hbm/items/tool/ItemChainsaw.java | 6 ++++++ .../java/com/hbm/items/weapon/ItemCrucible.java | 11 +++++++---- .../com/hbm/main/ModEventHandlerRenderer.java | 15 +++++++++++++-- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/hbm/items/IAnimatedItem.java b/src/main/java/com/hbm/items/IAnimatedItem.java index 010c377f3..0728a56fd 100644 --- a/src/main/java/com/hbm/items/IAnimatedItem.java +++ b/src/main/java/com/hbm/items/IAnimatedItem.java @@ -10,9 +10,12 @@ import net.minecraft.item.ItemStack; public interface IAnimatedItem> { - // Fetch the animation for a given type + /** Fetch the animation for a given type */ public BusAnimation getAnimation(T type, ItemStack stack); + /** Should a player holding this item aim it like a gun/bow? */ + public boolean shouldPlayerModelAim(ItemStack stack); + // Runtime erasure means we have to explicitly give the class a second time :( public Class getEnum(); diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index 6524f41ea..c18e62e0b 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -127,4 +127,9 @@ public class ItemBoltgun extends Item implements IAnimatedItem { .addPos(0, 0, 1, 100)); } + @Override + public boolean shouldPlayerModelAim(ItemStack stack) { + return false; + } + } diff --git a/src/main/java/com/hbm/items/tool/ItemChainsaw.java b/src/main/java/com/hbm/items/tool/ItemChainsaw.java index c09acca18..c71748730 100644 --- a/src/main/java/com/hbm/items/tool/ItemChainsaw.java +++ b/src/main/java/com/hbm/items/tool/ItemChainsaw.java @@ -75,4 +75,10 @@ public class ItemChainsaw extends ItemToolAbilityFueled implements IHeldSoundPro public Class getEnum() { return ToolAnimation.class; } + + @Override + public boolean shouldPlayerModelAim(ItemStack stack) { + return false; + } + } diff --git a/src/main/java/com/hbm/items/weapon/ItemCrucible.java b/src/main/java/com/hbm/items/weapon/ItemCrucible.java index 9007c7ab4..3945e52cc 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCrucible.java +++ b/src/main/java/com/hbm/items/weapon/ItemCrucible.java @@ -153,11 +153,9 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IA if(HbmAnimations.getRelevantTransformation("SWING_ROT")[0] == 0) { - Random rand = Minecraft.getMinecraft().theWorld.rand; + int offset = itemRand.nextInt(80) - 20; - int offset = rand.nextInt(80) - 20; - - playSwing(0.8F + rand.nextFloat() * 0.2F); + playSwing(0.8F + itemRand.nextFloat() * 0.2F); return new BusAnimation() .addBus("SWING_ROT", new BusAnimationSequence() @@ -186,4 +184,9 @@ public class ItemCrucible extends ItemSwordAbility implements IEquipReceiver, IA return ToolAnimation.class; } + @Override + public boolean shouldPlayerModelAim(ItemStack stack) { + return false; + } + } diff --git a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java index 37fbc2d55..a3290fec9 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java +++ b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java @@ -4,6 +4,7 @@ import com.hbm.blocks.ICustomBlockHighlight; import com.hbm.config.ClientConfig; import com.hbm.config.RadiationConfig; import com.hbm.handler.pollution.PollutionHandler.PollutionType; +import com.hbm.items.IAnimatedItem; import com.hbm.items.armor.IArmorDisableModel; import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart; import com.hbm.items.weapon.sedna.ItemGunBaseNT; @@ -55,7 +56,7 @@ public class ModEventHandlerRenderer { private static ModelMan manlyModel; private static boolean[] partsHidden = new boolean[7]; - + @SubscribeEvent public void onRenderTickPre(TickEvent.RenderTickEvent event) { } @@ -187,7 +188,17 @@ public class ModEventHandlerRenderer { RenderPlayer renderer = event.renderer; ItemStack held = player.getHeldItem(); - if(held != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT) { + if(held == null) return; + + if(held.getItem() instanceof IAnimatedItem) { + if(((IAnimatedItem) held.getItem()).shouldPlayerModelAim(held)) { + renderer.modelBipedMain.aimedBow = true; + renderer.modelArmor.aimedBow = true; + renderer.modelArmorChestplate.aimedBow = true; + } + } + + if(held.getItem() instanceof ItemGunBaseNT) { renderer.modelBipedMain.aimedBow = true; renderer.modelArmor.aimedBow = true; renderer.modelArmorChestplate.aimedBow = true; From 715ecda0dd7ac398bf59e37868eb16f4af2c2835 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 17 Sep 2025 16:11:28 +0200 Subject: [PATCH 18/26] ough --- changelog | 11 +++--- src/main/java/com/hbm/blocks/ModBlocks.java | 34 +++++++++---------- .../hbm/qmaw/components/QComponentLink.java | 3 ++ .../machine/TileEntityMachineWoodBurner.java | 6 ++-- .../assets/hbm/manual/machine/difurnace.json | 11 ++++++ .../hbm/manual/machine/rotaryfurnace.json | 11 ++++++ 6 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 src/main/resources/assets/hbm/manual/machine/difurnace.json create mode 100644 src/main/resources/assets/hbm/manual/machine/rotaryfurnace.json diff --git a/changelog b/changelog index 696da46e0..f57182caa 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,7 @@ ## Changed -* Added a (LEGACY) tag to the schrabidium transmutator -* Existing schrabidium transmutators are now way slower - * get souped -* Removed the schraranium tooltip mentioning the transmutator -* Changed the last remaining recipes that use the old steel pipes item, as well as the recipe for the steel pipes - * Any remaining steel pipes can be either smelted in a crucible or shredded +* Added more QMAW pages +* Removed most old particle accelerator blocks from the creative inventory ## Fixed -* Fixed various issues with the localization \ No newline at end of file +* Fixed wood burner only being able to create one ash pile per item burned, even when that item yields more, creating a backlog in the internal ash value +* Fixed some QMAW link icons not having the correct block lighting applied \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 74d743a47..bd6c16ccd 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1841,13 +1841,13 @@ public class ModBlocks { machine_exposure_chamber = new MachineExposureChamber(Material.iron).setBlockName("machine_exposure_chamber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_aluminium"); machine_radgen = new MachineRadGen(Material.iron).setBlockName("machine_radgen").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_radgen"); - hadron_plating = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating"); - hadron_plating_blue = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_blue").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_blue"); - hadron_plating_black = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_black").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_black"); - hadron_plating_yellow = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_yellow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_yellow"); - hadron_plating_striped = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_striped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_striped"); - hadron_plating_voltz = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_voltz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_voltz"); - hadron_plating_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_plating_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_glass"); + hadron_plating = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating"); + hadron_plating_blue = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_blue").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_blue"); + hadron_plating_black = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_black").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_black"); + hadron_plating_yellow = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_yellow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_yellow"); + hadron_plating_striped = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_striped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_striped"); + hadron_plating_voltz = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_voltz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_voltz"); + hadron_plating_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_plating_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_glass"); hadron_coil_alloy = new BlockHadronCoil(Material.iron, 10).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_alloy").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_alloy"); hadron_coil_gold = new BlockHadronCoil(Material.iron, 25).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_gold"); hadron_coil_neodymium = new BlockHadronCoil(Material.iron, 50).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_neodymium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_neodymium"); @@ -1857,16 +1857,16 @@ public class ModBlocks { hadron_coil_starmetal = new BlockHadronCoil(Material.iron, 1000).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_starmetal").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_starmetal"); hadron_coil_chlorophyte = new BlockHadronCoil(Material.iron, 2500).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_chlorophyte").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_chlorophyte"); hadron_coil_mese = new BlockHadronCoil(Material.iron, 10000).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_mese").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_mese"); - hadron_power = new BlockHadronPower(Material.iron, 1000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power"); - hadron_power_10m = new BlockHadronPower(Material.iron, 10000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power"); - hadron_power_100m = new BlockHadronPower(Material.iron, 100000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_100m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power"); - hadron_power_1g = new BlockHadronPower(Material.iron, 1000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_1g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power"); - hadron_power_10g = new BlockHadronPower(Material.iron, 10000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power"); - hadron_diode = new BlockHadronDiode(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_diode").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - hadron_analysis = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis"); - hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass"); - hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_access"); - hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_core"); + hadron_power = new BlockHadronPower(Material.iron, 1000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power"); + hadron_power_10m = new BlockHadronPower(Material.iron, 10000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power"); + hadron_power_100m = new BlockHadronPower(Material.iron, 100000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_100m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power"); + hadron_power_1g = new BlockHadronPower(Material.iron, 1000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_1g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power"); + hadron_power_10g = new BlockHadronPower(Material.iron, 10000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power"); + hadron_diode = new BlockHadronDiode(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_diode").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); + hadron_analysis = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_analysis"); + hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass"); + hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_access"); + hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_core"); pa_source = new BlockPASource().setStepSound(Block.soundTypeMetal).setBlockName("pa_source").setHardness(5.0F).setResistance(10.0F); pa_beamline = new BlockPABeamline().setStepSound(Block.soundTypeMetal).setBlockName("pa_beamline").setHardness(5.0F).setResistance(10.0F); diff --git a/src/main/java/com/hbm/qmaw/components/QComponentLink.java b/src/main/java/com/hbm/qmaw/components/QComponentLink.java index acb4a4c9b..abc4403ed 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentLink.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentLink.java @@ -1,6 +1,7 @@ package com.hbm.qmaw.components; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; import com.hbm.qmaw.GuiQMAW; import com.hbm.qmaw.ManualElement; @@ -64,6 +65,7 @@ public class QComponentLink extends ManualElement { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); Minecraft mc = Minecraft.getMinecraft(); GL11.glRotated(180, 1, 0, 0); RenderHelper.enableStandardItemLighting(); @@ -71,6 +73,7 @@ public class QComponentLink extends ManualElement { itemRender.renderItemAndEffectIntoGUI(this.font, mc.renderEngine, this.icon, x, y - 1); itemRender.renderItemOverlayIntoGUI(this.font, mc.renderEngine, this.icon, x, y - 1, null); RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index 3a1ebe90b..da5f14b53 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -90,9 +90,9 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement if(type == EnumAshType.COAL) ashLevelCoal += burn; if(type == EnumAshType.MISC) ashLevelMisc += burn; int threshold = 2000; - if(processAsh(ashLevelWood, EnumAshType.WOOD, threshold)) ashLevelWood -= threshold; - if(processAsh(ashLevelCoal, EnumAshType.COAL, threshold)) ashLevelCoal -= threshold; - if(processAsh(ashLevelMisc, EnumAshType.MISC, threshold)) ashLevelMisc -= threshold; + while(processAsh(ashLevelWood, EnumAshType.WOOD, threshold)) ashLevelWood -= threshold; + while(processAsh(ashLevelCoal, EnumAshType.COAL, threshold)) ashLevelCoal -= threshold; + while(processAsh(ashLevelMisc, EnumAshType.MISC, threshold)) ashLevelMisc -= threshold; this.maxBurnTime = this.burnTime = burn; ItemStack container = slots[0].getItem().getContainerItem(slots[0]); diff --git a/src/main/resources/assets/hbm/manual/machine/difurnace.json b/src/main/resources/assets/hbm/manual/machine/difurnace.json new file mode 100644 index 000000000..7161bf30b --- /dev/null +++ b/src/main/resources/assets/hbm/manual/machine/difurnace.json @@ -0,0 +1,11 @@ +{ + "name": "Blast Furnace", + "icon": ["hbm:tile.machine_difurnace_off", 1, 0], + "trigger": [["hbm:tile.machine_difurnace_off"], ["hbm:tile.machine_difurnace_extension"]], + "title": { + "en_US": "Blast Furnace" + }, + "content": { + "en_US": "Simple furnace that can combine two items into one output, usually in the form of an alloy. Needed early on as the first source of [[steel|Steel]], [[red copper|Minecraft Grade Copper]] and [[advanced alloy|Advanced Alloy]]. Does not accept all furnace fuels, only works with hot burning ones like coal, coke or lava buckets. Can be accelerated by placing a blast furnace extension on top, which also makes it more efficient." + } +} diff --git a/src/main/resources/assets/hbm/manual/machine/rotaryfurnace.json b/src/main/resources/assets/hbm/manual/machine/rotaryfurnace.json new file mode 100644 index 000000000..fee6cbd54 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/machine/rotaryfurnace.json @@ -0,0 +1,11 @@ +{ + "name": "Rotary Furnace", + "icon": ["hbm:tile.machine_rotary_furnace", 1, 0], + "trigger": [["hbm:tile.machine_rotary_furnace"]], + "title": { + "en_US": "Rotary Furnace" + }, + "content": { + "en_US": "A type of alloying furnace that can accept multiple item inputs and a fluid and output the result as liquid metal which needs to be cast. Used to make [[weapon steel|Weapon Steel]] and [[saturnite|Saturnite]], and features alternate recipes for [[gunmetal|Gunmetal]] and [[steel|Steel]]. Requires both a solid fuel and [[steam|Steam]] to function, creating [[low-pressure steam|Low-Pressure Steam]] in the process.

Items can be inserted from the color-coded access points in the back. The input fluid can only be connected to one of the two grey ports on the output side. Steam and low-pressure steam ducts need to be connected to the steam engine on the left. Solid fuel can be inserted through the iron bars at the front. Exhaust smoke can be extracted from the opening at the top, the furnace will emit a smoke plume if not connected to a smoke stack." + } +} From 2ffe3d007237636b6ce1484cc44371f3837fc87e Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 18 Sep 2025 13:12:42 +1000 Subject: [PATCH 19/26] fix entity registration, complete with functioning spawn eggs --- .../java/com/hbm/entity/EntityMappings.java | 20 +-- .../java/com/hbm/entity/ModEntityList.java | 149 ++++++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 54 +++---- src/main/resources/assets/hbm/lang/en_US.lang | 54 +++---- src/main/resources/assets/hbm/lang/fr_FR.lang | 6 +- src/main/resources/assets/hbm/lang/it_IT.lang | 64 ++++---- src/main/resources/assets/hbm/lang/pl_PL.lang | 66 ++++---- src/main/resources/assets/hbm/lang/ru_RU.lang | 54 +++---- src/main/resources/assets/hbm/lang/uk_UA.lang | 134 ++++++++-------- src/main/resources/assets/hbm/lang/zh_CN.lang | 54 +++---- 10 files changed, 402 insertions(+), 253 deletions(-) create mode 100644 src/main/java/com/hbm/entity/ModEntityList.java diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 5f50d8f1a..9c5d5358d 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -253,36 +253,36 @@ public class EntityMappings { addSpawn(EntityCreeperGold.class, 1, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); addSpawn(EntityPlasticBag.class, 1, 1, 3, EnumCreatureType.waterCreature, BiomeDictionary.getBiomesForType(Type.OCEAN)); addSpawn(EntityPigeon.class, 1, 5, 10, EnumCreatureType.creature, BiomeDictionary.getBiomesForType(Type.PLAINS)); - + int id = 0; for(Quartet, String, Integer, Boolean> entry : entityMappings) { - EntityRegistry.registerModEntity(entry.getW(), entry.getX(), id++, MainRegistry.instance, entry.getY(), 1, entry.getZ()); + ModEntityList.registerEntity(entry.getW(), entry.getX(), id++, MainRegistry.instance, entry.getY(), 1, entry.getZ()); } - + for(Quartet, String, Integer, Integer> entry : mobMappings) { - EntityRegistry.registerGlobalEntityID(entry.getW(), entry.getX(), EntityRegistry.findGlobalUniqueEntityId(), entry.getY(), entry.getZ()); + ModEntityList.registerEntity(entry.getW(), entry.getX(), id++, MainRegistry.instance, entry.getY(), entry.getZ()); } } - + private static void addEntity(Class clazz, String name, int trackingRange) { addEntity(clazz, name, trackingRange, true); } - + private static void addEntity(Class clazz, String name, int trackingRange, boolean velocityUpdates) { entityMappings.add(new Quartet(clazz, name, trackingRange, velocityUpdates)); } - + private static void addMob(Class clazz, String name, int color1, int color2) { mobMappings.add(new Quartet(clazz, name, color1, color2)); } public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType typeOfCreature, BiomeGenBase... biomes) { - + for(BiomeGenBase biome : biomes) { - + if(biome == null) continue; if(biome instanceof BiomeGenMushroomIsland) continue; - + List spawns = biome.getSpawnableList(typeOfCreature); for(SpawnListEntry entry : spawns) { diff --git a/src/main/java/com/hbm/entity/ModEntityList.java b/src/main/java/com/hbm/entity/ModEntityList.java new file mode 100644 index 000000000..141297a5b --- /dev/null +++ b/src/main/java/com/hbm/entity/ModEntityList.java @@ -0,0 +1,149 @@ +package com.hbm.entity; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.common.registry.EntityRegistry; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityList.EntityEggInfo; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ModEntityList { + + private static EntityData[] array = new EntityData[0]; + private static final Map> map = new HashMap>(); + + public static List eggIdList = new ArrayList(); + public static Map, Integer> eggIdMap = new HashMap, Integer>(); + + public static void registerEntity(Class entityClass, String entityName, int id, Object mod) { + registerEntity(entityClass, entityName, id, mod, 80, 3, true, -1, -1, false); + } + + public static void registerEntity(Class entityClass, String entityName, int id, Object mod, int eggColor1, int eggColor2) { + registerEntity(entityClass, entityName, id, mod, 80, 3, true, eggColor1, eggColor2, true); + } + + public static void registerEntity(Class entityClass, String entityName, int id, Object mod, int trackingRange, int updateFrequency, boolean sendsVelocityUpdates) { + registerEntity(entityClass, entityName, id, mod, trackingRange, updateFrequency, sendsVelocityUpdates, -1, -1, false); + } + + public static void registerEntity(Class entityClass, String entityName, int id, Object mod, int trackingRange, int updateFrequency, boolean sendsVelocityUpdates, int eggColor1, int eggColor2) { + registerEntity(entityClass, entityName, id, mod, trackingRange, updateFrequency, sendsVelocityUpdates, eggColor1, eggColor2, true); + } + + private static void registerEntity(Class entityClass, String entityName, int id, Object mod, int trackingRange, int updateFrequency, boolean sendsVelocityUpdates, int eggColor1, int eggColor2, boolean hasEgg) { + EntityRegistry.registerModEntity(entityClass, entityName, id, mod, trackingRange, updateFrequency, sendsVelocityUpdates); + + if(id >= array.length) { + EntityData[] newArray = new EntityData[id + 5]; + System.arraycopy(array, 0, newArray, 0, array.length); + array = newArray; + } + + if(array[id] != null) + throw new IllegalArgumentException("ID " + id + " is already being used! Please report this error!"); + + array[id] = new EntityData(entityName, id, eggColor1, eggColor2, hasEgg); + map.put(id, entityClass); + + if(eggColor1 != -1) + registerEntityEgg(entityClass, eggColor1, eggColor2); + } + + public static String getName(int id) { + EntityData data = getData(id); + if(data == null) + return null; + + return RefStrings.MODID + "." + data.name; + } + + public static EntityData getData(int id) { + if(id >= array.length) + return null; + + return array[id]; + } + + public static boolean hasEntitiesWithEggs() { + for(EntityData data : array) { + if(data != null && data.hasEgg) return true; + } + + return false; + } + + public static Entity createEntityByID(int id, World world) { + EntityData data = getData(id); + + if(data == null || !data.hasEgg) + return null; + + try { + Class cls = map.get(id); + + if(cls != null) + return cls.getConstructor(World.class).newInstance(world); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static EntityData[] getDatasWithEggs() { + List list = new LinkedList(); + for(Integer id : map.keySet()) { + EntityData data = getData(id); + if(data != null && data.hasEgg) + list.add(data); + } + return list.toArray(new EntityData[list.size()]); + } + + public static int eggIDCounter = 499; + + @SuppressWarnings("unchecked") + public static void registerEntityEgg(Class entity, int primaryColor, int secondaryColor) { + int id = getUniqueEntityEggId(); + + EntityList.IDtoClassMapping.put(id, entity); + EntityList.entityEggs.put(id, new EntityEggInfo(id, primaryColor, secondaryColor)); + eggIdMap.put(entity, id); + } + + public static ItemStack getEggFromEntity(Entity entity) { + return new ItemStack(Items.spawn_egg, 1, eggIdMap.get(entity.getClass())); + } + + public static int getUniqueEntityEggId() { + while(EntityList.getClassFromID(++eggIDCounter) != null) {} + eggIdList.add(eggIDCounter); + return eggIDCounter; + } + + public static class EntityData { + + public final String name; + public final int id, eggColor1, eggColor2; + public final boolean hasEgg; + + EntityData(String name, int id, int eggColor1, int eggColor2, boolean hasEgg) { + this.name = name; + this.id = id; + this.eggColor1 = eggColor1; + this.eggColor2 = eggColor2; + this.hasEgg = hasEgg; + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 2e54e7e49..e50f77aa5 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -614,34 +614,34 @@ digamma.playerHealth=Digammaeinfluss: digamma.playerRes=Digammaresistenz: digamma.title=DIGAMMA-DIAGNOSEGERÄT -entity.entity_cyber_crab.name=Cyber-Krabbe -entity.entity_elder_one.name=Quackos der Älteste -entity.entity_fucc_a_ducc.name=Ente -entity.entity_glyphid.name=Glyphid -entity.entity_glyphid_behemoth.name=Glyphid-Behemoth -entity.entity_glyphid_blaster.name=Glyphid-Blaster -entity.entity_glyphid_bombardier.name=Glyphid-Bombardierer -entity.entity_glyphid_brawler.name=Glyphid-Schläger -entity.entity_glyphid_brenda.name=Brenda -entity.entity_glyphid_digger.name=Glyphid-Gräber -entity.entity_glyphid_nuclear.name=Der dicke Johnson -entity.entity_glyphid_scout.name=Glyphid-Späher -entity.entity_ntm_fbi.name=FBI Agent -entity.entity_ntm_fbi_drone.name=FBI Drone -entity.entity_ntm_radiation_blaze.name=Kernschmelze-Elementar +entity.hbm.entity_cyber_crab.name=Cyber-Krabbe +entity.hbm.entity_elder_one.name=Quackos der Älteste +entity.hbm.entity_fucc_a_ducc.name=Ente +entity.hbm.entity_glyphid.name=Glyphid +entity.hbm.entity_glyphid_behemoth.name=Glyphid-Behemoth +entity.hbm.entity_glyphid_blaster.name=Glyphid-Blaster +entity.hbm.entity_glyphid_bombardier.name=Glyphid-Bombardierer +entity.hbm.entity_glyphid_brawler.name=Glyphid-Schläger +entity.hbm.entity_glyphid_brenda.name=Brenda +entity.hbm.entity_glyphid_digger.name=Glyphid-Gräber +entity.hbm.entity_glyphid_nuclear.name=Der dicke Johnson +entity.hbm.entity_glyphid_scout.name=Glyphid-Späher +entity.hbm.entity_ntm_fbi.name=FBI Agent +entity.hbm.entity_ntm_fbi_drone.name=FBI Drone +entity.hbm.entity_ntm_radiation_blaze.name=Kernschmelze-Elementar entity.hbm.entity_ntm_ufo.name=Marsianisches Invasionsschiff -entity.entity_mob_hunter_chopper.name=Jagdschrauber -entity.entity_mob_mask_man.name=Maskenmann -entity.entity_mob_gold_creeper.name=Goldener Creeper -entity.entity_mob_nuclear_creeper.name=Nuklearer Creeper -entity.entity_mob_phosgene_creeper.name=Phosgen-Creeper -entity.entity_mob_tainted_creeper.name=Verseuchter Creeper -entity.entity_mob_volatile_creeper.name=Instabiler Creeper -entity.entity_parasite_maggot.name=Parasitische Made -entity.entity_pigeon.name=Taube -entity.entity_plastic_bag.name=Plastiktüte -entity.entity_taint_crab.name=Verseuchte Krabbe -entity.entity_tesla_crab.name=Tesla-Krabbe +entity.hbm.entity_mob_hunter_chopper.name=Jagdschrauber +entity.hbm.entity_mob_mask_man.name=Maskenmann +entity.hbm.entity_mob_gold_creeper.name=Goldener Creeper +entity.hbm.entity_mob_nuclear_creeper.name=Nuklearer Creeper +entity.hbm.entity_mob_phosgene_creeper.name=Phosgen-Creeper +entity.hbm.entity_mob_tainted_creeper.name=Verseuchter Creeper +entity.hbm.entity_mob_volatile_creeper.name=Instabiler Creeper +entity.hbm.entity_parasite_maggot.name=Parasitische Made +entity.hbm.entity_pigeon.name=Taube +entity.hbm.entity_plastic_bag.name=Plastiktüte +entity.hbm.entity_taint_crab.name=Verseuchte Krabbe +entity.hbm.entity_tesla_crab.name=Tesla-Krabbe entity.hbm.entity_balls_o_tron.name=Balls-O-Tron Prime entity.hbm.entity_balls_o_tron_seg.name=Balls-O-Tron Segment entity.hbm.entity_bullet.name=Patrone diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 4157a22a5..47d331815 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1197,34 +1197,34 @@ digamma.playerHealth=Digamma influence: digamma.playerRes=Digamma resistance: digamma.title=DIGAMMA DIAGNOSTIC -entity.entity_cyber_crab.name=Cyber Crab -entity.entity_elder_one.name=Quackos The Elder One -entity.entity_fucc_a_ducc.name=Duck -entity.entity_glyphid.name=Glyphid -entity.entity_glyphid_behemoth.name=Glyphid Behemoth -entity.entity_glyphid_blaster.name=Glyphid Blaster -entity.entity_glyphid_bombardier.name=Glyphid Bombardier -entity.entity_glyphid_brawler.name=Glyphid Brawler -entity.entity_glyphid_brenda.name=Brenda -entity.entity_glyphid_digger.name=Glyphid Digger -entity.entity_glyphid_nuclear.name=Big Man Johnson -entity.entity_glyphid_scout.name=Glyphid Scout -entity.entity_ntm_fbi.name=FBI Agent -entity.entity_ntm_fbi_drone.name=FBI Drone -entity.entity_ntm_radiation_blaze.name=Meltdown Elemental +entity.hbm.entity_cyber_crab.name=Cyber Crab +entity.hbm.entity_elder_one.name=Quackos The Elder One +entity.hbm.entity_fucc_a_ducc.name=Duck +entity.hbm.entity_glyphid.name=Glyphid +entity.hbm.entity_glyphid_behemoth.name=Glyphid Behemoth +entity.hbm.entity_glyphid_blaster.name=Glyphid Blaster +entity.hbm.entity_glyphid_bombardier.name=Glyphid Bombardier +entity.hbm.entity_glyphid_brawler.name=Glyphid Brawler +entity.hbm.entity_glyphid_brenda.name=Brenda +entity.hbm.entity_glyphid_digger.name=Glyphid Digger +entity.hbm.entity_glyphid_nuclear.name=Big Man Johnson +entity.hbm.entity_glyphid_scout.name=Glyphid Scout +entity.hbm.entity_ntm_fbi.name=FBI Agent +entity.hbm.entity_ntm_fbi_drone.name=FBI Drone +entity.hbm.entity_ntm_radiation_blaze.name=Meltdown Elemental entity.hbm.entity_ntm_ufo.name=Martian Invasion Ship -entity.entity_mob_hunter_chopper.name=Hunter Chopper -entity.entity_mob_mask_man.name=Mask Man -entity.entity_mob_gold_creeper.name=Golden Creeper -entity.entity_mob_nuclear_creeper.name=Nuclear Creeper -entity.entity_mob_phosgene_creeper.name=Phosgene Creeper -entity.entity_mob_tainted_creeper.name=Tainted Creeper -entity.entity_mob_volatile_creeper.name=Volatile Creeper -entity.entity_parasite_maggot.name=Parasitic Maggot -entity.entity_pigeon.name=Pigeon -entity.entity_plastic_bag.name=Plastic Bag -entity.entity_taint_crab.name=Taint Crab -entity.entity_tesla_crab.name=Tesla Crab +entity.hbm.entity_mob_hunter_chopper.name=Hunter Chopper +entity.hbm.entity_mob_mask_man.name=Mask Man +entity.hbm.entity_mob_gold_creeper.name=Golden Creeper +entity.hbm.entity_mob_nuclear_creeper.name=Nuclear Creeper +entity.hbm.entity_mob_phosgene_creeper.name=Phosgene Creeper +entity.hbm.entity_mob_tainted_creeper.name=Tainted Creeper +entity.hbm.entity_mob_volatile_creeper.name=Volatile Creeper +entity.hbm.entity_parasite_maggot.name=Parasitic Maggot +entity.hbm.entity_pigeon.name=Pigeon +entity.hbm.entity_plastic_bag.name=Plastic Bag +entity.hbm.entity_taint_crab.name=Taint Crab +entity.hbm.entity_tesla_crab.name=Tesla Crab entity.hbm.entity_balls_o_tron.name=Balls-O-Tron Prime entity.hbm.entity_balls_o_tron_seg.name=Balls-O-Tron Segment entity.hbm.entity_bullet.name=Bullet diff --git a/src/main/resources/assets/hbm/lang/fr_FR.lang b/src/main/resources/assets/hbm/lang/fr_FR.lang index 502021ea3..8e9630865 100644 --- a/src/main/resources/assets/hbm/lang/fr_FR.lang +++ b/src/main/resources/assets/hbm/lang/fr_FR.lang @@ -1127,9 +1127,9 @@ item.stealth_boy.name=Module de furtiviter entity.hbm.entity_bullet.name=Balle entity.hbm.entity_rocket.name=Roquettes entity.hbm.entity_schrabnel.name=Shrapnel -entity.entity_mob_nuclear_creeper.name=Creeper nucléaire -entity.entity_mob_hunter_chopper.name=Hélicoptère de chasse -entity.entity_cyber_crab.name=Cyber-crabe +entity.hbm.entity_mob_nuclear_creeper.name=Creeper nucléaire +entity.hbm.entity_mob_hunter_chopper.name=Hélicoptère de chasse +entity.hbm.entity_cyber_crab.name=Cyber-crabe item.cap_aluminium.name=Capuchon en aluminium item.hull_small_steel.name=Petite coque en acier diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index b426cae6d..15b1138a4 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -243,7 +243,7 @@ book.rbmk.title1=Introduzione book.rbmk.page1=§lRBMK§r è un reattore nucleare completamente modulare. A differenza degli altri reattori, non c'è nessun nucleo o limite di costruzione, piuttosto il comportamento e l'efficienza e data da com'è costruito il reattore e come interagiscono le parti tra loro. book.rbmk.title2=Calore book.rbmk.page2=Come il reattore va, tende a generare §lcalore§r. Il calore si diffonderà tra le parti, diminuendo lentamente nel processo di fissione. L'obiettivo è quello di generare più calore possibile senza fondere il reattore, e trasferire esso nelle caldaie per raffreddate il reattore e produrre vapore. -book.rbmk.title3=Barre di combustibile +book.rbmk.title3=Barre di combustibile book.rbmk.page3=Le §lbarre di combustibile§r tendono a catturare il flusso di neutroni, causando al combustibile di reagire, rilasciando neutroni nel processo. I neutroni sono rilasciati in tutte e 4 le principali vie per un massimo di 5 blocchi. Il quantitativo di neutroni rilasciati, dipende dal combustibile usato. book.rbmk.title4=Barre di regolazione book.rbmk.page4=Le §lbarre di regolazione§r tendono a ridurre il numero di neutroni durante il passaggio. Quando sono completamente inserite, bloccano il passaggio di neutroni; Quando sono le barre sono parzialmente inserite, ne bloccano la metà di essi. Le barre di controllo sono un metodo per regolare i neutroni e anche per spengere il reattore. @@ -467,14 +467,14 @@ book_lore.bf_bomb_2.page.1=Eppure non posso nemmeno biasimarli. Swirlmat non ha book_lore.bf_bomb_2.page.2=Ancora peggio, questa cosa è una fonte di energia. L'esistenza del nostro campione è una violazione dell'ALARA: il laboratorio è stato lasciato vuoto al suo arrivo e l'unica persona abbastanza coraggiosa (un certo dottor Melfyn) ha indossato un materiale ignifugo di livello A solo per trasportarlo per 20 metri. book_lore.bf_bomb_2.page.3=I dati empirici non sono migliori, poiché stiamo infrangendo la prima legge della termodinamica con quanta energia irradia. Trovarsi vicino a quella cosa, anche dietro un metro di piombo, era terrificante. Siamo corsi fuori dalla camera al termine della spettroscopia book_lore.bf_bomb_2.page.4=e non ne abbiamo ricavato nulla di nuovo. Quegli idioti del team scientifico, Dio, non hanno vacillato nemmeno dopo tutto quello. Assistere a quelle "discussioni" era orribile; quel ciarlatano del capo ricercatore diceva addirittura che il divieto di test sarebbe stato revocato, che avremmo potuto esserlo -book_lore.bf_bomb_2.page.5=costruire bombe dalla merda nelle prossime settimane, chi sano di mente ci lavorerebbe? Diavolo, l'unico assistente sano di mente (un certo Andrew) l'ha soprannominato "balefire" - perché bruciare a morte su una pira funeraria sarebbe indolore in confronto. +book_lore.bf_bomb_2.page.5=costruire bombe dalla merda nelle prossime settimane, chi sano di mente ci lavorerebbe? Diavolo, l'unico assistente sano di mente (un certo Andrew) l'ha soprannominato "balefire" - perché bruciare a morte su una pira funeraria sarebbe indolore in confronto. book_lore.bf_bomb_3.name=Note private book_lore.bf_bomb_3.author=M. Porter book_lore.bf_bomb_3.page.0=Io e la squadra abbiamo fatto dei passi avanti. L'enfasi sulla separazione: isolarmi dai più devoti ha reso il lavoro lì molto più sopportabile. Anche se non abbiamo ancora idea delle effettive proprietà del balefire (è difficile da analizzare book_lore.bf_bomb_3.page.1=un campione che frigge la tua attrezzatura) le sue interazioni con altra materia si sono rivelate fruttuose. In particolare, hanno sintetizzato una forma "gassosa": Andrew, tra tutti, mi ha informato che si trattava in realtà di un colloide costituito da microscopiche particelle di fuoco funebre, sospese in alcuni book_lore.bf_bomb_3.page.2=gas nobile. Ogni particella è avvolta da una "bolla" di gas ionizzato carica positivamente, che ne impedisce la sedimentazione. Chi avrebbe potuto immaginare che le radiazioni gamma fatali avessero un beneficio? Non me. $ Scelgo di non pensare a come hanno trasformato il campione -book_lore.bf_bomb_3.page.3=particolato, ma non posso sottovalutare l'utilità di questo fuoco gassoso: ha reso molto più sicuro fare esperimenti. $ A proposito di sicurezza, il capo ricercatore (in un atto di insensibile disprezzo) ha fatto una scoperta che gli ha quasi staccato la testa. +book_lore.bf_bomb_3.page.3=particolato, ma non posso sottovalutare l'utilità di questo fuoco gassoso: ha reso molto più sicuro fare esperimenti. $ A proposito di sicurezza, il capo ricercatore (in un atto di insensibile disprezzo) ha fatto una scoperta che gli ha quasi staccato la testa. book_lore.bf_bomb_3.page.4=Decise di "sporcarsi" lasciando che una cellula del nostro nuovo colloide interagisse direttamente con un po' di antimateria molto costosa: l'esplosione risultante trasformò il tavolo su cui si trovava in un pezzo di scorie sbiancate dalle radiazioni, scolpito un emisfero quasi perfetto attraverso book_lore.bf_bomb_3.page.5=la parte superiore e ha dato alla testa una buona dose di ARS. Immagino che ora sappiamo come farlo esplodere, ma Dio, alcune persone... @@ -688,14 +688,14 @@ book_lore.bf_bomb_2.page.1=And yet I can't even blame them. Swirlmat makes no go book_lore.bf_bomb_2.page.2=Even worse, this thing is an energy source. The existence of our sample is a violation of ALARA: the lab was vacated when it arrived, and the only person brave enough (one Dr. Melfyn) donned a level A hazmat just to carry it 20 meters. book_lore.bf_bomb_2.page.3=The empirical data isn't better, as we're breaking the first law of thermodynamics with how much energy it radiates. Being anywhere near that thing - even behind a meter of lead - was terrifying. We sprinted out of the chamber upon conclusion of the spectroscopy book_lore.bf_bomb_2.page.4=and we got nothing new out of it. Those idiots in the science team, god, did not even waver after all that. Sitting through those "discussions" was horrible; that quack of a head researcher even rumored that the test ban would be lifted, that we could be -book_lore.bf_bomb_2.page.5=building bombs out of the shit in the coming weeks, who in their right mind would work on that? Hell, the one sane assistant (an Andrew) nicknamed it "balefire" - because burning to death on a funeral pyre would be painless by comparison. +book_lore.bf_bomb_2.page.5=building bombs out of the shit in the coming weeks, who in their right mind would work on that? Hell, the one sane assistant (an Andrew) nicknamed it "balefire" - because burning to death on a funeral pyre would be painless by comparison. book_lore.bf_bomb_3.name=Private Notes book_lore.bf_bomb_3.author=M. Porter book_lore.bf_bomb_3.page.0=The team and I have made some breakthroughs. Emphasis on the separation - isolating myself from the more devout has made working there so much more bearable. While we still have no idea about the actual properties of balefire (it's difficult to analyze book_lore.bf_bomb_3.page.1=a sample that fries your equipment) its interactions with other matter has proved fruitful. Notably, they synthesized a "gaseous" form: Andrew, of all people, informed me that it was really a colloid consisting of microscopic balefire particles, suspended in some book_lore.bf_bomb_3.page.2=noble gas. Each particle is enveloped by a positively-charged 'bubble' of ionized gas, preventing it from settling. Who could've guessed that fatal gamma radiation had a benefit? Not me. $ I'm choosing not to think about how they transformed the sample into -book_lore.bf_bomb_3.page.3=particulate, but I can't understate the utility of this gaseous balefire - it's made it much safer to experiment on. $ Speaking of safety, the head researcher (in an act of callous disregard) made a discovery that also nearly took his head off. +book_lore.bf_bomb_3.page.3=particulate, but I can't understate the utility of this gaseous balefire - it's made it much safer to experiment on. $ Speaking of safety, the head researcher (in an act of callous disregard) made a discovery that also nearly took his head off. book_lore.bf_bomb_3.page.4=He decided to get "dirty" by letting a cell of our new colloid interact directly with some very expensive antimatter: the resulting explosion turned the table it was on into a piece of radiation-bleached slag, carved a near-perfect hemisphere through book_lore.bf_bomb_3.page.5=the top, and gave the head a healthy dose of ARS. I guess we know how to make it explode now, but god, some people... @@ -1379,34 +1379,34 @@ digamma.playerHealth=Digamma influence: digamma.playerRes=Digamma resistance: digamma.title=DIGAMMA DIAGNOSTIC -entity.entity_cyber_crab.name=Cyber Crab -entity.entity_elder_one.name=Quackos The Elder One -entity.entity_fucc_a_ducc.name=Duck -entity.entity_glyphid.name=Glyphid -entity.entity_glyphid_behemoth.name=Glyphid Behemoth -entity.entity_glyphid_blaster.name=Glyphid Blaster -entity.entity_glyphid_bombardier.name=Glyphid Bombardier -entity.entity_glyphid_brawler.name=Glyphid Brawler -entity.entity_glyphid_brenda.name=Brenda -entity.entity_glyphid_digger.name=Glyphid Digger -entity.entity_glyphid_nuclear.name=Big Man Johnson -entity.entity_glyphid_scout.name=Glyphid Scout -entity.entity_ntm_fbi.name=FBI Agent -entity.entity_ntm_fbi_drone.name=FBI Drone -entity.entity_ntm_radiation_blaze.name=Meltdown Elemental +entity.hbm.entity_cyber_crab.name=Cyber Crab +entity.hbm.entity_elder_one.name=Quackos The Elder One +entity.hbm.entity_fucc_a_ducc.name=Duck +entity.hbm.entity_glyphid.name=Glyphid +entity.hbm.entity_glyphid_behemoth.name=Glyphid Behemoth +entity.hbm.entity_glyphid_blaster.name=Glyphid Blaster +entity.hbm.entity_glyphid_bombardier.name=Glyphid Bombardier +entity.hbm.entity_glyphid_brawler.name=Glyphid Brawler +entity.hbm.entity_glyphid_brenda.name=Brenda +entity.hbm.entity_glyphid_digger.name=Glyphid Digger +entity.hbm.entity_glyphid_nuclear.name=Big Man Johnson +entity.hbm.entity_glyphid_scout.name=Glyphid Scout +entity.hbm.entity_ntm_fbi.name=FBI Agent +entity.hbm.entity_ntm_fbi_drone.name=FBI Drone +entity.hbm.entity_ntm_radiation_blaze.name=Meltdown Elemental entity.hbm.entity_ntm_ufo.name=Martian Invasion Ship -entity.entity_mob_hunter_chopper.name=Hunter Chopper -entity.entity_mob_mask_man.name=Mask Man -entity.entity_mob_gold_creeper.name=Golden Creeper -entity.entity_mob_nuclear_creeper.name=Nuclear Creeper -entity.entity_mob_phosgene_creeper.name=Phosgene Creeper -entity.entity_mob_tainted_creeper.name=Tainted Creeper -entity.entity_mob_volatile_creeper.name=Volatile Creeper -entity.entity_parasite_maggot.name=Parasitic Maggot -entity.entity_pigeon.name=Pigeon -entity.entity_plastic_bag.name=Plastic Bag -entity.entity_taint_crab.name=Taint Crab -entity.entity_tesla_crab.name=Tesla Crab +entity.hbm.entity_mob_hunter_chopper.name=Hunter Chopper +entity.hbm.entity_mob_mask_man.name=Mask Man +entity.hbm.entity_mob_gold_creeper.name=Golden Creeper +entity.hbm.entity_mob_nuclear_creeper.name=Nuclear Creeper +entity.hbm.entity_mob_phosgene_creeper.name=Phosgene Creeper +entity.hbm.entity_mob_tainted_creeper.name=Tainted Creeper +entity.hbm.entity_mob_volatile_creeper.name=Volatile Creeper +entity.hbm.entity_parasite_maggot.name=Parasitic Maggot +entity.hbm.entity_pigeon.name=Pigeon +entity.hbm.entity_plastic_bag.name=Plastic Bag +entity.hbm.entity_taint_crab.name=Taint Crab +entity.hbm.entity_tesla_crab.name=Tesla Crab entity.hbm.entity_balls_o_tron.name=Balls-O-Tron Prime entity.hbm.entity_balls_o_tron_seg.name=Balls-O-Tron Segment entity.hbm.entity_bullet.name=Bullet diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 9ff1a89d8..742614376 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -352,7 +352,7 @@ book_lore.book_mercury.page.2=wszystkie rzeczy, kiedy są replikowane przez cia book_lore.book_flower.name=Notatka book_lore.book_flower.author=Dave -book_lore.book_flower.page.1=pamiętasz, jak wspomniałem w mojej pierwszej notatce, że związek jest w większości nieorganiczny? zgadnij co, starzec podzielił się czwartym składnikiem: ipomoea nil, rodzaj kwiatu. powój! może to być spowodowane niską zawartością +book_lore.book_flower.page.1=pamiętasz, jak wspomniałem w mojej pierwszej notatce, że związek jest w większości nieorganiczny? zgadnij co, starzec podzielił się czwartym składnikiem: ipomoea nil, rodzaj kwiatu. powój! może to być spowodowane niską zawartością book_lore.book_flower.page.2=siarki, cokolwiek by nie było, nie działa z innymi kwiatami. Powój trafia do slotu %d book_lore.book_syringe.name=Notatka @@ -523,7 +523,7 @@ chem.BP_BIOFUEL=Transestryfikacja biopaliw chem.BP_BIOGAS=Produkcja biogazu chem.C4=Synteza C-4 chem.CC_CENTRIFUGE=Separacja chlorokalcytu -chem.CC_ELECTROLYSIS=Elektroliza chlorku wapnia +chem.CC_ELECTROLYSIS=Elektroliza chlorku wapnia chem.CC_HEATING=Zaawansowane upłynnianie węgla chem.CC_HEAVY=Podstawowe upłynnianie węgla chem.CC_I=Ulepszone upłynnianie węgla @@ -575,7 +575,7 @@ chem.NITAN=Mieszanie superpaliwa NITAN chem.NITRIC_ACID=Produkcja kwasu azotowego chem.OIL_SAND=Ekstrakcja piasku smołowego chem.OSMIRIDIUM_DEATH=Produkcja roztworu osmirydowego -chem.PC_ELECTROLYSIS=Elektroliza chlorku potasu +chem.PC_ELECTROLYSIS=Elektroliza chlorku potasu chem.PEROXIDE=Produkcja nadtlenku wodoru chem.PET=Synteza PET chem.PETROIL_LEADED=Mieszanie benzyny ołowiowej @@ -620,7 +620,7 @@ commands.satellite.no_satellite=Nie znaleziono satelity o tej częstotliwości! commands.satellite.not_a_satellite=Trzymany przedmiot nie jest satelitą! commands.satellite.satellite_descended=Satelita zszedł pomyślnie. commands.satellite.satellite_orbited=Satelita wystrzelony. -commands.satellite.should_be_run_as_player=Ta komenda powinna być uruchomiona przez gracza! +commands.satellite.should_be_run_as_player=Ta komenda powinna być uruchomiona przez gracza! container.amsBase=Podstawa AMS (Dekoracja) container.amsEmitter=AMS Emitter (Dekoracja) container.amsLimiter=AMS Stabilizer (Dekoracja) @@ -646,7 +646,7 @@ container.craneUnboxer=Rozpakowywacz konwejerowy container.crateDesh=Deshowa skrzynia container.crateIron=Żelazna skrzynia container.crateSteel=Stalowa skrzynia -container.crateTemplate=Skrzynia szablonowa +container.crateTemplate=Skrzynia szablonowa container.crateTungsten=Tungstenowa skrzynia container.crystallizer=Zakwaszacz rud container.cyclotron=Cyklotron @@ -783,7 +783,7 @@ container.zirnox=Reaktor jądrowy ZIRNOX crucible.aa=Produkcja zaawansowanych stopów crucible.cdalloy=Produkcja stali kadmowej crucible.cmb=Produkcja stali CMB -crucible.ferro=Produkcja ferrouranu +crucible.ferro=Produkcja ferrouranu crucible.hematite=Produkcja żelaza z hematytu crucible.hss=Produkcja stali szybkotnącej crucible.malachite=Produkcja miedzi z malachitu @@ -1013,29 +1013,29 @@ digamma.playerHealth=Wpływ Digammy: digamma.playerRes=Odporność na digamę: digamma.title=DIAGNOSTYKA DIGAMMY -entity.entity_cyber_crab.name=Cyberkrab -entity.entity_elder_one.name=Quackos Starszy -entity.entity_fucc_a_ducc.name=Kaczka -entity.entity_glyphid.name=Glyfid -entity.entity_glyphid_behemoth.name=Glyfid Behemot -entity.entity_glyphid_blaster.name=Glyfid Blaster -entity.entity_glyphid_bombardier.name=Glyfid Bombardier -entity.entity_glyphid_brawler.name=Glyfid Awanturnik -entity.entity_glyphid_brenda.name=Brenda -entity.entity_glyphid_nuclear.name=Big Men Dżonson -entity.entity_glyphid_scout.name=Glyfid Skaut -entity.entity_ntm_fbi.name=Agent FBI -entity.entity_ntm_radiation_blaze.name=Żywiołak stopienia +entity.hbm.entity_cyber_crab.name=Cyberkrab +entity.hbm.entity_elder_one.name=Quackos Starszy +entity.hbm.entity_fucc_a_ducc.name=Kaczka +entity.hbm.entity_glyphid.name=Glyfid +entity.hbm.entity_glyphid_behemoth.name=Glyfid Behemot +entity.hbm.entity_glyphid_blaster.name=Glyfid Blaster +entity.hbm.entity_glyphid_bombardier.name=Glyfid Bombardier +entity.hbm.entity_glyphid_brawler.name=Glyfid Awanturnik +entity.hbm.entity_glyphid_brenda.name=Brenda +entity.hbm.entity_glyphid_nuclear.name=Big Men Dżonson +entity.hbm.entity_glyphid_scout.name=Glyfid Skaut +entity.hbm.entity_ntm_fbi.name=Agent FBI +entity.hbm.entity_ntm_radiation_blaze.name=Żywiołak stopienia entity.hbm.entity_ntm_ufo.name=Statek Inwazji Marsjan -entity.entity_mob_hunter_chopper.name=Chopper Myśliwy -entity.entity_mob_mask_man.name=Pan w Masce -entity.entity_mob_gold_creeper.name=Złoty Creeper -entity.entity_mob_nuclear_creeper.name=Jądrowy creeper -entity.entity_mob_phosgene_creeper.name=Fosgenowy Creeper -entity.entity_mob_tainted_creeper.name=Skażony creeper -entity.entity_mob_volatile_creeper.name=Lotny Creeper -entity.entity_taint_crab.name=Skażony krab -entity.entity_tesla_crab.name=Krab Tesli +entity.hbm.entity_mob_hunter_chopper.name=Chopper Myśliwy +entity.hbm.entity_mob_mask_man.name=Pan w Masce +entity.hbm.entity_mob_gold_creeper.name=Złoty Creeper +entity.hbm.entity_mob_nuclear_creeper.name=Jądrowy creeper +entity.hbm.entity_mob_phosgene_creeper.name=Fosgenowy Creeper +entity.hbm.entity_mob_tainted_creeper.name=Skażony creeper +entity.hbm.entity_mob_volatile_creeper.name=Lotny Creeper +entity.hbm.entity_taint_crab.name=Skażony krab +entity.hbm.entity_tesla_crab.name=Krab Tesli entity.hbm.entity_balls_o_tron.name=Jądro-Tron entity.hbm.entity_balls_o_tron_seg.name=Segment Jądro-Trona entity.hbm.entity_bullet.name=Pocisk @@ -1050,7 +1050,7 @@ excavator.walling=Przełącz murowanie flare.ignition=Zapłon flare.valve=Zawór przepływowy - + fluid.acid_fluid=Kwas fluid.corium_fluid=Korium @@ -1265,7 +1265,7 @@ hbmfluid.chlorocalcite_mix=Mieszany roztwór chlorokalcytu hbmfluid.chlorocalcite_solution=Roztwór chlorokalcytu hbmfluid.cholesterol=Roztwór cholesterolu hbmfluid.coalcreosote=Kreozot ze smoły węglowej -hbmfluid.coalgas=Gazolina węglowa +hbmfluid.coalgas=Gazolina węglowa hbmfluid.coalgas_leaded=Gazolina węglowa z ołowiem hbmfluid.coaloil=Olej węglowy hbmfluid.colloid=Koloid @@ -1336,7 +1336,7 @@ hbmfluid.plasma_dt=Plazma deuterowo-trytowa hbmfluid.plasma_hd=Plazma wodorowo-deuterowa hbmfluid.plasma_ht=Plazma wodorowo-trytowa hbmfluid.plasma_xm=Plazma ksenonowo-rtęciowa -hbmfluid.potassium_chloride=Roztwór chlorku potasu +hbmfluid.potassium_chloride=Roztwór chlorku potasu hbmfluid.puf6=Heksafluorek plutonu hbmfluid.radiosolvent=Rozpuszczalnik o wysokiej wydajności hbmfluid.reclaimed=Olej przemysłowy z odzysku @@ -1351,7 +1351,7 @@ hbmfluid.smear=Olej przemysłowy hbmfluid.smoke=Dym hbmfluid.smoke_leaded=Ołowiany dym hbmfluid.smoke_poison=Trujący dym -hbmfluid.solvent=Rozpuszczalnik +hbmfluid.solvent=Rozpuszczalnik hbmfluid.sourgas=Kwaśny gaz hbmfluid.spentsteam=Para niskociśnieniowa hbmfluid.steam=Para @@ -1613,7 +1613,7 @@ item.ammo_9mm_du.name=9mm Round (DU) item.ammo_9mm_rocket.name=9mm Rocket item.ammo_arty.name=16" Artillery Shell item.ammo_arty_cargo.name=16" Express Delivery Artillery Shell -item.ammo_arty_chlorine.name=16" Chlorine Gas Artil +item.ammo_arty_chlorine.name=16" Chlorine Gas Artil item.ammo_arty_classic.name=16" Artillery Shell (The Factorio Special) item.ammo_arty_he.name=16" High Explosive Artillery Shell item.ammo_arty_mini_nuke.name=16" Micro Nuclear Artillery Shell diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 68cd5e606..37432e33d 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1193,34 +1193,34 @@ digamma.playerHealth=Влияние дигаммы: digamma.playerRes=Сопротивление к дигамме: digamma.title=ДИАГНОСТИКА ДИГАММЫ -entity.entity_cyber_crab.name=Киберкраб -entity.entity_elder_one.name=Крякос Старший -entity.entity_fucc_a_ducc.name=Утка -entity.entity_glyphid.name=Глифид -entity.entity_glyphid_behemoth.name=Глифид-страж -entity.entity_glyphid_blaster.name=Глифид-стрелок -entity.entity_glyphid_bombardier.name=Глифид-бомбардир -entity.entity_glyphid_brawler.name=Глифид-солдат -entity.entity_glyphid_brenda.name=Бренда -entity.entity_glyphid_digger.name=Глифид-копатель -entity.entity_glyphid_nuclear.name=Чмяк -entity.entity_glyphid_scout.name=Глифид-скаут -entity.entity_ntm_fbi.name=Агент ФБР -entity.entity_ntm_fbi_drone.name=Дрон ФБР -entity.entity_ntm_radiation_blaze.name=Элементаль Расплавления +entity.hbm.entity_cyber_crab.name=Киберкраб +entity.hbm.entity_elder_one.name=Крякос Старший +entity.hbm.entity_fucc_a_ducc.name=Утка +entity.hbm.entity_glyphid.name=Глифид +entity.hbm.entity_glyphid_behemoth.name=Глифид-страж +entity.hbm.entity_glyphid_blaster.name=Глифид-стрелок +entity.hbm.entity_glyphid_bombardier.name=Глифид-бомбардир +entity.hbm.entity_glyphid_brawler.name=Глифид-солдат +entity.hbm.entity_glyphid_brenda.name=Бренда +entity.hbm.entity_glyphid_digger.name=Глифид-копатель +entity.hbm.entity_glyphid_nuclear.name=Чмяк +entity.hbm.entity_glyphid_scout.name=Глифид-скаут +entity.hbm.entity_ntm_fbi.name=Агент ФБР +entity.hbm.entity_ntm_fbi_drone.name=Дрон ФБР +entity.hbm.entity_ntm_radiation_blaze.name=Элементаль Расплавления entity.hbm.entity_ntm_ufo.name=Марсианский корабль вторжения -entity.entity_mob_hunter_chopper.name=Вертолёт-охотник -entity.entity_mob_mask_man.name=Маскмен -entity.entity_mob_gold_creeper.name=Золотой крипер -entity.entity_mob_nuclear_creeper.name=Ядерный крипер -entity.entity_mob_phosgene_creeper.name=Фосгеновый крипер -entity.entity_mob_tainted_creeper.name=Заражённый порчей крипер -entity.entity_mob_volatile_creeper.name=Возгораемый крипер -entity.entity_parasite_maggot.name=Паразитическая личинка -entity.entity_pigeon.name=Голубь -entity.entity_plastic_bag.name=Пластиковый пакетик -entity.entity_taint_crab.name=Заражённый порчей теслакраб -entity.entity_tesla_crab.name=Теслакраб +entity.hbm.entity_mob_hunter_chopper.name=Вертолёт-охотник +entity.hbm.entity_mob_mask_man.name=Маскмен +entity.hbm.entity_mob_gold_creeper.name=Золотой крипер +entity.hbm.entity_mob_nuclear_creeper.name=Ядерный крипер +entity.hbm.entity_mob_phosgene_creeper.name=Фосгеновый крипер +entity.hbm.entity_mob_tainted_creeper.name=Заражённый порчей крипер +entity.hbm.entity_mob_volatile_creeper.name=Возгораемый крипер +entity.hbm.entity_parasite_maggot.name=Паразитическая личинка +entity.hbm.entity_pigeon.name=Голубь +entity.hbm.entity_plastic_bag.name=Пластиковый пакетик +entity.hbm.entity_taint_crab.name=Заражённый порчей теслакраб +entity.hbm.entity_tesla_crab.name=Теслакраб entity.hbm.entity_balls_o_tron.name=Баллс-О-Трон Прайм entity.hbm.entity_balls_o_tron_seg.name=Баллс-О-Трон Сегмент entity.hbm.entity_bullet.name=Пуля diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 0c9a59171..71239aef1 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -282,7 +282,7 @@ book.starter.page4=Щоб штампувати метал у корисні фо book.starter.title5=Збирання сміття book.starter.page5=Залежно від того, наскільки поганою була початкова апокаліптична подія для існуючих структур світу, існує вірогідність того, що багато корисних матеріалів і машин можна врятувати безпосередньо серед них. На вас можуть чекати: металеві сплави, такі як сталь, деталі, такі як схеми і навіть ізотопи матеріалів з атомної електростанції. Однак остерігайтеся певних руїн, оскільки там може ховатися надмірна небезпека, як змія в траві; вона чекає, щоб вразити вас радіацією, пастками чи невимовними жахами... book.starter.title6=Ранні машини -book.starter.page6a=Дві перші машини, які вам слід зібрати, це §lДоменна піч§r та §lЗбиральна машина§r.Перша дозволить вам створювати такі сплави, як §lсталь§r, §lчервона мідь§r та §удосконалений сплав§r; вам знадобляться ці метали для корпусів машин, з'єднання схем, вдосконалених електромагнітів тощо. +book.starter.page6a=Дві перші машини, які вам слід зібрати, це §lДоменна піч§r та §lЗбиральна машина§r.Перша дозволить вам створювати такі сплави, як §lсталь§r, §lчервона мідь§r та §удосконалений сплав§r; вам знадобляться ці метали для корпусів машин, з'єднання схем, вдосконалених електромагнітів тощо. book.starter.page6b=Збиральна машина використовуватиметься для створення практично будь-якої іншої машини, описаної в цьому посібнику. Вам знадобиться джерело живлення, наприклад §lДров'яна піч§r або §lБойлер сонячної вежі§r. book.starter.page7a=§lПодрібнювач§r разом із парою лез подрібнювача буде дуже корисним для подвоєння виходу більшості руд шляхом подрібнення їх на плавильні порошки. Ці порошки також є важливими для початку створення схем для різних машин, таких як §lПокращена§r та §lРозігнана§r мікросхеми. book.starter.page7b=Використовуючи своє нове обладнання, ви можете створити §lХімічний завод§r, який використовується для синтезу кращих схем, бетону, переробки нафтохімічних продуктів тощо. @@ -470,11 +470,11 @@ book_lore.beacon.page.11=Chapter 5: Warranty $ [ page intentionally left blank ] cannery.f1=[ Натисніть F1 для довідки ] -cannery.centrifuge=Газова центрифуга +cannery.centrifuge=Газова центрифуга cannery.centrifuge.0=Газові центрифуги можуть постачатися рідиною за допомогою звичайних трубопроводів для рідини. cannery.centrifuge.1=Для більшості рецептів потрібно кілька центрифуг. Проміжні продукти не можуть транспортуватися трубопроводами. cannery.centrifuge.2=Ця сторона передає проміжний продукт в наступну центрифугу. -cannery.centrifuge.3=Гексафторид урану можна переробляти за допомогою двох центрифуг, але ви отримаєте лише Уранове паливо та Уран-238. +cannery.centrifuge.3=Гексафторид урану можна переробляти за допомогою двох центрифуг, але ви отримаєте лише Уранове паливо та Уран-238. cannery.centrifuge.4=Для повного відділення Урану-235 від Урану-238 потрібно чотири центрифуги. cannery.centrifuge.5=Деякі рецепти також вимагають покращення "Розгін газової центрифуги". @@ -790,7 +790,7 @@ container.machineBoiler=Нагрівач нафти container.machineChemicalFactory=Хімічна фабрика container.machineChemicalPlant=Хімічний завод container.machineCMB=CMB Steel Furnace -container.machineCoal=Твердопаливний генератор +container.machineCoal=Твердопаливний генератор container.machineCoker=Коксова установка container.machineCompressor=Компресор container.machineCrucible=Ливарня @@ -851,7 +851,7 @@ container.puf6_tank=Цистерна гексафториду плутонію container.pumpjack=Верстат-гойдалка container.radGen=Радіаційний двигун container.radar=Радар -container.radiobox=FM-передавач +container.radiobox=FM-передавач container.radiolysis=РІТЕГ та радіолізна камера container.radiorec=FM радіо container.rbmkAutoloader=Автозавантажувач РБМК @@ -985,7 +985,7 @@ death.attack.microwave=%1$s вибухнув під дією мікрохвил death.attack.mku=%1$s помер з невідомих причин. death.attack.monoxide=%1$s забув замінити батарейки у своєму детекторі чадного газу. death.attack.mudPoisoning=%1$s помер в токсичних відходах -death.attack.nuclearBlast=%1$s був стертий ядерним вибухом +death.attack.nuclearBlast=%1$s був стертий ядерним вибухом death.attack.overdose=%1$s отримав передозування та задухнувся. death.attack.pc=%1$s перетворився на калюжу в рожевій хмарі. death.attack.plasma=%1$s був спалений %2$s. @@ -1196,34 +1196,34 @@ digamma.playerHealth=Digamma influence: digamma.playerRes=Digamma resistance: digamma.title=DIGAMMA DIAGNOSTIC -entity.entity_cyber_crab.name=Кіберкраб -entity.entity_elder_one.name=Крякос Старший -entity.entity_fucc_a_ducc.name=Качка -entity.entity_glyphid.name=Гліфід -entity.entity_glyphid_behemoth.name=Гліфід Бегемот -entity.entity_glyphid_blaster.name=Гліфід Бластер -entity.entity_glyphid_bombardier.name=Гліфід Бомбардир -entity.entity_glyphid_brawler.name=Гліфід Боєць -entity.entity_glyphid_brenda.name=Бренда -entity.entity_glyphid_digger.name=Гліфід Копач -entity.entity_glyphid_nuclear.name=Великий Джонсон -entity.entity_glyphid_scout.name=Гліфід Розвідник -entity.entity_ntm_fbi.name=Агент ФБР -entity.entity_ntm_fbi_drone.name=Дрон ФБР -entity.entity_ntm_radiation_blaze.name=Елементаль Розплавлення +entity.hbm.entity_cyber_crab.name=Кіберкраб +entity.hbm.entity_elder_one.name=Крякос Старший +entity.hbm.entity_fucc_a_ducc.name=Качка +entity.hbm.entity_glyphid.name=Гліфід +entity.hbm.entity_glyphid_behemoth.name=Гліфід Бегемот +entity.hbm.entity_glyphid_blaster.name=Гліфід Бластер +entity.hbm.entity_glyphid_bombardier.name=Гліфід Бомбардир +entity.hbm.entity_glyphid_brawler.name=Гліфід Боєць +entity.hbm.entity_glyphid_brenda.name=Бренда +entity.hbm.entity_glyphid_digger.name=Гліфід Копач +entity.hbm.entity_glyphid_nuclear.name=Великий Джонсон +entity.hbm.entity_glyphid_scout.name=Гліфід Розвідник +entity.hbm.entity_ntm_fbi.name=Агент ФБР +entity.hbm.entity_ntm_fbi_drone.name=Дрон ФБР +entity.hbm.entity_ntm_radiation_blaze.name=Елементаль Розплавлення entity.hbm.entity_ntm_ufo.name=Марсіанький корабель НЛО -entity.entity_mob_hunter_chopper.name=Гвинтокрил Мислиивець -entity.entity_mob_mask_man.name=Маскмен -entity.entity_mob_gold_creeper.name=Золотий Кріпер -entity.entity_mob_nuclear_creeper.name=Ядерний Кріпер -entity.entity_mob_phosgene_creeper.name=Фосгений Кріпер -entity.entity_mob_tainted_creeper.name=Інфікований Кріпер -entity.entity_mob_volatile_creeper.name=Шлаковий Кріпер -entity.entity_parasite_maggot.name=Паразитична личинка -entity.entity_pigeon.name=Голуб -entity.entity_plastic_bag.name=Пластиковий пакет -entity.entity_taint_crab.name=Інфікований Краб -entity.entity_tesla_crab.name=Тесла Краб +entity.hbm.entity_mob_hunter_chopper.name=Гвинтокрил Мислиивець +entity.hbm.entity_mob_mask_man.name=Маскмен +entity.hbm.entity_mob_gold_creeper.name=Золотий Кріпер +entity.hbm.entity_mob_nuclear_creeper.name=Ядерний Кріпер +entity.hbm.entity_mob_phosgene_creeper.name=Фосгений Кріпер +entity.hbm.entity_mob_tainted_creeper.name=Інфікований Кріпер +entity.hbm.entity_mob_volatile_creeper.name=Шлаковий Кріпер +entity.hbm.entity_parasite_maggot.name=Паразитична личинка +entity.hbm.entity_pigeon.name=Голуб +entity.hbm.entity_plastic_bag.name=Пластиковий пакет +entity.hbm.entity_taint_crab.name=Інфікований Краб +entity.hbm.entity_tesla_crab.name=Тесла Краб entity.hbm.entity_balls_o_tron.name=Баллс-О-Трон Прайм entity.hbm.entity_balls_o_tron_seg.name=Баллс-О-Трон Сегмент entity.hbm.entity_bullet.name=Куля @@ -1814,7 +1814,7 @@ item.ammo_shell.name=240-мм снаряд item.ammo_shell_apfsds_du.name=240-мм БОПС-ЗУ item.ammo_shell_apfsds_t.name=240-мм БОПС-В item.ammo_shell_explosive.name=240-мм фугасний снаряд -item.ammo_shell_w9.name=240-мм ядерний снаряд W9 +item.ammo_shell_w9.name=240-мм ядерний снаряд W9 item.ammo_secret.bmg50_equestrian.name=.50 BMG Винищувач item.ammo_secret.bmg50_black.name=.50 BMG обхідний набій item.ammo_secret.folly_nuke.name=Срібна куля, ядерна @@ -2108,7 +2108,7 @@ item.billet_australium_lesser.name=Заготовка низькозбагаче item.billet_balefire_gold.name=Заготовка флешголду item.billet_beryllium.name=Заготовка берилію item.billet_bismuth.name=Заготовка вісмуту -item.billet_co60.name=Заготовка кобальту-60 +item.billet_co60.name=Заготовка кобальту-60 item.billet_cobalt.name=Заготовка кобальту item.billet_flashlead.name=Заготовка флешліду item.billet_flashlead.desc=Розпад ґратки викликає реакцію анігіляції$антиматерії та матерії, що призводить до$вивільнення піонів, що розпадаються на мюони, $що каталізують синтез ядер створюючи новий елемент.$Будь ласка, намагайтеся не відставати. @@ -2162,7 +2162,7 @@ item.bismuth_axe.name=Вісмутова сокира item.bismuth_pickaxe.name=Вісмутове кайло item.bismuth_plate.name=Вісмутові наплічники, намисто та пов'язка на стегнах item.bismuth_tool.name=Магнітний екстрактор -item.bj_boots.name=Місячні шиповані чоботи +item.bj_boots.name=Місячні шиповані чоботи item.bj_helmet.name=Пов'язка на око з термодатчиком item.bj_legs.name=Місячні кібернетичні протези ніг item.bj_plate.name=Місячна кібернетична обшивка @@ -2354,7 +2354,7 @@ item.casing.small_steel.name=Мала сталева гільза item.casing.large.name=Велика бронзова гільза item.casing.large_steel.name=Велика сталева гільза item.casing.shotshell.name=Гільза для набоїв з чорним порохом -item.casing.buckshot.name=Пластикова дробова гільза +item.casing.buckshot.name=Пластикова дробова гільза item.casing.buckshot_advanced.name=Удосконалена дробова гільза item.catalyst_clay.name=Глиняний каталізатор item.catalytic_converter.name=Каталітичний нейтралізатор @@ -2473,7 +2473,7 @@ item.circuit_star_piece.mem_16k_c.name=SC - 16k Memory Stick Slot C item.circuit_star_piece.mem_16k_d.name=SC - 16k Memory Stick Slot D item.circuit_tantalium.name=Конденсаторна плата item.circuit_tantalium_raw.name=Capacitor Board Assembly -item.circuit_targeting_tier1.name=Військова друкована плата (Tier 1) +item.circuit_targeting_tier1.name=Військова друкована плата (Tier 1) item.circuit_targeting_tier2.name=Військова друкована плата (Tier 2) item.circuit_targeting_tier3.name=Військова друкована плата (Tier 3) item.circuit_targeting_tier4.name=Військова друкована плата (Tier 4) @@ -2699,7 +2699,7 @@ item.drillbit_desh.name=Деш бурильна головка item.drillbit_desh_diamond.name=Деш бурильна головка (з алмазним покриттям) item.drillbit_ferro.name=Фероуранова бурильна головка item.drillbit_ferro_diamond.name=Фероуранова бурильна головка (з алмазним покриттям) -item.drillbit_hss.name=Бурильна головка зі швидкорізальної сталі +item.drillbit_hss.name=Бурильна головка зі швидкорізальної сталі item.drillbit_hss_diamond.name=Бурильна головка зі швидкорізальної сталі (з алмазним покриттям) item.drillbit_steel.name=Сталева бурильна головка item.drillbit_steel_diamond.name=Сталева бурильна головка (з алмазним покриттям) @@ -3099,7 +3099,7 @@ item.ingot_gh336.desc=Колега Сіборгіума. item.ingot_graphite.name=Графітовий зливок item.ingot_gunmetal.name=Зливок гарматної бронзи item.ingot_hes.name=Зливок високозбагаченого шрабідієвого палива -item.ingot_lanthanium.name=Напівстабільний лантановий зливок +item.ingot_lanthanium.name=Напівстабільний лантановий зливок item.ingot_lanthanium.desc='Лантаній' item.ingot_lanthanium.desc.P11=Насправді лантаній, але як би там не було. item.ingot_lead.name=Свинцевий зливок @@ -3162,7 +3162,7 @@ item.ingot_tantalium.desc='Танталій' item.ingot_tantalium.desc.P11=AKA Танталій. item.ingot_tcalloy.name=Зливок технецієвої сталі item.ingot_technetium.name=Зливок технецію-99 -item.ingot_th232.name=Зливок торію-232 +item.ingot_th232.name=Зливок торію-232 item.ingot_thorium_fuel.name=Зливок торієвого палива item.ingot_titanium.name=Титановий зливок item.ingot_tungsten.name=Вольфрамовий зливок @@ -3235,9 +3235,9 @@ item.laser_crystal_co2.name=CO2-деш лазерний кристал item.laser_crystal_digamma.name=Дігамма лазерний кристал item.laser_crystal_dnt.desc=Суперкристал динейтронієвого спарк ферміону item.laser_crystal_dnt.name=Спарк лазерний кристал -item.launch_code.name=Код запуску судного дня -item.launch_code_piece.name=Частина коду запуску судного дня -item.launch_key.name=Ключ запуску судного дня +item.launch_code.name=Код запуску судного дня +item.launch_code_piece.name=Частина коду запуску судного дня +item.launch_key.name=Ключ запуску судного дня item.lead_gavel.name=Свинцевий молот item.lemon.name="Лимон" item.letter.name=Швидкісна пошта @@ -3405,21 +3405,21 @@ item.mp_fuselage_15_20_solid.name=Твердопаливний фюзеляж 15 item.mp_fuselage_15_balefire.name=BF фюзеляж 15 розміру item.mp_fuselage_15_hydrogen.name=Водневий фюзеляж 15 розміру item.mp_fuselage_15_hydrogen_cathedral.name=Водневий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_blackjack.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_camo.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_decorated.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_desert.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_insulation.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_lambda.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_metal.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_minuteman.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_pip.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_polite.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_sky.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_steampunk.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_taint.name=Гасовий фюзеляж 15 розміру -item.mp_fuselage_15_kerosene_yuck.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_blackjack.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_camo.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_decorated.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_desert.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_insulation.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_lambda.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_metal.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_minuteman.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_pip.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_polite.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_sky.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_steampunk.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_taint.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_yuck.name=Гасовий фюзеляж 15 розміру item.mp_fuselage_15_solid.name=Твердопаливний фюзеляж 15 розміру item.mp_fuselage_15_solid_desh.name=Твердопаливний фюзеляж 15 розміру item.mp_fuselage_15_solid_faust.name=Твердопаливний фюзеляж 15 розміру @@ -3513,7 +3513,7 @@ item.nuclear_waste_vitrified.name=Заскловані ядерні відход item.nuclear_waste_vitrified_tiny.name=Крихітна купа засклованих ядерних відходів item.nugget.name=Курячий Нагетс item.nugget_actinium.name=Самородок актинію-227 -item.nugget_am_mix.name=Самородок реакторного америцію +item.nugget_am_mix.name=Самородок реакторного америцію item.nugget_am241.name=Самородок америцію-241 item.nugget_am242.name=Самородок америцію-242 item.nugget_americium_fuel.name=Самородок америцієвого палива @@ -3647,7 +3647,7 @@ item.pa_coil.bscco.name=Велика вісмут стронцій кальці item.pa_coil.chlorophyte.name=Велика хлорофітова котушка item.pa_coil.gold.name=Велика золота котушка item.pa_coil.niobium.name=Велика ніобієво-титанова котушка -item.paa_boots.name="старі добрі черевики" PaA +item.paa_boots.name="старі добрі черевики" PaA item.paa_legs.name=Посилення ніг PaA item.paa_plate.name=Захисна пластина для грудей PaA item.padlock.name=Замок @@ -3681,7 +3681,7 @@ item.part_grip.name=Рукоятка %s item.part_lithium.name=Коробка з літієвим пилом item.part_mechanism.name=Механізм %s item.part_plutonium.name=Коробка з плутонієвим пилом -item.part_receiver_heavy.name=Важкий ресивер %s +item.part_receiver_heavy.name=Важкий ресивер %s item.part_receiver_light.name=Легкий ресивер %s item.part_stock.name=Приклад %s item.particle_aelectron.name=Капсула з позитронами @@ -3690,7 +3690,7 @@ item.particle_aproton.name=Капсула з антипротонами item.particle_aschrab.name=Капсула з антишрабідієм item.particle_copper.name=Капсула з іонами міді item.particle_dark.name=Капсула з темною матерією -item.particle_digamma.name=§cЧастинка Дігамма§r +item.particle_digamma.name=§cЧастинка Дігамма§r item.particle_empty.name=Порожня капсула для частинок item.particle_higgs.name=Капсула з бозоном Хіггса item.particle_hydrogen.name=Капсула з іонами водню @@ -4024,7 +4024,7 @@ item.rag.name=Тканина item.rag_damp.name=Волога тканина item.rag_piss.name=Просочена сечею ганчірка item.rangefinder.name=Прилад для вимірювання відстані -item.rbmk_fuel_balefire.name=Паливний стрижень РБМК BF +item.rbmk_fuel_balefire.name=Паливний стрижень РБМК BF item.rbmk_fuel_balefire_gold.name=Паливний стрижень РБМК флешголду item.rbmk_fuel_drx.name=§cПаливний стрижень РБМК Дігамма§r item.rbmk_fuel_empty.name=Порожній паливний стрижень РБМК @@ -4309,7 +4309,7 @@ item.sat_base.name=Супутникова основа item.sat_chip.name=Супутниковий ID-чіп item.sat_coord.name=Цілевказівник супутника item.sat_designator.name=Лазерний цілевказівник супутника -item.sat_relay.name=Супутниковий радарний передачик +item.sat_relay.name=Супутниковий радарний передачик item.sat_foeq.name=PEAF - Mk.I FOEQ Duna з експериментальним ядерним двигуном item.sat_gerald.name=Геральд, Будівельний Андроїд item.sat_head_laser.name=Промінь смерті @@ -6132,7 +6132,7 @@ tile.zirnox_destroyed.name=Знищений ЦИРНОКС tile.large_vehicle_door.name=Великі двері для транспортного засобу tile.water_door.name=Герметичні двері tile.qe_containment.name=QE Стримуючі двері -tile.qe_sliding_door.name=QE Розсувні двері +tile.qe_sliding_door.name=QE Розсувні двері tile.round_airlock_door.name=Круглі двері гідрошлюзу tile.secure_access_door.name=Двері доступу персоналу tile.sliding_seal_door.name=Розсувні герметичні двері @@ -6188,7 +6188,7 @@ trait.rbmx.xenon=Свинцеве отруєння: %s trait.rbmx.xenonBurn=Функція руйнування свинцю: %s trait.rbmx.xenonGen=Функція створення свинцю: %s -trait.tile.cluster=Випадає лише тоді, коли зламав гравець +trait.tile.cluster=Випадає лише тоді, коли зламав гравець trait.tile.depth=Можна зламати тільки вибухом tool.ability.centrifuge=Автоцентрифуга diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 63dffc38b..d70848af2 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -1067,34 +1067,34 @@ digamma.playerDigamma=玩家F-迪伽马辐照水平: digamma.playerHealth=玩家所受F-迪伽马辐照影响: digamma.playerRes=玩家F-迪伽马防护水平: digamma.title=玩家F-迪伽马辐射自检器 -entity.entity_cyber_crab.name=赛博螃蟹 -entity.entity_elder_one.name=上古鸭神 -entity.entity_fucc_a_ducc.name=鸭子 -entity.entity_glyphid.name=异虫 -entity.entity_glyphid_behemoth.name=巨兽异虫 -entity.entity_glyphid_blaster.name=爆破异虫 -entity.entity_glyphid_bombardier.name=投弹手异虫 -entity.entity_glyphid_brawler.name=狂战士异虫 -entity.entity_glyphid_brenda.name=布伦达 -entity.entity_glyphid_digger.name=掘地异虫 -entity.entity_glyphid_nuclear.name=大个子强森 -entity.entity_glyphid_scout.name=侦察异虫 -entity.entity_ntm_fbi.name=FBI探员 -entity.entity_ntm_fbi_drone.name=FBI无人机 -entity.entity_ntm_radiation_blaze.name=核融元素 +entity.hbm.entity_cyber_crab.name=赛博螃蟹 +entity.hbm.entity_elder_one.name=上古鸭神 +entity.hbm.entity_fucc_a_ducc.name=鸭子 +entity.hbm.entity_glyphid.name=异虫 +entity.hbm.entity_glyphid_behemoth.name=巨兽异虫 +entity.hbm.entity_glyphid_blaster.name=爆破异虫 +entity.hbm.entity_glyphid_bombardier.name=投弹手异虫 +entity.hbm.entity_glyphid_brawler.name=狂战士异虫 +entity.hbm.entity_glyphid_brenda.name=布伦达 +entity.hbm.entity_glyphid_digger.name=掘地异虫 +entity.hbm.entity_glyphid_nuclear.name=大个子强森 +entity.hbm.entity_glyphid_scout.name=侦察异虫 +entity.hbm.entity_ntm_fbi.name=FBI探员 +entity.hbm.entity_ntm_fbi_drone.name=FBI无人机 +entity.hbm.entity_ntm_radiation_blaze.name=核融元素 entity.hbm.entity_ntm_ufo.name=火星入侵者飞船 -entity.entity_mob_hunter_chopper.name=猎人直升机 -entity.entity_mob_mask_man.name=面具人 -entity.entity_mob_gold_creeper.name=黄金爬行者 -entity.entity_mob_nuclear_creeper.name=核爆爬行者 -entity.entity_mob_phosgene_creeper.name=光气爬行者 -entity.entity_mob_tainted_creeper.name=污染爬行者 -entity.entity_mob_volatile_creeper.name=不稳定爬行者 -entity.entity_parasite_maggot.name=寄生虫 -entity.entity_pigeon.name=鸽子 -entity.entity_plastic_bag.name=塑料袋 -entity.entity_taint_crab.name=污染螃蟹 -entity.entity_tesla_crab.name=磁暴螃蟹 +entity.hbm.entity_mob_hunter_chopper.name=猎人直升机 +entity.hbm.entity_mob_mask_man.name=面具人 +entity.hbm.entity_mob_gold_creeper.name=黄金爬行者 +entity.hbm.entity_mob_nuclear_creeper.name=核爆爬行者 +entity.hbm.entity_mob_phosgene_creeper.name=光气爬行者 +entity.hbm.entity_mob_tainted_creeper.name=污染爬行者 +entity.hbm.entity_mob_volatile_creeper.name=不稳定爬行者 +entity.hbm.entity_parasite_maggot.name=寄生虫 +entity.hbm.entity_pigeon.name=鸽子 +entity.hbm.entity_plastic_bag.name=塑料袋 +entity.hbm.entity_taint_crab.name=污染螃蟹 +entity.hbm.entity_tesla_crab.name=磁暴螃蟹 entity.hbm.entity_balls_o_tron.name=机械蠕虫 entity.hbm.entity_balls_o_tron_seg.name=机械蠕虫 entity.hbm.entity_bullet.name=子弹 From aaa046e4eb235f5d84b782120dc1650d2869ef63 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 18 Sep 2025 16:08:27 +0200 Subject: [PATCH 20/26] mischief --- changelog | 3 + .../com/hbm/main/ModEventHandlerRenderer.java | 46 +- .../item/weapon/sedna/ItemRenderDANI.java | 21 + .../item/weapon/sedna/ItemRenderEOTT.java | 28 + .../weapon/sedna/ItemRenderHeavyRevolver.java | 2 +- .../sedna/ItemRenderMareslegAkimbo.java | 22 + .../weapon/sedna/ItemRenderUziAkimbo.java | 1 + .../weapon/sedna/ItemRenderWeaponBase.java | 6 +- .../com/hbm/wiaj/cannery/CanneryHadron.java | 679 ------------------ .../com/hbm/wiaj/cannery/CannerySchottky.java | 250 ------- src/main/java/com/hbm/wiaj/cannery/Jars.java | 2 - 11 files changed, 120 insertions(+), 940 deletions(-) delete mode 100644 src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java delete mode 100644 src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java diff --git a/changelog b/changelog index f57182caa..5dc4a445d 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,9 @@ ## Changed * Added more QMAW pages * Removed most old particle accelerator blocks from the creative inventory +* All dual wielded guns now render more accurately when dropped instead of only showing one gun +* Added support for left handed guns (currently unused)* +* Removed the presentations for the old particle accelerator and schottky diode ## Fixed * Fixed wood burner only being able to create one ash pile per item burned, even when that item yields more, creating a backlog in the internal ash value diff --git a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java index 37fbc2d55..449b18eb9 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java +++ b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java @@ -89,6 +89,12 @@ public class ModEventHandlerRenderer { ModelRenderer box = getBoxFromType(renderer, EnumPlayerPart.LEFT_ARM); box.isHidden = true; } + if(renderGun.isLeftHanded()) { + partsHidden[EnumPlayerPart.LEFT_ARM.ordinal()] = true; + partsHidden[EnumPlayerPart.RIGHT_ARM.ordinal()] = true; + getBoxFromType(renderer, EnumPlayerPart.LEFT_ARM).isHidden = true; + getBoxFromType(renderer, EnumPlayerPart.RIGHT_ARM).isHidden = true; + } } } @@ -121,6 +127,7 @@ public class ModEventHandlerRenderer { RenderPlayer renderer = event.renderer; boolean akimbo = false; + boolean leftHand = false; ItemStack held = player.getHeldItem(); @@ -128,9 +135,8 @@ public class ModEventHandlerRenderer { IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(held, IItemRenderer.ItemRenderType.EQUIPPED); if(customRenderer instanceof ItemRenderWeaponBase) { ItemRenderWeaponBase renderGun = (ItemRenderWeaponBase) customRenderer; - if(renderGun.isAkimbo()) { - akimbo = true; - } + if(renderGun.isAkimbo()) akimbo = true; + if(renderGun.isLeftHanded()) leftHand = true; } } @@ -148,6 +154,23 @@ public class ModEventHandlerRenderer { } } + if(leftHand) { + ModelBiped biped = renderer.modelBipedMain; + renderer.modelArmorChestplate.bipedLeftArm.rotateAngleY = renderer.modelArmor.bipedLeftArm.rotateAngleY = biped.bipedLeftArm.rotateAngleY = + 0.1F + biped.bipedHead.rotateAngleY; + renderer.modelArmorChestplate.bipedRightArm.rotateAngleY = renderer.modelArmor.bipedRightArm.rotateAngleY = biped.bipedRightArm.rotateAngleY = + -0.5F + biped.bipedHead.rotateAngleY; + + if(!isManly) { + AbstractClientPlayer acp = (AbstractClientPlayer) player; + Minecraft.getMinecraft().getTextureManager().bindTexture(acp.getLocationSkin()); + biped.bipedLeftArm.isHidden = false; + biped.bipedLeftArm.render(0.0625F); + biped.bipedRightArm.isHidden = false; + biped.bipedRightArm.render(0.0625F); + } + } + if(isManly) { if(manlyModel == null) manlyModel = new ModelMan(); @@ -200,6 +223,11 @@ public class ModEventHandlerRenderer { ModelBiped biped = renderer.modelBipedMain; renderer.modelArmorChestplate.bipedLeftArm.rotateAngleY = renderer.modelArmor.bipedLeftArm.rotateAngleY = biped.bipedLeftArm.rotateAngleY = 0.1F + biped.bipedHead.rotateAngleY; } + if(renderGun.isLeftHanded()) { + ModelBiped biped = renderer.modelBipedMain; + renderer.modelArmorChestplate.bipedLeftArm.rotateAngleY = renderer.modelArmor.bipedLeftArm.rotateAngleY = biped.bipedLeftArm.rotateAngleY = 0.1F + biped.bipedHead.rotateAngleY; + renderer.modelArmorChestplate.bipedRightArm.rotateAngleY = renderer.modelArmor.bipedRightArm.rotateAngleY = biped.bipedRightArm.rotateAngleY = -0.5F + biped.bipedHead.rotateAngleY; + } } } } @@ -216,7 +244,7 @@ public class ModEventHandlerRenderer { if(customRenderer instanceof ItemRenderWeaponBase) { ItemRenderWeaponBase renderWeapon = (ItemRenderWeaponBase) customRenderer; - if(renderWeapon.isAkimbo()) { + if(renderWeapon.isAkimbo() || renderWeapon.isLeftHanded()) { GL11.glPushMatrix(); renderer.modelBipedMain.bipedLeftArm.isHidden = false; renderer.modelBipedMain.bipedLeftArm.postRender(0.0625F); @@ -235,8 +263,14 @@ public class ModEventHandlerRenderer { GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F); - renderWeapon.setupThirdPersonAkimbo(held); - renderWeapon.renderEquippedAkimbo(held); + if(renderWeapon.isLeftHanded()) { + GL11.glTranslatef(0.1875F, 0F, 0.0F); + renderWeapon.setupThirdPerson(held); + renderWeapon.renderEquippedAkimbo(held); + } else { + renderWeapon.setupThirdPersonAkimbo(held); + renderWeapon.renderEquippedAkimbo(held); + } GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDANI.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDANI.java index dfdaf13c5..1da273b6c 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDANI.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDANI.java @@ -193,6 +193,27 @@ public class ItemRenderDANI extends ItemRenderWeaponBase { ResourceManager.bio_revolver.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); } + + @Override + public void renderEntity(ItemStack stack) { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + GL11.glPushMatrix(); + + GL11.glTranslated(-2, 1, 0); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.dani_lunar_tex); + ResourceManager.bio_revolver.renderAll(); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(2, 1, 0); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.dani_celestial_tex); + ResourceManager.bio_revolver.renderAll(); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + } @Override public void renderOther(ItemStack stack, ItemRenderType type) { diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderEOTT.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderEOTT.java index 76d653de5..15fac95a2 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderEOTT.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderEOTT.java @@ -238,6 +238,34 @@ public class ItemRenderEOTT extends ItemRenderWeaponBase { public void renderModTable(ItemStack stack, int index) { renderOther(stack, ItemRenderType.INVENTORY); } + + @Override + public void renderEntity(ItemStack stack) { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + GL11.glPushMatrix(); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex); + + GL11.glTranslated(-1, 1, 0); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(1, 1, 0); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + } @Override public void renderOther(ItemStack stack, ItemRenderType type) { diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderHeavyRevolver.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderHeavyRevolver.java index 2cf24c68e..bd7700d25 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderHeavyRevolver.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderHeavyRevolver.java @@ -19,7 +19,7 @@ public class ItemRenderHeavyRevolver extends ItemRenderWeaponBase { public ItemRenderHeavyRevolver(ResourceLocation texture) { this.texture = texture; } - + @Override protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMareslegAkimbo.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMareslegAkimbo.java index 16c90287a..4ae026ddb 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMareslegAkimbo.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMareslegAkimbo.java @@ -180,6 +180,28 @@ public class ItemRenderMareslegAkimbo extends ItemRenderWeaponBase { public void renderModTable(ItemStack stack, int index) { renderOther(stack, ItemRenderType.INVENTORY); } + + @Override + public void renderEntity(ItemStack stack) { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + GL11.glPushMatrix(); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.maresleg_tex); + + GL11.glTranslated(-1, 1, 0); + ResourceManager.maresleg.renderPart("Gun"); + ResourceManager.maresleg.renderPart("Lever"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(1, 1, 0); + ResourceManager.maresleg.renderPart("Gun"); + ResourceManager.maresleg.renderPart("Lever"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + } @Override public void renderOther(ItemStack stack, ItemRenderType type) { diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java index 67f3c99ac..91d6820b5 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java @@ -195,6 +195,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { GL11.glShadeModel(GL11.GL_FLAT); } + @Override public void renderEntity(ItemStack stack) { GL11.glEnable(GL11.GL_LIGHTING); GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java index 3abb3a71c..34484b5e3 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java @@ -33,8 +33,9 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer { public static final ResourceLocation laser_flash = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/laser_flash.png"); public static float interp; - + public boolean isAkimbo() { return false; } + public boolean isLeftHanded() { return false; } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { @@ -53,7 +54,8 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer { GL11.glEnable(GL11.GL_CULL_FACE); switch(type) { case EQUIPPED_FIRST_PERSON: setupFirstPerson(item); renderFirstPerson(item); break; - case EQUIPPED: setupThirdPerson(item); renderEquipped(item); break; + case EQUIPPED: + if(isLeftHanded()) break; setupThirdPerson(item); renderEquipped(item); break; case INVENTORY: setupInv(item); renderInv(item); break; case ENTITY: setupEntity(item); renderEntity(item); break; } diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java b/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java deleted file mode 100644 index 38438a9bc..000000000 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java +++ /dev/null @@ -1,679 +0,0 @@ -package com.hbm.wiaj.cannery; - -import com.hbm.blocks.ModBlocks; -import com.hbm.util.i18n.I18nUtil; -import com.hbm.wiaj.JarScene; -import com.hbm.wiaj.JarScript; -import com.hbm.wiaj.WorldInAJar; -import com.hbm.wiaj.actions.ActionCreateActor; -import com.hbm.wiaj.actions.ActionOffsetBy; -import com.hbm.wiaj.actions.ActionRemoveActor; -import com.hbm.wiaj.actions.ActionRotateBy; -import com.hbm.wiaj.actions.ActionSetBlock; -import com.hbm.wiaj.actions.ActionSetZoom; -import com.hbm.wiaj.actions.ActionWait; -import com.hbm.wiaj.actors.ActorFancyPanel; -import com.hbm.wiaj.actors.ActorFancyPanel.Orientation; - -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraftforge.common.util.ForgeDirection; - -public class CanneryHadron extends CanneryBase { - - @Override - public ItemStack getIcon() { - return new ItemStack(ModBlocks.hadron_core); - } - - @Override - public String getName() { - return "cannery.hadron"; - } - - @Override - public CanneryBase[] seeAlso() { - return new CanneryBase[] { - new CannerySchottky() - }; - } - - @Override - public JarScript createScript() { - WorldInAJar world = new WorldInAJar(25, 5, 25); - JarScript script = new JarScript(world); - - - - // FIRST SCENE: Show and explain the core component - JarScene scene0 = new JarScene(script); - scene0.add(new ActionSetZoom(4, 0)); - - scene0.add(new ActionSetBlock(12, 2, 12, ModBlocks.hadron_core, ForgeDirection.NORTH.ordinal())); - - scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.0")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene0.add(new ActionWait(100)); - scene0.add(new ActionRemoveActor(1)); - scene0.add(new ActionWait(5)); - - scene0.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.1")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene0.add(new ActionWait(100)); - scene0.add(new ActionRemoveActor(2)); - scene0.add(new ActionWait(10)); - - scene0.add(new ActionCreateActor(3, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 4, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.2")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene0.add(new ActionWait(80)); - scene0.add(new ActionRemoveActor(3)); - scene0.add(new ActionWait(5)); - - scene0.add(new ActionRotateBy(-90, 0, 10)); - - scene0.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 4, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.3")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene0.add(new ActionWait(80)); - scene0.add(new ActionRemoveActor(4)); - scene0.add(new ActionWait(5)); - - scene0.add(new ActionRotateBy(90, 0, 10)); - - - - // SECOND SCENE: Begin building a coil around the core component - JarScene scene1 = new JarScene(script); - - scene1.add(new ActionSetZoom(4, 0)); - scene1.add(new ActionSetZoom(-2, 10)); - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene1.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 12, ModBlocks.hadron_coil_alloy)); - scene1.add(new ActionWait(2)); - } - - scene1.add(new ActionWait(5)); - - scene1.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -25, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.4")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene1.add(new ActionWait(40)); - - for(Block block : new Block[] { - ModBlocks.hadron_coil_gold, - ModBlocks.hadron_coil_neodymium, - ModBlocks.hadron_coil_magtung, - ModBlocks.hadron_coil_schrabidium, - ModBlocks.hadron_coil_schrabidate, - ModBlocks.hadron_coil_starmetal, - ModBlocks.hadron_coil_chlorophyte, - ModBlocks.hadron_coil_mese - }) { - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene1.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 12, block)); - scene1.add(new ActionWait(1)); - } - - scene1.add(new ActionWait(4)); - } - - scene1.add(new ActionWait(20)); - scene1.add(new ActionRemoveActor(5)); - scene1.add(new ActionWait(5)); - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene1.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 12, ModBlocks.hadron_plating)); - scene1.add(new ActionWait(2)); - } - - scene1.add(new ActionCreateActor(6, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -40, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.5")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene1.add(new ActionWait(60)); - scene1.add(new ActionRemoveActor(6)); - scene1.add(new ActionWait(5)); - - - - // THIRD SCENE: Add the Access Terminal and Power Plug - JarScene scene2 = new JarScene(script); - scene2.add(new ActionSetZoom(2, 0)); - - scene2.add(new ActionWait(5)); - - for(int i = 7; i >= 0; i--) { - double r = i * Math.PI / 4; - scene2.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 12, ModBlocks.hadron_coil_neodymium)); - scene2.add(new ActionWait(1)); - } - - scene2.add(new ActionWait(20)); - - scene2.add(new ActionSetBlock(12 - 2, 2, 12, Blocks.air)); - scene2.add(new ActionWait(15)); - - scene2.add(new ActionSetBlock(12 - 2, 2, 12, ModBlocks.hadron_access, ForgeDirection.EAST.ordinal())); - scene2.add(new ActionWait(10)); - - scene2.add(new ActionCreateActor(7, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 36, 18, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.6")}}, 100) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - scene2.add(new ActionWait(80)); - scene2.add(new ActionRemoveActor(7)); - scene2.add(new ActionWait(20)); - - scene2.add(new ActionSetBlock(12, 2 + 2, 12, Blocks.air)); - scene2.add(new ActionWait(15)); - - scene2.add(new ActionSetBlock(12, 2 + 2, 12, ModBlocks.hadron_power)); - scene2.add(new ActionWait(10)); - - scene2.add(new ActionCreateActor(8, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -45, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.7")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene2.add(new ActionWait(80)); - scene2.add(new ActionRemoveActor(8)); - scene2.add(new ActionWait(20)); - - - - // FOURTH SCENE: Add some coil segments and power them - JarScene scene3 = new JarScene(script); - scene3.add(new ActionSetZoom(2, 0)); - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 11, ModBlocks.hadron_coil_neodymium)); - scene3.add(new ActionWait(2)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 11, ModBlocks.hadron_plating)); - scene3.add(new ActionWait(2)); - } - - scene3.add(new ActionWait(5)); - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 10, ModBlocks.hadron_coil_neodymium)); - scene3.add(new ActionWait(2)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 10, ModBlocks.hadron_plating)); - scene3.add(new ActionWait(2)); - } - - scene3.add(new ActionWait(20)); - - scene3.add(new ActionSetBlock(12, 2 + 2, 10, Blocks.air)); - scene3.add(new ActionWait(15)); - - scene3.add(new ActionSetBlock(12, 2 + 2, 10, ModBlocks.hadron_power)); - scene3.add(new ActionWait(10)); - - scene3.add(new ActionCreateActor(9, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -28, -28, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.8")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene3.add(new ActionWait(40)); - - scene3.add(new ActionCreateActor(10, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -12, 28, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.math.0")}, {I18nUtil.resolveKey("cannery.hadron.math.1")}}, 0) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - scene3.add(new ActionWait(40)); - scene3.add(new ActionRemoveActor(10)); - scene3.add(new ActionWait(5)); - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 10, ModBlocks.hadron_coil_starmetal)); - scene3.add(new ActionWait(1)); - } - - scene3.add(new ActionCreateActor(13, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -12, 28, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.math.2")}, {I18nUtil.resolveKey("cannery.hadron.math.3")}}, 0) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - - scene3.add(new ActionWait(80)); - scene3.add(new ActionRemoveActor(9)); - scene3.add(new ActionWait(10)); - - scene3.add(new ActionCreateActor(11, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -45, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.9")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene3.add(new ActionWait(80)); - scene3.add(new ActionRemoveActor(11)); - scene3.add(new ActionWait(5)); - - scene3.add(new ActionCreateActor(12, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -45, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.10")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene3.add(new ActionWait(80)); - scene3.add(new ActionRemoveActor(12)); - scene3.add(new ActionWait(10)); - - scene3.add(new ActionRemoveActor(13)); - - for(int i = 7; i >= 0; i--) { - double r = i * Math.PI / 4; - scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 10, ModBlocks.hadron_coil_neodymium)); - scene3.add(new ActionWait(1)); - } - - - - // FIFTH SCENE: Add a bend to the coil - JarScene scene4 = new JarScene(script); - scene4.add(new ActionSetZoom(2, 0)); - - scene4.add(new ActionOffsetBy(0, 0, 4, 10)); - scene4.add(new ActionRotateBy(90, 0, 10)); - - - // BEGIN CORNER SEGMENT - for(int z = 9; z >= 7; z--) { - for(int x = 11; x <= 14; x++) { - if(z == 7 && x == 11) continue; - scene4.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating)); - scene4.add(new ActionWait(2)); - } - } - - for(int z = 9; z >= 6; z--) { - for(int x = 10; x <= 14; x++) { - if(z == 6 && x <= 11) continue; - if(z <= 7 && x == 10) continue; - scene4.add(new ActionSetBlock(x, 1, z, z == 6 || x == 10 || (z == 7 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene4.add(new ActionWait(2)); - } - } - - for(int z = 9; z >= 6; z--) { - for(int x = 10; x <= 14; x++) { - if(z == 6 && x <= 11) continue; - if(z <= 7 && x == 10) continue; - if(z == 9 && x == 12) continue; - if(z == 8 && x == 12) continue; - if(z == 8 && x == 13) continue; - if(z == 8 && x == 14) continue; - scene4.add(new ActionSetBlock(x, 2, z, z == 6 || x == 10 || (z == 7 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene4.add(new ActionWait(2)); - } - } - // END CORNER SEGMENT - - - scene4.add(new ActionWait(5)); - - scene4.add(new ActionCreateActor(14, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -8, -35, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.11")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene4.add(new ActionWait(80)); - scene4.add(new ActionRemoveActor(14)); - scene4.add(new ActionWait(5)); - - scene4.add(new ActionCreateActor(15, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 24, -16, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.12")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene4.add(new ActionWait(80)); - scene4.add(new ActionRemoveActor(15)); - scene4.add(new ActionWait(10)); - - for(int z = 9; z >= 6; z--) { - for(int x = 10; x <= 14; x++) { - if(z == 6 && x <= 11) continue; - if(z <= 7 && x == 10) continue; - scene4.add(new ActionSetBlock(x, 3, z, z == 6 || x == 10 || (z == 7 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene4.add(new ActionWait(2)); - } - } - - for(int z = 9; z >= 7; z--) { - for(int x = 11; x <= 14; x++) { - if(z == 7 && x == 11) continue; - scene4.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating)); - scene4.add(new ActionWait(2)); - } - } - - scene4.add(new ActionWait(10)); - - scene4.add(new ActionSetBlock(14, 2 + 2, 8, Blocks.air)); - scene4.add(new ActionWait(10)); - - scene4.add(new ActionSetBlock(14, 2 + 2, 8, ModBlocks.hadron_power)); - scene4.add(new ActionWait(10)); - - - - - // SIXTH SCENE: Reach the Analysis Chamber - JarScene scene5 = new JarScene(script); - scene5.add(new ActionSetZoom(2, 0)); - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene5.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 1.5F), 8 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium)); - scene5.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene5.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 2.75F), 8 + (int)(Math.cos(r) * 2.75F), ModBlocks.hadron_plating)); - scene5.add(new ActionWait(1)); - } - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene5.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 1.5F), 8 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium)); - scene5.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene5.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 2.75F), 8 + (int)(Math.cos(r) * 2.75F), i == 3 ? ModBlocks.hadron_power : ModBlocks.hadron_plating)); - scene5.add(new ActionWait(1)); - } - - - // BEGIN CORNER SEGMENT - for(int x = 17; x <= 19; x++) { - for(int z = 10; z >= 7; z--) { - if(z == 7 && x == 19) continue; - scene5.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating)); - scene5.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 20; x++) { - for(int z = 10; z >= 6; z--) { - if(z == 6 && x >= 19) continue; - if(z <= 7 && x == 20) continue; - scene5.add(new ActionSetBlock(x, 1, z, z == 6 || x == 20 || (z == 7 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene5.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 20; x++) { - for(int z = 10; z >= 6; z--) { - if(z == 6 && x >= 19) continue; - if(z <= 7 && x == 20) continue; - if(z == 9 && x == 18) continue; - if(z == 8 && x == 18) continue; - if(z == 8 && x == 17) continue; - if(z == 10 && x == 18) continue; - scene5.add(new ActionSetBlock(x, 2, z, z == 6 || x == 20 || (z == 7 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene5.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 20; x++) { - for(int z = 10; z >= 6; z--) { - if(z == 6 && x >= 19) continue; - if(z <= 7 && x == 20) continue; - scene5.add(new ActionSetBlock(x, 3, z, z == 6 || x == 20 || (z == 7 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene5.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 19; x++) { - for(int z = 10; z >= 7; z--) { - if(z == 7 && x == 19) continue; - scene5.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating)); - scene5.add(new ActionWait(1)); - } - } - // END CORNER SEGMENT - - - scene5.add(new ActionRotateBy(-90, 0, 5)); - scene5.add(new ActionOffsetBy(0, 0, -8, 10)); - scene5.add(new ActionRotateBy(-90, 0, 10)); - scene5.add(new ActionSetZoom(-1, 10)); - - for(int z = 11; z <= 20; z++) { - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene5.add(new ActionSetBlock(18 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), z, ModBlocks.hadron_coil_neodymium)); - if(z == 11 || z == 20) scene5.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene5.add(new ActionSetBlock(18 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), z, i == 3 && z % 3 == 0 ? ModBlocks.hadron_power : ModBlocks.hadron_plating)); - if(z == 11 || z == 20) scene5.add(new ActionWait(1)); - } - - scene5.add(new ActionWait(z < 13 || z > 18 ? 2 : 1)); - } - - // SEVENTH SCENE: Actually build the Analysis Chamber - JarScene scene6 = new JarScene(script); - scene6.add(new ActionSetZoom(1, 0)); - - scene6.add(new ActionSetZoom(1, 10)); - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 13, ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 13, ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - - for(int z = 14; z <= 16; z++) { - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), z, i == 6 ? ModBlocks.hadron_analysis_glass : ModBlocks.hadron_analysis)); - scene6.add(new ActionWait(2)); - } - } - - scene6.add(new ActionWait(10)); - - scene6.add(new ActionCreateActor(16, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, 0, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.13")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene6.add(new ActionWait(100)); - scene6.add(new ActionRemoveActor(16)); - scene6.add(new ActionWait(10)); - - for(int z = 17; z <= 20; z++) { - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), z, ModBlocks.hadron_coil_neodymium)); - if(z == 17 || z == 20) scene6.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), z, i == 3 && (z == 18 || z == 20) ? ModBlocks.hadron_power : ModBlocks.hadron_plating)); - if(z == 17 || z == 20) scene6.add(new ActionWait(1)); - } - - scene6.add(new ActionWait(1)); - } - - scene6.add(new ActionSetZoom(-1, 10)); - - // BEGIN CORNER SEGMENT - for(int x = 17; x <= 19; x++) { - for(int z = 23; z >= 21; z--) { - if(z == 23 && x == 19) continue; - scene6.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 20; x++) { - for(int z = 24; z >= 21; z--) { - if(z == 24 && x >= 19) continue; - if(z >= 23 && x == 20) continue; - scene6.add(new ActionSetBlock(x, 1, z, z == 24 || x == 20 || (z == 23 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 20; x++) { - for(int z = 24; z >= 21; z--) { - if(z == 24 && x >= 19) continue; - if(z >= 23 && x == 20) continue; - if(z == 21 && x == 18) continue; - if(z == 22 && x == 18) continue; - if(z == 22 && x == 17) continue; - if(z == 20 && x == 18) continue; - scene6.add(new ActionSetBlock(x, 2, z, z == 24 || x == 20 || (z == 23 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 20; x++) { - for(int z = 24; z >= 21; z--) { - if(z == 24 && x >= 19) continue; - if(z >= 23 && x == 20) continue; - scene6.add(new ActionSetBlock(x, 3, z, z == 24 || x == 20 || (z == 23 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 17; x <= 19; x++) { - for(int z = 23; z >= 21; z--) { - if(z == 23 && x == 19) continue; - scene6.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - } - // END CORNER SEGMENT - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene6.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 1.5F), 22 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene6.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 2.75F), 22 + (int)(Math.cos(r) * 2.75F), i == 3 ? ModBlocks.hadron_power : ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene6.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 1.5F), 22 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene6.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 2.75F), 22 + (int)(Math.cos(r) * 2.75F), ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - - for(int i = 0; i < 8; i++) { - double r = i * Math.PI / 4; - scene6.add(new ActionSetBlock(14, 2 + (int)(Math.sin(r) * 1.5F), 22 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - - for(int i = 0; i < 12; i++) { - double r = i * Math.PI / 6; - scene6.add(new ActionSetBlock(14, 2 + (int)(Math.sin(r) * 2.75F), 22 + (int)(Math.cos(r) * 2.75F), i == 3 ? ModBlocks.hadron_power : ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - - // BEGIN CORNER SEGMENT - for(int x = 11; x <= 13; x++) { - for(int z = 23; z >= 21; z--) { - if(z == 23 && x == 11) continue; - scene6.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 10; x <= 13; x++) { - for(int z = 24; z >= 21; z--) { - if(z == 24 && x <= 11) continue; - if(z >= 23 && x == 10) continue; - scene6.add(new ActionSetBlock(x, 1, z, z == 24 || x == 10 || (z == 23 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 10; x <= 13; x++) { - for(int z = 24; z >= 21; z--) { - if(z == 24 && x <= 11) continue; - if(z >= 23 && x == 10) continue; - if(z == 21 && x == 12) continue; - if(z == 22 && x == 12) continue; - if(z == 22 && x == 13) continue; - scene6.add(new ActionSetBlock(x, 2, z, z == 24 || x == 10 || (z == 23 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 10; x <= 13; x++) { - for(int z = 24; z >= 21; z--) { - if(z == 24 && x <= 11) continue; - if(z >= 23 && x == 10) continue; - scene6.add(new ActionSetBlock(x, 3, z, z == 24 || x == 10 || (z == 23 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium)); - scene6.add(new ActionWait(1)); - } - } - - for(int x = 11; x <= 13; x++) { - for(int z = 23; z >= 21; z--) { - if(z == 23 && x == 11) continue; - scene6.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating)); - scene6.add(new ActionWait(1)); - } - } - // END CORNER SEGMENT - - scene6.add(new ActionWait(10)); - - scene6.add(new ActionCreateActor(17, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -50, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.14")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene6.add(new ActionWait(100)); - scene6.add(new ActionRemoveActor(17)); - scene6.add(new ActionWait(10)); - - - - - // ADDENDUM SCENE: Schottky diodes - - - - // ADDENDUM SCENE: Cooling - - - script - .addScene(scene0) - .addScene(scene1) - .addScene(scene2) - .addScene(scene3) - .addScene(scene4) - .addScene(scene5) - .addScene(scene6); - - return script; - } - -} diff --git a/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java b/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java deleted file mode 100644 index caaabcac2..000000000 --- a/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java +++ /dev/null @@ -1,250 +0,0 @@ -package com.hbm.wiaj.cannery; - -import com.hbm.blocks.ModBlocks; -import com.hbm.items.ModItems; -import com.hbm.tileentity.machine.TileEntityHadronDiode; -import com.hbm.util.i18n.I18nUtil; -import com.hbm.wiaj.JarScene; -import com.hbm.wiaj.JarScript; -import com.hbm.wiaj.WorldInAJar; -import com.hbm.wiaj.actions.ActionCreateActor; -import com.hbm.wiaj.actions.ActionRemoveActor; -import com.hbm.wiaj.actions.ActionRotateBy; -import com.hbm.wiaj.actions.ActionSetBlock; -import com.hbm.wiaj.actions.ActionSetTile; -import com.hbm.wiaj.actions.ActionSetZoom; -import com.hbm.wiaj.actions.ActionWait; -import com.hbm.wiaj.actors.ActorFancyPanel; -import com.hbm.wiaj.actors.ActorFancyPanel.Orientation; - -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; - -public class CannerySchottky extends CanneryBase { - - @Override - public ItemStack getIcon() { - return new ItemStack(ModBlocks.hadron_diode); - } - - @Override - public String getName() { - return "cannery.schottky"; - } - - @Override - public CanneryBase[] seeAlso() { - return new CanneryBase[] { - new CanneryHadron() - }; - } - - @Override - public JarScript createScript() { - WorldInAJar world = new WorldInAJar(5, 5, 5); - JarScript script = new JarScript(world); - - - // FIRST SCENE: Show and explain the diode - JarScene scene0 = new JarScene(script); - scene0.add(new ActionSetZoom(4, 0)); - - scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode())); - scene0.add(new ActionSetBlock(2, 2, 2, ModBlocks.hadron_diode)); - - scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.0")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene0.add(new ActionWait(100)); - scene0.add(new ActionRemoveActor(1)); - scene0.add(new ActionWait(5)); - - scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.1")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene0.add(new ActionWait(80)); - scene0.add(new ActionRemoveActor(1)); - scene0.add(new ActionWait(10)); - - scene0.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) - .setColors(colorCopper).setOrientation(Orientation.RIGHT))); - - scene0.add(new ActionWait(20)); - scene0.add(new ActionRemoveActor(2)); - - scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; }})); - - scene0.add(new ActionWait(10)); - - scene0.add(new ActionCreateActor(3, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.2")}}, 100) - .setColors(colorCopper).setOrientation(Orientation.RIGHT))); - - scene0.add(new ActionWait(60)); - scene0.add(new ActionRemoveActor(3)); - scene0.add(new ActionWait(10)); - - scene0.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - scene0.add(new ActionWait(10)); - scene0.add(new ActionRemoveActor(4)); - - scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.IN; }})); - - scene0.add(new ActionWait(5)); - - scene0.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - scene0.add(new ActionWait(10)); - scene0.add(new ActionRemoveActor(5)); - - scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; }})); - - scene0.add(new ActionWait(10)); - - scene0.add(new ActionCreateActor(6, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.3")}}, 100) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - scene0.add(new ActionWait(60)); - scene0.add(new ActionRemoveActor(6)); - scene0.add(new ActionWait(10)); - - - // SECOND SCENE: Add another entrance and exit - JarScene scene1 = new JarScene(script); - scene1.add(new ActionSetZoom(4, 0)); - - scene1.add(new ActionRotateBy(180, 0, 10)); - - scene1.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) - .setColors(colorCopper).setOrientation(Orientation.RIGHT))); - - scene1.add(new ActionWait(10)); - scene1.add(new ActionRemoveActor(2)); - - scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; }})); - - scene1.add(new ActionWait(10)); - - scene1.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - scene1.add(new ActionWait(10)); - scene1.add(new ActionRemoveActor(4)); - - scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; sides[5] = DiodeConfig.IN; }})); - - scene1.add(new ActionWait(5)); - - scene1.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) - .setColors(colorCopper).setOrientation(Orientation.LEFT))); - - scene1.add(new ActionWait(10)); - scene1.add(new ActionRemoveActor(5)); - - scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; sides[5] = DiodeConfig.OUT; }})); - - scene1.add(new ActionWait(10)); - - scene1.add(new ActionRotateBy(-180, 0, 10)); - - scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.4")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene1.add(new ActionWait(100)); - scene1.add(new ActionRemoveActor(1)); - scene1.add(new ActionWait(10)); - - scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.5")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene1.add(new ActionWait(100)); - scene1.add(new ActionRemoveActor(1)); - scene1.add(new ActionWait(10)); - - scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.6")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene1.add(new ActionWait(100)); - scene1.add(new ActionRemoveActor(1)); - scene1.add(new ActionWait(10)); - - scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.7")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene1.add(new ActionWait(100)); - scene1.add(new ActionRemoveActor(1)); - scene1.add(new ActionWait(10)); - - scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.8")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - scene1.add(new ActionWait(100)); - scene1.add(new ActionRemoveActor(1)); - scene1.add(new ActionWait(10)); - - - - // THIRD SCENE: Correctly enclose the diode - JarScene scene2 = new JarScene(script); - scene2.add(new ActionSetZoom(4, 0)); - - scene2.add(new ActionSetZoom(-2, 10)); - - for(int x = 0; x < 5; x++) { - for(int z = 0; z < 5; z++) { - if((x == 0 || x == 4) && (z == 0 || z == 4)) continue; - scene2.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating)); - scene2.add(new ActionWait(1)); - } - } - - for(int x = 0; x < 5; x++) { - for(int z = 0; z < 5; z++) { - scene2.add(new ActionSetBlock(x, 1, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy)); - scene2.add(new ActionWait(1)); - } - } - - for(int x = 0; x < 5; x++) { - for(int z = 0; z < 5; z++) { - if(x == 2 || z == 2) continue; - scene2.add(new ActionSetBlock(x, 2, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy)); - scene2.add(new ActionWait(1)); - } - } - - scene2.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.9")}}, 200) - .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); - - - scene2.add(new ActionRotateBy(360, 0, 100)); - scene2.add(new ActionRemoveActor(1)); - scene2.add(new ActionWait(10)); - - for(int x = 0; x < 5; x++) { - for(int z = 0; z < 5; z++) { - scene2.add(new ActionSetBlock(x, 3, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy)); - scene2.add(new ActionWait(1)); - } - } - - for(int x = 0; x < 5; x++) { - for(int z = 0; z < 5; z++) { - if((x == 0 || x == 4) && (z == 0 || z == 4)) continue; - scene2.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating)); - scene2.add(new ActionWait(1)); - } - } - - - script - .addScene(scene0) - .addScene(scene1) - .addScene(scene2); - - return script; - } - -} diff --git a/src/main/java/com/hbm/wiaj/cannery/Jars.java b/src/main/java/com/hbm/wiaj/cannery/Jars.java index 7355cdd5c..fbefe9d9d 100644 --- a/src/main/java/com/hbm/wiaj/cannery/Jars.java +++ b/src/main/java/com/hbm/wiaj/cannery/Jars.java @@ -23,8 +23,6 @@ public class Jars { canneries.put(new ComparableStack(ModBlocks.machine_silex), new CannerySILEX()); canneries.put(new ComparableStack(ModBlocks.foundry_channel), new CanneryFoundryChannel()); canneries.put(new ComparableStack(ModBlocks.machine_crucible), new CanneryCrucible()); - canneries.put(new ComparableStack(ModBlocks.hadron_core), new CanneryHadron()); - canneries.put(new ComparableStack(ModBlocks.hadron_diode), new CannerySchottky()); canneries.put(new ComparableStack(DictFrame.fromOne(ModItems.plant_item, EnumPlantType.MUSTARDWILLOW)), new CanneryWillow()); canneries.put(new ComparableStack(DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.CD0)), new CanneryWillow()); From 3dc97e8133c4b4fcced9cd8716f8292847797a56 Mon Sep 17 00:00:00 2001 From: Lazzzycatwastaken Date: Thu, 18 Sep 2025 16:13:10 +0200 Subject: [PATCH 21/26] mr. penis (real) --- .../com/hbm/blocks/generic/BlockChain.java | 63 ++++++----- .../hbm/blocks/network/BlockCableGauge.java | 9 +- .../hbm/blocks/network/FluidDuctGauge.java | 8 +- .../java/com/hbm/main/StructureManager.java | 2 + src/main/java/com/hbm/util/MobUtil.java | 74 +++++++++++++ .../com/hbm/world/gen/NTMWorldGenerator.java | 15 ++- .../hbm/world/gen/util/LogicBlockActions.java | 98 +++++++++++++++++- .../world/gen/util/LogicBlockConditions.java | 9 ++ .../assets/hbm/structures/factory.nbt | Bin 0 -> 30140 bytes 9 files changed, 240 insertions(+), 38 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/factory.nbt diff --git a/src/main/java/com/hbm/blocks/generic/BlockChain.java b/src/main/java/com/hbm/blocks/generic/BlockChain.java index c76eeeeef..ef78009eb 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockChain.java +++ b/src/main/java/com/hbm/blocks/generic/BlockChain.java @@ -7,6 +7,7 @@ import static net.minecraftforge.common.util.ForgeDirection.WEST; import com.hbm.lib.RefStrings; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -20,23 +21,23 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockChain extends Block { +public class BlockChain extends Block implements INBTBlockTransformable { @SideOnly(Side.CLIENT) private IIcon iconEnd; - + public BlockChain(Material mat) { super(mat); } - + public boolean isOpaqueCube() { return false; } - + public boolean renderAsNormalBlock() { return false; } - + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); public int getRenderType() { @@ -47,7 +48,7 @@ public class BlockChain extends Block { public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) { return true; } - + @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { @@ -60,14 +61,14 @@ public class BlockChain extends Block { if(world.isSideSolid(x, y - 1, z, ForgeDirection.UP, false) || (world.getBlock(x, y - 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y - 1, z))) return this.blockIcon; - + return this.iconEnd; } - + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { return null; } - + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { func_149797_b(world.getBlockMetadata(x, y, z)); @@ -76,11 +77,11 @@ public class BlockChain extends Block { } public void func_149797_b(int meta) { - + float f = 0.125F; - + if(meta == 0) { - + this.minX = 3 * f; this.minY = 0; this.minZ = 3 * f; @@ -109,24 +110,24 @@ public class BlockChain extends Block { this.setBlockBounds(0.0F, 0.0F, 3 * f, f, 1.0F, 5 * f); } } - + @SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { this.setBlockBoundsBasedOnState(world, x, y, z); return super.getSelectedBoundingBoxFromPool(world, x, y, z); } - + public boolean canPlaceBlockAt(World world, int x, int y, int z) { - + if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) || world.getBlock(x, y + 1, z) == this) return true; - + return world.isSideSolid(x - 1, y, z, EAST ) || world.isSideSolid(x + 1, y, z, WEST ) || world.isSideSolid(x, y, z - 1, SOUTH) || world.isSideSolid(x, y, z + 1, NORTH); } - + public int onBlockPlaced(World world, int x, int y, int z, int side, float p_149660_6_, float p_149660_7_, float p_149660_8_, int meta) { int j1 = meta; @@ -142,12 +143,12 @@ public class BlockChain extends Block { if(side == 5 && world.isSideSolid(x - 1, y, z, EAST)) j1 = 5; - + if(j1 == 0) { - + if(world.getBlock(x, y + 1, z) == this) return world.getBlockMetadata(x, y + 1, z); - + if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN)) return 0; } @@ -155,30 +156,30 @@ public class BlockChain extends Block { if(j1 == 0) { if(world.isSideSolid(x, y, z + 1, NORTH)) j1 = 2; - + if(world.isSideSolid(x, y, z - 1, SOUTH)) j1 = 3; - + if(world.isSideSolid(x + 1, y, z, WEST)) j1 = 4; - + if(world.isSideSolid(x - 1, y, z, EAST)) j1 = 5; } return j1; } - + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { - + int l = world.getBlockMetadata(x, y, z); boolean flag = false; - + if(world.getBlock(x, y + 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y + 1, z)) { super.onNeighborBlockChange(world, x, y, z, block); return; } - + if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) && world.getBlockMetadata(x, y, z) == 0) { super.onNeighborBlockChange(world, x, y, z, block); return; @@ -201,4 +202,12 @@ public class BlockChain extends Block { super.onNeighborBlockChange(world, x, y, z, block); } + + @Override + public int transformMeta(int meta, int coordBaseMode) { + if (coordBaseMode == 0) return meta; + if (meta == 0) return meta; + if (meta == 1) return meta; + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); + } } diff --git a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java index 2e7048be3..12d0133ac 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java +++ b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java @@ -13,6 +13,7 @@ import com.hbm.tileentity.network.TileEntityCableBaseNT; import com.hbm.util.BobMathUtil; import com.hbm.util.i18n.I18nUtil; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -37,7 +38,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import java.util.ArrayList; import java.util.List; -public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, ILookOverlay, ITooltipProvider { +public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, INBTBlockTransformable, ILookOverlay, ITooltipProvider { @SideOnly(Side.CLIENT) protected IIcon overlayGauge; @@ -84,6 +85,11 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, this.addStandardInfo(stack, player, list, ext); } + @Override + public int transformMeta(int meta, int coordBaseMode) { + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); + } + @Override public void printHook(Pre event, World world, int x, int y, int z) { @@ -178,5 +184,6 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, if((PREFIX_VALUE + "deltasecond").equals(name)) return "" + deltaLastSecond; return null; } + } } diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java index 5e9e0b483..8c427a370 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java @@ -13,6 +13,7 @@ import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import com.hbm.util.i18n.I18nUtil; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -37,7 +38,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, ILookOverlay, ITooltipProvider { +public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, INBTBlockTransformable, ILookOverlay, ITooltipProvider { @SideOnly(Side.CLIENT) protected IIcon overlay; @SideOnly(Side.CLIENT) protected IIcon overlayGauge; @@ -108,6 +109,11 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL return IBlockMultiPass.getRenderType(); } + @Override + public int transformMeta(int meta, int coordBaseMode) { + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); + } + @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) public static class TileEntityPipeGauge extends TileEntityPipeBaseNT implements SimpleComponent, CompatHandler.OCComponent, IRORValueProvider { diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 3e16f4011..a5f70b5cb 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -83,6 +83,8 @@ public class StructureManager { public static final NBTStructure plane1 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_1.nbt")); public static final NBTStructure plane2 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_2.nbt")); + public static final NBTStructure factory = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/factory.nbt")); + public static final NBTStructure spire = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/spire.nbt")); // public static final NBTStructure test_rot = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-rot.nbt")); diff --git a/src/main/java/com/hbm/util/MobUtil.java b/src/main/java/com/hbm/util/MobUtil.java index 8779c1ed2..c9d103684 100644 --- a/src/main/java/com/hbm/util/MobUtil.java +++ b/src/main/java/com/hbm/util/MobUtil.java @@ -23,6 +23,14 @@ public class MobUtil { /**Unlike the above two, the Double is interpreted as minimum soot level, instead of armor slot **/ public static HashMap> slotPoolGuns = new HashMap<>(); + //slop pools + public static Map> slotPoolGunsTier1 = new HashMap<>(); + public static Map> slotPoolGunsTier2 = new HashMap<>(); + public static Map> slotPoolGunsTier3 = new HashMap<>(); + public static Map> slotPoolMasks = new HashMap<>(); + public static Map> slotPoolHelms = new HashMap<>(); + public static Map> slotPoolTierArmor = new HashMap<>(); + public static Map> slotPoolMelee = new HashMap<>(); public static void intializeMobPools(){ slotPoolCommon.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth @@ -111,6 +119,72 @@ public class MobUtil { {ModItems.wrench, 20} })); + //For action block + slotPoolGunsTier1.put(0, createSlotPool(0, new Object[][]{ + {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2} + })); + + slotPoolGunsTier2.put(0, createSlotPool(0, new Object[][]{ + {ModItems.gun_uzi, 10}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 4}, {ModItems.gun_flaregun, 4}, {ModItems.gun_carbine, 4} + })); + + slotPoolGunsTier3.put(0, createSlotPool(0, new Object[][]{ + {ModItems.gun_uzi, 25}, {ModItems.gun_spas12, 20}, {ModItems.gun_carbine, 20}, {ModItems.gun_g3, 10}, {ModItems.gun_am180, 5}, {ModItems.gun_stg77, 5} + })); + + slotPoolMasks.put(4, createSlotPool(0, new Object[][]{ + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.rag_piss, 4}, {ModItems.goggles, 12} + })); + + slotPoolHelms.put(4, createSlotPool(0, new Object[][]{ + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.cobalt_helmet, 2}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + + slotPoolTierArmor.put(4, createSlotPool(new Object[][]{ + {ModItems.gas_mask_m65, 20}, + {ModItems.gas_mask_olde, 15}, + {ModItems.steel_helmet, 25}, + {ModItems.titanium_helmet, 15}, + {ModItems.alloy_helmet, 10}, + })); + + slotPoolTierArmor.put(3, createSlotPool(new Object[][]{ + {ModItems.steel_plate, 30}, + {ModItems.titanium_plate, 20}, + {ModItems.alloy_plate, 15}, + {ModItems.cobalt_plate, 5}, + {ModItems.starmetal_plate, 5} + })); + + slotPoolTierArmor.put(2, createSlotPool(new Object[][]{ + {ModItems.steel_legs, 30}, + {ModItems.titanium_legs, 20}, + {ModItems.alloy_legs, 15}, + {ModItems.cobalt_legs, 5}, + {ModItems.zirconium_legs, 5} + })); + + slotPoolTierArmor.put(1, createSlotPool(new Object[][]{ + {ModItems.steel_boots, 30}, + {ModItems.robes_boots, 25}, + {ModItems.titanium_boots, 20}, + {ModItems.alloy_boots, 15}, + {ModItems.hazmat_boots, 10}, + {ModItems.cobalt_boots, 5}, + })); + + slotPoolMelee.put(0, createSlotPool(2000, new Object[][]{ + {ModItems.pipe_lead, 40}, {ModItems.crowbar, 35}, {ModItems.wrench, 30}, + {ModItems.steel_sword, 25}, {ModItems.titanium_sword, 20}, + {ModItems.reer_graar, 20}, {ModItems.stopsign, 15}, + {ModItems.lead_gavel, 12}, {ModItems.wrench_flipped, 10}, + {ModItems.sopsign, 8}, {ModItems.chernobylsign, 8} + })); + slotPoolAdvRanged = new HashMap<>(slotPoolAdv); slotPoolAdvRanged.remove(0); diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index 742cc3e4c..4e61206ff 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -128,7 +128,7 @@ public class NTMWorldGenerator implements IWorldGenerator { structure = new JigsawPiece("crashed_plane_2", StructureManager.plane2, -8); spawnWeight = 50; }}); - + NBTStructure.registerStructure(0, new SpawnCondition("desert_shack_1") {{ canSpawn = biome -> biome == BiomeGenBase.desert; structure = new JigsawPiece("desert_shack_1", StructureManager.desert_shack_1, -7); @@ -188,22 +188,22 @@ public class NTMWorldGenerator implements IWorldGenerator { NBTStructure.registerStructure(0, new SpawnCondition("ruin6") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsF", StructureManager.ntmruinsF, -1) {{conformToTerrain = true;}}; - spawnWeight = 50; + spawnWeight = 35; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruin7") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsG", StructureManager.ntmruinsG, -1) {{conformToTerrain = true;}}; - spawnWeight = 50; + spawnWeight = 35; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruin8") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsH", StructureManager.ntmruinsH, -1) {{conformToTerrain = true;}}; - spawnWeight = 50; + spawnWeight = 35; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruin9") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsI", StructureManager.ntmruinsI, -1) {{conformToTerrain = true;}}; - spawnWeight = 50; + spawnWeight = 35; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruin10") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); @@ -215,6 +215,11 @@ public class NTMWorldGenerator implements IWorldGenerator { structure = new JigsawPiece("radio_house", StructureManager.radio_house, -6); spawnWeight = 30; }}); + NBTStructure.registerStructure(0, new SpawnCondition("factory") {{ + canSpawn = flatbiomes::contains; + structure = new JigsawPiece("factory", StructureManager.factory, -6); + spawnWeight = 30; + }}); NBTStructure.registerNullWeight(0, 2, biome -> biome == BiomeGenBase.plains); NBTStructure.registerNullWeight(0, 4, oceanBiomes::contains); diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index af2c41356..7e5b8df3e 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -18,6 +18,7 @@ import com.hbm.world.WorldUtil; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; @@ -111,8 +112,8 @@ public class LogicBlockActions { } } } - world.setBlock(x, y, z, ModBlocks.block_steel); - + world.setBlock(x, y, z, Blocks.air); +// world.setBlock(x, y, z, ModBlocks.block_steel); this is useless }; public static Consumer FODDER_WAVE = (tile) -> { @@ -134,6 +135,89 @@ public class LogicBlockActions { } }; + public static Consumer SKELETON_GUN_TIER_1 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(0, 0, 0); + EntitySkeleton mob = new EntitySkeleton(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier1, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolRanged, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } + }; + + public static Consumer SKELETON_GUN_TIER_2 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(0, 0, 0); + EntitySkeleton mob = new EntitySkeleton(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier2, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } + }; + + public static Consumer SKELETON_GUN_TIER_3 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(0, 0, 0); + EntitySkeleton mob = new EntitySkeleton(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier3, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdvRanged, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } + }; + + public static Consumer ZOMBIE_TIER_1 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(0, 0, 0); + EntityZombie mob = new EntityZombie(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } + }; + + public static Consumer ZOMBIE_TIER_2 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(0, 0, 0); + EntityZombie mob = new EntityZombie(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } + }; + public static Consumer PUZZLE_TEST = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; @@ -261,8 +345,14 @@ public class LogicBlockActions { actions.put("PUZZLE_TEST", PUZZLE_TEST); actions.put("MISSILE_STRIKE", MISSILE_STRIKE); actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); + + //Mob Block Actions + actions.put("SKELETON_GUN_TIER_1", SKELETON_GUN_TIER_1); + actions.put("SKELETON_GUN_TIER_2", SKELETON_GUN_TIER_2); + actions.put("SKELETON_GUN_TIER_3", SKELETON_GUN_TIER_3); + + actions.put("ZOMBIE_TIER_1", ZOMBIE_TIER_1); + actions.put("ZOMBIE_TIER_2", ZOMBIE_TIER_2); } - - } diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java index b51b96c23..f3eec59bb 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java @@ -51,6 +51,14 @@ public class LogicBlockConditions { return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(5, 5, 5)).isEmpty(); }; + public static Function PLAYER_CUBE_25 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(25, 25, 25)).isEmpty(); + }; + public static Function REDSTONE = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; @@ -90,6 +98,7 @@ public class LogicBlockConditions { conditions.put("EMPTY", EMPTY); conditions.put("ABERRATOR", ABERRATOR); conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); + conditions.put("PLAYER_CUBE_25", PLAYER_CUBE_25); conditions.put("REDSTONE", REDSTONE); conditions.put("PUZZLE_TEST", PUZZLE_TEST); } diff --git a/src/main/resources/assets/hbm/structures/factory.nbt b/src/main/resources/assets/hbm/structures/factory.nbt new file mode 100644 index 0000000000000000000000000000000000000000..792df3c1ec2056303410f547d16d841a4725d458 GIT binary patch literal 30140 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 b{@-_M|6R}LHu4QNxBct1Zmdzyu5JGVh`@6D literal 0 HcmV?d00001 From d6a10bf49a7da1e63c28e9a3c7a4e7c45f4ea7f3 Mon Sep 17 00:00:00 2001 From: Lazzzycatwastaken Date: Thu, 18 Sep 2025 16:26:48 +0200 Subject: [PATCH 22/26] removed the parasite (title screen) --- src/main/java/com/hbm/config/WorldConfig.java | 6 +- src/main/java/com/hbm/lib/HbmWorldGen.java | 14 +- .../java/com/hbm/world/dungeon/Factory.java | 3144 ----------------- 3 files changed, 10 insertions(+), 3154 deletions(-) delete mode 100644 src/main/java/com/hbm/world/dungeon/Factory.java diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index f6faf2856..da56e3281 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -87,7 +87,7 @@ public class WorldConfig { public static int dungeonStructure = 64; public static int relayStructure = 500; public static int satelliteStructure = 500; - public static int factoryStructure = 1000; +// public static int factoryStructure = 1000; public static int dudStructure = 500; public static int spaceshipStructure = 1000; public static int barrelStructure = 5000; @@ -210,7 +210,7 @@ public class WorldConfig { dungeonStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.04_dungeonSpawn", "Spawn library dungeon on every nTH chunk", 64); relayStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.05_relaySpawn", "Spawn relay on every nTH chunk", 500); satelliteStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.06_satelliteSpawn", "Spawn satellite dish on every nTH chunk", 500); - factoryStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.09_factorySpawn", "Spawn factory on every nTH chunk", 1000); +// factoryStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.09_factorySpawn", "Spawn factory on every nTH chunk", 1000); dudStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.10_dudSpawn", "Spawn dud on every nTH chunk", 500); spaceshipStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.11_spaceshipSpawn", "Spawn spaceship on every nTH chunk", 1000); barrelStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.12_barrelSpawn", "Spawn waste tank on every nTH chunk", 5000); @@ -251,7 +251,7 @@ public class WorldConfig { dungeonStructure = CommonConfig.setDefZero(dungeonStructure, 1000); relayStructure = CommonConfig.setDefZero(relayStructure, 1000); satelliteStructure = CommonConfig.setDefZero(satelliteStructure, 1000); - factoryStructure = CommonConfig.setDefZero(factoryStructure, 1000); +// factoryStructure = CommonConfig.setDefZero(factoryStructure, 1000); dudStructure = CommonConfig.setDefZero(dudStructure, 1000); spaceshipStructure = CommonConfig.setDefZero(spaceshipStructure, 1000); barrelStructure = CommonConfig.setDefZero(barrelStructure, 1000); diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 25d85495b..813740352 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -290,13 +290,13 @@ public class HbmWorldGen implements IWorldGenerator { } } - if(WorldConfig.factoryStructure > 0 && rand.nextInt(WorldConfig.factoryStructure) == 0) { - int x = i + rand.nextInt(16); - int z = j + rand.nextInt(16); - int y = world.getHeightValue(x, z); - - new Factory().generate(world, rand, x, y, z); - } +// if(WorldConfig.factoryStructure > 0 && rand.nextInt(WorldConfig.factoryStructure) == 0) { +// int x = i + rand.nextInt(16); +// int z = j + rand.nextInt(16); +// int y = world.getHeightValue(x, z); +// +// new Factory().generate(world, rand, x, y, z); +// } if(WorldConfig.dudStructure > 0 && rand.nextInt(WorldConfig.dudStructure) == 0) { int x = i + 8 + rand.nextInt(16); diff --git a/src/main/java/com/hbm/world/dungeon/Factory.java b/src/main/java/com/hbm/world/dungeon/Factory.java deleted file mode 100644 index 2d3ce64a9..000000000 --- a/src/main/java/com/hbm/world/dungeon/Factory.java +++ /dev/null @@ -1,3144 +0,0 @@ -//Schematic to java Structure by jajo_11 | inspired by "MITHION'S .SCHEMATIC TO JAVA CONVERTINGTOOL" - -package com.hbm.world.dungeon; - -import java.util.Random; - -import com.hbm.blocks.ModBlocks; -import com.hbm.config.GeneralConfig; -import com.hbm.itempool.ItemPool; -import com.hbm.itempool.ItemPoolsLegacy; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntityChest; -import net.minecraft.util.WeightedRandomChestContent; -import net.minecraft.world.World; -import net.minecraft.world.gen.feature.WorldGenerator; - -public class Factory extends WorldGenerator -{ - Block Block1 = ModBlocks.steel_scaffold; - Block Block2 = ModBlocks.red_barrel; - Block Block4 = ModBlocks.steel_wall; - Block Block5 = ModBlocks.reinforced_light; - - int s4 = 8; - - protected Block[] GetValidSpawnBlocks() - { - return new Block[] - { - Blocks.grass, - Blocks.dirt, - Blocks.stone, - Blocks.sand, - Blocks.sandstone, - }; - } - - public boolean LocationIsValidSpawn(World world, int x, int y, int z) - { - - Block checkBlock = world.getBlock(x, y - 1, z); - Block blockAbove = world.getBlock(x, y , z); - Block blockBelow = world.getBlock(x, y - 2, z); - - for (Block i : GetValidSpawnBlocks()) - { - if (blockAbove != Blocks.air) - { - return false; - } - if (checkBlock == i) - { - return true; - } - else if (checkBlock == Blocks.snow_layer && blockBelow == i) - { - return true; - } - else if (checkBlock.getMaterial() == Material.plants && blockBelow == i) - { - return true; - } - } - return false; - } - - @Override - public boolean generate(World world, Random rand, int x, int y, int z) - { - int i = rand.nextInt(1); - - if(i == 0) - { - generate_r0(world, rand, x, y, z); - } - - return true; - - } - - public boolean generate_r0(World world, Random rand, int x, int y, int z) - { - if(!LocationIsValidSpawn(world, x + 7, y, z + 15)) - { - return false; - } - - for(int i = 0; i < 15; i++) - { - for(int j = 0; j < 5; j++) - { - for(int k = 0; k < 29; k++) - { - world.setBlock(x + i, y + j, z + k, Blocks.air, 0, 3); - } - } - } - - for(int i = 0; i < 15; i++) - { - for(int j = 0; j < 5; j++) - { - for(int k = 0; k < 29; k++) - { - world.setBlock(x + i, y + j - 6, z + k, Blocks.cobblestone, 0, 3); - } - } - } - - world.setBlock(x + 0, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 8, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 10, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 11, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 12, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + -1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 1, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 1, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 1, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 2, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 2, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 2, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 3, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 3, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 3, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 4, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 4, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 4, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 5, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 5, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 5, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 6, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 6, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 6, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 7, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 7, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 7, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 8, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 8, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 8, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 9, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 9, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 9, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 10, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 10, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 10, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 11, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 11, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 11, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 12, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 12, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 12, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 13, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 13, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 13, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 14, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 14, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 14, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 15, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 15, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 15, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 16, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 16, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 16, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 17, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 17, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 17, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 18, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 18, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 18, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 19, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 19, Blocks.stonebrick, 3, 3); - world.setBlock(x + 4, y + -1, z + 19, Blocks.stonebrick, 3, 3); - world.setBlock(x + 5, y + -1, z + 19, Blocks.stonebrick, 3, 3); - world.setBlock(x + 6, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 19, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 19, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 20, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 20, Blocks.stonebrick, 3, 3); - world.setBlock(x + 4, y + -1, z + 20, Blocks.stonebrick, 3, 3); - world.setBlock(x + 5, y + -1, z + 20, Blocks.stonebrick, 3, 3); - world.setBlock(x + 6, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 20, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 20, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 21, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 21, Blocks.stonebrick, 3, 3); - world.setBlock(x + 4, y + -1, z + 21, Blocks.stonebrick, 3, 3); - world.setBlock(x + 5, y + -1, z + 21, Blocks.stonebrick, 3, 3); - world.setBlock(x + 6, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 21, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 21, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 22, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 22, Blocks.monster_egg, 5, 3); - world.setBlock(x + 4, y + -1, z + 22, Blocks.stonebrick, 3, 3); - world.setBlock(x + 5, y + -1, z + 22, Blocks.stonebrick, 3, 3); - world.setBlock(x + 6, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 22, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 22, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 23, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 15, y + -1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 24, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 15, y + -1, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 16, y + -1, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 25, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 15, y + -1, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 16, y + -1, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 26, Blocks.monster_egg, 1, 3); - world.setBlock(x + 7, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 26, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 15, y + -1, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 16, y + -1, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 27, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 15, y + -1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 16, y + -1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 2, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 3, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 4, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 5, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 6, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 7, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 8, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 9, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 10, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 11, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 12, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 13, y + -1, z + 28, Blocks.cobblestone, 0, 3); - world.setBlock(x + 14, y + -1, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 15, y + -1, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 8, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 10, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 11, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 12, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + -1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 8, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 10, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 11, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 12, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 1, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 1, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 2, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 2, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 3, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + 0, z + 3, Blocks.crafting_table, 0, 3); - world.setBlock(x + 13, y + 0, z + 3, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 3, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 4, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 4, ModBlocks.deco_lead, 5, 3); - world.setBlock(x + 6, y + 0, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 9, y + 0, z + 4, Blocks.chest, 5, 3); - world.setBlockMetadataWithNotify(x + 9, y + 0, z + 4, 5, 3); - if(world.getBlock(x + 9, y + 0, z + 4) == Blocks.chest) - { - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsLegacy.POOL_GENERIC), (TileEntityChest)world.getTileEntity(x + 9, y + 0, z + 4), rand.nextInt(2)+ 8); - } - world.setBlock(x + 13, y + 0, z + 4, Blocks.hopper, 3, 3); - world.setBlock(x + 14, y + 0, z + 4, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 5, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 5, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 0, z + 5, Blocks.chest, 4, 3); - world.setBlock(x + 14, y + 0, z + 5, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 6, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 6, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 0, z + 6, Blocks.hopper, 2, 3); - world.setBlock(x + 14, y + 0, z + 6, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 7, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 0, z + 7, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 7, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 8, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 8, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 9, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + 0, z + 9, Blocks.crafting_table, 0, 3); - world.setBlock(x + 13, y + 0, z + 9, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 9, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 10, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 10, ModBlocks.deco_lead, 5, 3); - world.setBlock(x + 6, y + 0, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 9, y + 0, z + 10, Blocks.chest, 5, 3); - world.setBlockMetadataWithNotify(x + 9, y + 0, z + 10, 5, 3); - if(world.getBlock(x + 9, y + 0, z + 10) == Blocks.chest) - { - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsLegacy.POOL_GENERIC), (TileEntityChest)world.getTileEntity(x + 9, y + 0, z + 10), rand.nextInt(2)+ 8); - } - world.setBlock(x + 13, y + 0, z + 10, Blocks.hopper, 3, 3); - world.setBlock(x + 14, y + 0, z + 10, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 11, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 11, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 0, z + 11, Blocks.chest, 4, 3); - world.setBlock(x + 14, y + 0, z + 11, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 12, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 12, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 0, z + 12, Blocks.hopper, 2, 3); - world.setBlock(x + 14, y + 0, z + 12, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 13, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 0, z + 13, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 13, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 14, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 14, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 15, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + 0, z + 15, Blocks.crafting_table, 0, 3); - world.setBlock(x + 13, y + 0, z + 15, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 15, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 16, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 16, ModBlocks.deco_lead, 5, 3); - world.setBlock(x + 6, y + 0, z + 16, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 16, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 16, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 9, y + 0, z + 16, Blocks.chest, 5, 3); - world.setBlockMetadataWithNotify(x + 9, y + 0, z + 16, 5, 3); - if(world.getBlock(x + 9, y + 0, z + 16) == Blocks.chest) - { - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsLegacy.POOL_GENERIC), (TileEntityChest)world.getTileEntity(x + 9, y + 0, z + 16), rand.nextInt(2)+ 8); - } - world.setBlock(x + 13, y + 0, z + 16, Blocks.hopper, 3, 3); - world.setBlock(x + 14, y + 0, z + 16, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 17, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 17, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 17, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 17, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 17, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 0, z + 17, Blocks.chest, 4, 3); - world.setBlock(x + 14, y + 0, z + 17, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 18, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 18, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 18, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 0, z + 18, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 0, z + 18, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 0, z + 18, Blocks.hopper, 2, 3); - world.setBlock(x + 14, y + 0, z + 18, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 19, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 19, Blocks.stone_brick_stairs, 0, 3); - world.setBlock(x + 4, y + 0, z + 19, Blocks.stone_brick_stairs, 2, 3); - world.setBlock(x + 5, y + 0, z + 19, Blocks.stone_brick_stairs, 1, 3); - world.setBlock(x + 13, y + 0, z + 19, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 19, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 20, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 20, Blocks.stone_brick_stairs, 0, 3); - world.setBlock(x + 4, y + 0, z + 20, Blocks.iron_block, 0, 3); - world.setBlock(x + 5, y + 0, z + 20, Blocks.stone_brick_stairs, 1, 3); - world.setBlock(x + 7, y + 0, z + 20, ModBlocks.anvil_iron, 4, 3); - world.setBlock(x + 14, y + 0, z + 20, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 21, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 21, Blocks.stone_brick_stairs, 0, 3); - world.setBlock(x + 4, y + 0, z + 21, Blocks.iron_block, 0, 3); - world.setBlock(x + 5, y + 0, z + 21, Blocks.stone_brick_stairs, 1, 3); - world.setBlock(x + 7, y + 0, z + 21, ModBlocks.anvil_iron, 4, 3); - world.setBlock(x + 14, y + 0, z + 21, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 22, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 22, Blocks.stone_brick_stairs, 0, 3); - world.setBlock(x + 4, y + 0, z + 22, Blocks.lava, 2, 3); - world.setBlock(x + 5, y + 0, z + 22, Blocks.stone_brick_stairs, 1, 3); - world.setBlock(x + 14, y + 0, z + 22, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 0, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 0, z + 23, Blocks.lava, 10, 3); - world.setBlock(x + 5, y + 0, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 0, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 24, Blocks.lava, 0, 3); - world.setBlock(x + 4, y + 0, z + 24, Blocks.lava, 0, 3); - world.setBlock(x + 5, y + 0, z + 24, Blocks.lava, 0, 3); - world.setBlock(x + 6, y + 0, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + 0, z + 24, Blocks.stone_brick_stairs, 6, 3); - world.setBlock(x + 14, y + 0, z + 24, Block1, s4, 3); - world.setBlock(x + 0, y + 0, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 0, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 25, Blocks.lava, 0, 3); - world.setBlock(x + 4, y + 0, z + 25, Blocks.chest, 3, 3); - world.setBlockMetadataWithNotify(x + 4, y + 0, z + 25, 3, 3); - if(world.getBlock(x + 4, y + 0, z + 25) == Blocks.chest) - { - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsLegacy.POOL_EXPENSIVE), (TileEntityChest)world.getTileEntity(x + 4, y + 0, z + 25), rand.nextInt(2)+ 6); - } - world.setBlock(x + 5, y + 0, z + 25, Blocks.lava, 0, 3); - world.setBlock(x + 6, y + 0, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + 0, z + 25, Blocks.stone_brick_stairs, 5, 3); - world.setBlock(x + 14, y + 0, z + 25, Block1, s4, 3); - world.setBlock(x + 0, y + 0, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 0, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 26, Blocks.lava, 0, 3); - world.setBlock(x + 4, y + 0, z + 26, Blocks.lava, 0, 3); - world.setBlock(x + 5, y + 0, z + 26, Blocks.lava, 0, 3); - world.setBlock(x + 6, y + 0, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + 0, z + 26, Blocks.stone_brick_stairs, 7, 3); - world.setBlock(x + 14, y + 0, z + 26, Block1, s4, 3); - world.setBlock(x + 0, y + 0, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 0, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 0, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + 0, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 27, Block1, s4, 3); - world.setBlock(x + 0, y + 0, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 8, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 10, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 11, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 12, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 0, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 8, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 10, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 11, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 12, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 0, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 1, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 1, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 2, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 2, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 3, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 3, Blocks.stone_brick_stairs, 2, 3); - world.setBlock(x + 14, y + 1, z + 3, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 4, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 4, ModBlocks.deco_lead, 5, 3); - world.setBlock(x + 6, y + 1, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 1, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 4, ModBlocks.machine_electric_furnace_off, 4, 3); - world.setBlock(x + 14, y + 1, z + 4, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 5, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 5, Block2, 5, 3); - world.setBlock(x + 6, y + 1, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 1, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 5, Blocks.stone_brick_stairs, 4, 3); - world.setBlock(x + 14, y + 1, z + 5, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 6, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 6, Block2, 5, 3); - world.setBlock(x + 6, y + 1, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 6, ModBlocks.deco_steel, 3, 3); - world.setBlock(x + 8, y + 1, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 6, ModBlocks.machine_electric_furnace_off, 4, 3); - world.setBlock(x + 14, y + 1, z + 6, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 7, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 7, Blocks.stone_brick_stairs, 3, 3); - world.setBlock(x + 14, y + 1, z + 7, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 8, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 8, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 9, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 9, Blocks.stone_brick_stairs, 2, 3); - world.setBlock(x + 14, y + 1, z + 9, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 10, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 10, ModBlocks.deco_lead, 5, 3); - world.setBlock(x + 6, y + 1, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 1, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 10, ModBlocks.machine_electric_furnace_off, 4, 3); - world.setBlock(x + 14, y + 1, z + 10, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 11, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 11, Block2, 5, 3); - world.setBlock(x + 6, y + 1, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 1, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 11, Blocks.stone_brick_stairs, 4, 3); - world.setBlock(x + 14, y + 1, z + 11, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 12, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 12, Block2, 5, 3); - world.setBlock(x + 6, y + 1, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 12, ModBlocks.deco_steel, 3, 3); - world.setBlock(x + 8, y + 1, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 12, ModBlocks.machine_electric_furnace_off, 4, 3); - world.setBlock(x + 14, y + 1, z + 12, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 13, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 13, Blocks.stone_brick_stairs, 3, 3); - world.setBlock(x + 14, y + 1, z + 13, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 14, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 14, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 15, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 15, Blocks.stone_brick_stairs, 2, 3); - world.setBlock(x + 14, y + 1, z + 15, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 16, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 16, ModBlocks.deco_lead, 5, 3); - world.setBlock(x + 6, y + 1, z + 16, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 16, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 16, ModBlocks.machine_electric_furnace_off, 4, 3); - world.setBlock(x + 14, y + 1, z + 16, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 17, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 17, Block2, 5, 3); - world.setBlock(x + 6, y + 1, z + 17, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 17, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 1, z + 17, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 17, Blocks.stone_brick_stairs, 4, 3); - world.setBlock(x + 14, y + 1, z + 17, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 18, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 18, Block2, 5, 3); - world.setBlock(x + 6, y + 1, z + 18, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 1, z + 18, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 13, y + 1, z + 18, ModBlocks.machine_electric_furnace_off, 4, 3); - world.setBlock(x + 14, y + 1, z + 18, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 19, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 19, Blocks.stone_brick_stairs, 3, 3); - world.setBlock(x + 14, y + 1, z + 19, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 20, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 20, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 21, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 21, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 22, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 22, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 1, z + 23, Blocks.lava, 2, 3); - world.setBlock(x + 5, y + 1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 1, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 1, z + 24, Blocks.lava, 0, 3); - world.setBlock(x + 4, y + 1, z + 24, Blocks.lava, 0, 3); - world.setBlock(x + 5, y + 1, z + 24, Blocks.lava, 0, 3); - world.setBlock(x + 6, y + 1, z + 24, Blocks.lit_furnace, 5, 3); - world.setBlock(x + 7, y + 1, z + 24, Blocks.heavy_weighted_pressure_plate, 0, 3); - world.setBlock(x + 14, y + 1, z + 24, Block1, s4, 3); - world.setBlock(x + 0, y + 1, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 1, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 1, z + 25, Blocks.lava, 0, 3); - world.setBlock(x + 4, y + 1, z + 25, Blocks.lava, 0, 3); - world.setBlock(x + 5, y + 1, z + 25, Blocks.lava, 0, 3); - world.setBlock(x + 6, y + 1, z + 25, Blocks.lit_furnace, 5, 3); - world.setBlock(x + 7, y + 1, z + 25, Blocks.heavy_weighted_pressure_plate, 0, 3); - world.setBlock(x + 14, y + 1, z + 25, Block1, s4, 3); - world.setBlock(x + 0, y + 1, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 1, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 1, z + 26, Blocks.lava, 0, 3); - world.setBlock(x + 4, y + 1, z + 26, Blocks.lava, 0, 3); - world.setBlock(x + 5, y + 1, z + 26, Blocks.lava, 0, 3); - world.setBlock(x + 6, y + 1, z + 26, Blocks.lit_furnace, 5, 3); - world.setBlock(x + 7, y + 1, z + 26, Blocks.heavy_weighted_pressure_plate, 0, 3); - world.setBlock(x + 14, y + 1, z + 26, Block1, s4, 3); - world.setBlock(x + 0, y + 1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + 1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 1, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 27, Block1, s4, 3); - world.setBlock(x + 0, y + 1, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 1, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 2, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 3, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 4, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 5, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 6, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 7, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 8, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 9, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 10, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 11, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 12, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 13, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 1, z + 29, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 2, z + 0, Blocks.glass, 0, 3); - world.setBlock(x + 4, y + 2, z + 0, Blocks.glass, 0, 3); - world.setBlock(x + 5, y + 2, z + 0, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 2, z + 0, Blocks.glass, 0, 3); - world.setBlock(x + 10, y + 2, z + 0, Blocks.glass, 0, 3); - world.setBlock(x + 11, y + 2, z + 0, Blocks.glass, 0, 3); - world.setBlock(x + 12, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 1, Blocks.iron_bars, 0, 3); - world.setBlock(x + 8, y + 2, z + 1, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 2, Blocks.iron_bars, 0, 3); - world.setBlock(x + 8, y + 2, z + 2, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 3, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 3, Blocks.iron_bars, 0, 3); - world.setBlock(x + 8, y + 2, z + 3, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 3, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 4, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 2, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 2, z + 4, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 14, y + 2, z + 4, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 5, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 2, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 2, z + 5, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 14, y + 2, z + 5, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 2, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 2, z + 6, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 14, y + 2, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 7, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 7, Blocks.iron_bars, 0, 3); - world.setBlock(x + 8, y + 2, z + 7, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 7, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 8, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 8, Blocks.iron_bars, 0, 3); - world.setBlock(x + 8, y + 2, z + 8, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 8, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 9, Blocks.iron_bars, 0, 3); - world.setBlock(x + 8, y + 2, z + 9, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 10, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 2, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 2, z + 10, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 14, y + 2, z + 10, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 11, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 2, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 2, z + 11, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 14, y + 2, z + 11, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 12, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 7, y + 2, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 8, y + 2, z + 12, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 14, y + 2, z + 12, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 13, Blocks.iron_bars, 0, 3); - world.setBlock(x + 8, y + 2, z + 13, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 14, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 15, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 15, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 15, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 16, Blocks.glass, 0, 3); - world.setBlock(x + 6, y + 2, z + 16, ModBlocks.deco_steel, 0, 3); - world.setBlock(x + 14, y + 2, z + 16, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 19, Blocks.glass, 0, 3); - world.setBlock(x + 14, y + 2, z + 19, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 20, Blocks.glass, 0, 3); - world.setBlock(x + 14, y + 2, z + 20, Blocks.glass, 0, 3); - world.setBlock(x + 0, y + 2, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 2, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 2, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 2, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 2, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 2, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 5, y + 2, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 6, y + 2, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 2, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 2, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 2, z + 24, Block1, s4, 3); - world.setBlock(x + 0, y + 2, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 2, z + 25, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 2, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 25, Blocks.lit_furnace, 5, 3); - world.setBlock(x + 14, y + 2, z + 25, Block1, s4, 3); - world.setBlock(x + 0, y + 2, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 2, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 14, y + 2, z + 26, Block1, s4, 3); - world.setBlock(x + 0, y + 2, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 2, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 2, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 2, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 2, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 2, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 27, Block1, s4, 3); - world.setBlock(x + 0, y + 2, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 2, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 2, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 6, y + 2, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 14, y + 2, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 2, z + 29, Blocks.glass, 0, 3); - world.setBlock(x + 10, y + 2, z + 29, Blocks.glass, 0, 3); - world.setBlock(x + 11, y + 2, z + 29, Blocks.glass, 0, 3); - world.setBlock(x + 12, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 2, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 0, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 5, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 5, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 10, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 10, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 15, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 15, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 20, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 20, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 3, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 3, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 3, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 3, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 5, y + 3, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 3, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 23, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 3, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 3, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 3, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 24, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 3, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 3, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 3, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 25, Block1, s4, 3); - world.setBlock(x + 0, y + 3, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 3, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 3, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 26, Block1, s4, 3); - world.setBlock(x + 0, y + 3, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 3, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 3, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 3, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 3, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 3, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 3, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 28, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 3, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 2, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 3, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 4, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 5, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 6, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 7, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 8, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 9, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 10, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 11, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 12, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 13, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 14, y + 4, z + 0, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 1, Blocks.stonebrick, 3, 3); - world.setBlock(x + 14, y + 4, z + 1, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 2, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 2, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 2, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 2, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 2, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 2, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 2, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 2, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 2, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 2, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 2, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 3, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 3, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 3, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 3, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 3, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 3, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 3, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 3, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 3, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 3, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 3, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 4, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 4, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 4, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 4, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 4, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 4, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 4, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 4, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 4, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 4, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 4, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 5, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 5, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 5, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 5, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 5, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 5, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 5, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 5, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 5, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 5, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 5, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 6, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 6, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 6, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 6, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 6, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 6, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 6, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 6, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 6, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 6, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 6, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 7, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 7, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 7, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 7, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 7, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 7, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 7, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 7, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 7, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 7, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 7, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 8, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 8, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 8, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 8, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 8, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 8, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 8, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 8, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 8, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 8, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 8, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 9, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 9, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 9, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 9, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 9, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 9, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 9, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 9, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 9, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 9, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 9, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 10, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 10, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 10, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 10, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 10, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 10, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 10, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 10, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 10, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 10, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 10, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 11, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 11, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 11, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 11, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 11, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 11, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 11, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 11, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 11, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 11, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 11, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 12, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 12, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 12, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 12, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 12, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 12, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 12, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 12, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 12, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 12, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 12, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 13, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 13, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 13, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 13, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 13, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 13, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 13, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 13, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 13, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 13, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 13, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 14, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 14, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 14, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 14, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 14, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 14, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 14, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 14, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 14, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 14, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 14, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 15, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 15, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 15, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 15, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 15, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 15, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 15, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 15, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 15, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 15, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 15, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 16, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 16, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 16, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 16, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 16, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 16, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 16, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 16, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 16, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 16, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 16, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 17, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 17, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 17, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 17, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 17, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 17, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 17, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 17, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 17, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 17, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 17, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 18, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 18, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 18, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 18, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 18, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 18, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 18, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 18, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 18, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 18, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 18, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 19, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 19, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 19, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 19, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 19, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 19, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 19, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 19, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 19, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 19, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 19, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 20, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 20, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 20, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 20, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 20, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 20, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 20, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 20, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 20, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 20, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 20, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 21, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 21, Block4, 4, 3); - world.setBlock(x + 2, y + 4, z + 21, Block5, 0, 3); - world.setBlock(x + 3, y + 4, z + 21, Block4, 5, 3); - world.setBlock(x + 6, y + 4, z + 21, Block4, 4, 3); - world.setBlock(x + 7, y + 4, z + 21, Block5, 0, 3); - world.setBlock(x + 8, y + 4, z + 21, Block4, 5, 3); - world.setBlock(x + 10, y + 4, z + 21, Block4, 4, 3); - world.setBlock(x + 11, y + 4, z + 21, Block5, 0, 3); - world.setBlock(x + 12, y + 4, z + 21, Block4, 5, 3); - world.setBlock(x + 14, y + 4, z + 21, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 22, Blocks.stonebrick, 3, 3); - world.setBlock(x + 14, y + 4, z + 22, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 23, Blocks.stonebrick, 3, 3); - world.setBlock(x + 2, y + 4, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 4, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 4, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 4, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 4, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 4, z + 23, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 24, Blocks.stonebrick, 3, 3); - world.setBlock(x + 2, y + 4, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 4, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 4, z + 24, Blocks.monster_egg, 2, 3); - world.setBlock(x + 0, y + 4, z + 25, Blocks.stonebrick, 3, 3); - world.setBlock(x + 2, y + 4, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 4, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 4, z + 25, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 4, z + 26, Blocks.stonebrick, 3, 3); - world.setBlock(x + 2, y + 4, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 4, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 4, z + 26, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 4, z + 27, Blocks.stonebrick, 3, 3); - world.setBlock(x + 2, y + 4, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 4, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 4, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 4, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 4, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 4, z + 27, Blocks.stonebrick, 0, 3); - world.setBlock(x + 0, y + 4, z + 28, Blocks.stonebrick, 3, 3); - world.setBlock(x + 14, y + 4, z + 28, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 1, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 2, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 3, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 4, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 5, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 6, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 7, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 8, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 9, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 10, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 11, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 12, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 13, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 14, y + 4, z + 29, Blocks.stonebrick, 3, 3); - world.setBlock(x + 0, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 5, z + 0, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 1, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 5, z + 5, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 6, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 5, z + 10, Blocks.brick_stairs, 2, 3); - - generate_r02(world, rand, x, y, z); - return true; - - } - public boolean generate_r02(World world, Random rand, int x, int y, int z) - { - - world.setBlock(x + 0, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 5, z + 15, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 16, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 5, z + 20, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 21, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 5, z + 29, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 6, z + 1, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 2, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 6, z + 6, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 7, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 6, z + 11, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 12, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 6, z + 16, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 17, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 6, z + 21, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 22, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 6, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 6, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 6, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 6, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 12, y + 6, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 13, y + 6, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 0, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 7, z + 2, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 3, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 7, z + 7, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 8, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 7, z + 12, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 13, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 7, z + 17, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 18, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 7, z + 22, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 7, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 7, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 7, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 7, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 12, y + 7, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 13, y + 7, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 0, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 8, z + 3, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 8, z + 4, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 8, z + 8, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 8, z + 9, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 8, z + 13, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 8, z + 14, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 8, z + 18, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 8, z + 19, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 8, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 8, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 8, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 8, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 8, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 11, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 12, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 13, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 14, y + 8, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 1, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 8, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 12, y + 8, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 13, y + 8, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 1, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 8, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 9, y + 8, z + 28, Blocks.brick_block, 0, 3); - world.setBlock(x + 10, y + 8, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 12, y + 8, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 13, y + 8, z + 28, Blocks.iron_bars, 0, 3); - world.setBlock(x + 0, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 9, z + 4, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 9, z + 9, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 9, z + 14, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 0, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 3, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 6, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 7, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 9, z + 19, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 9, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 9, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 9, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 9, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 9, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 0, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 1, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 9, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 9, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 8, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 9, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 10, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 11, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 12, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 13, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 14, y + 9, z + 24, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 9, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 9, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 9, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 9, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 9, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 9, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 9, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 9, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 9, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 10, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 10, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 10, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 10, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 10, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 10, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 10, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 10, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 10, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 10, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 10, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 10, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 10, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 10, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 10, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 10, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 11, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 11, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 11, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 11, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 11, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 11, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 11, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 11, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 11, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 11, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 11, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 11, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 11, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 11, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 11, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 11, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 12, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 12, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 12, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 12, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 12, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 12, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 12, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 12, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 12, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 12, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 12, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 12, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 12, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 12, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 12, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 12, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 13, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 13, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 13, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 13, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 13, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 13, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 13, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 13, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 13, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 13, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 13, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 13, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 13, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 13, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 13, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 13, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 14, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 14, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 14, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 14, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 14, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 14, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 14, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 14, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 14, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 14, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 14, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 14, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 14, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 14, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 14, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 14, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 15, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 15, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 15, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 15, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 15, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 15, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 15, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 15, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 15, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 15, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 15, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 15, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 15, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 15, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 15, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 15, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 16, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 16, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 16, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 16, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 16, z + 23, Blocks.iron_bars, 0, 3); - world.setBlock(x + 2, y + 16, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 16, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 16, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 16, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 16, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 16, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 16, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 16, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 16, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 16, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 16, z + 27, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 17, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 17, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 17, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 17, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 17, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 17, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 17, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 17, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 17, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 17, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 17, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 17, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 18, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 18, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 18, z + 23, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 18, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 18, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 18, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 18, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 18, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 18, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 2, y + 18, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 18, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 18, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 18, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 18, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 18, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 18, z + 27, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 19, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 4, y + 19, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 5, y + 19, z + 23, Blocks.brick_stairs, 2, 3); - world.setBlock(x + 2, y + 19, z + 24, Blocks.brick_stairs, 0, 3); - world.setBlock(x + 3, y + 19, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 19, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 19, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 19, z + 24, Blocks.brick_stairs, 1, 3); - world.setBlock(x + 2, y + 19, z + 25, Blocks.brick_stairs, 0, 3); - world.setBlock(x + 3, y + 19, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 19, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 19, z + 25, Blocks.brick_stairs, 1, 3); - world.setBlock(x + 2, y + 19, z + 26, Blocks.brick_stairs, 0, 3); - world.setBlock(x + 3, y + 19, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 19, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 19, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 6, y + 19, z + 26, Blocks.brick_stairs, 1, 3); - world.setBlock(x + 3, y + 19, z + 27, Blocks.brick_stairs, 3, 3); - world.setBlock(x + 4, y + 19, z + 27, Blocks.brick_stairs, 3, 3); - world.setBlock(x + 5, y + 19, z + 27, Blocks.brick_stairs, 3, 3); - world.setBlock(x + 3, y + 20, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 20, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 20, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 20, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 20, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 20, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 20, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 20, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 21, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 21, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 21, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 21, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 21, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 21, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 21, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 21, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 22, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 22, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 22, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 22, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 22, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 22, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 22, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 22, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 23, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 23, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 23, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 23, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 23, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 23, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 23, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 23, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 24, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 24, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 24, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 24, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 24, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 24, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 24, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 24, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 25, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 25, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 25, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 25, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 25, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 25, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 25, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 25, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 26, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 26, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 26, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 26, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 26, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 26, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 26, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 26, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 27, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 27, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 27, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 27, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 28, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 28, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 28, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 28, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 29, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 29, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 29, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 29, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 30, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 30, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 30, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 30, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 30, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 30, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 30, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 30, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 31, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 31, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 31, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 31, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 31, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 31, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 31, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 31, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 32, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 32, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 32, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 32, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 32, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 32, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 32, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 32, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 33, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 33, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 33, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 33, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 33, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 33, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 33, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 33, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 34, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 34, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 34, z + 24, Blocks.iron_bars, 0, 3); - world.setBlock(x + 3, y + 34, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 34, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 34, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 34, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 34, z + 26, Blocks.iron_bars, 0, 3); - world.setBlock(x + 4, y + 35, z + 24, Blocks.brick_block, 0, 3); - world.setBlock(x + 3, y + 35, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 5, y + 35, z + 25, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 35, z + 26, Blocks.brick_block, 0, 3); - world.setBlock(x + 4, y + 36, z + 25, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 37, z + 22, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 37, z + 23, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 37, z + 24, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 37, z + 24, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 37, z + 25, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 37, z + 25, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 38, z + 20, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 38, z + 20, Blocks.web, 0, 3); - world.setBlock(x + 7, y + 38, z + 20, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 38, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 38, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 38, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 7, y + 38, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 38, z + 22, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 38, z + 22, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 38, z + 22, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 38, z + 23, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 38, z + 23, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 38, z + 24, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 38, z + 24, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 39, z + 14, Blocks.web, 0, 3); - world.setBlock(x + 11, y + 39, z + 14, Blocks.web, 0, 3); - world.setBlock(x + 12, y + 39, z + 14, Blocks.web, 0, 3); - world.setBlock(x + 9, y + 39, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 39, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 11, y + 39, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 12, y + 39, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 9, y + 39, z + 16, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 39, z + 16, Blocks.web, 0, 3); - world.setBlock(x + 11, y + 39, z + 16, Blocks.web, 0, 3); - world.setBlock(x + 12, y + 39, z + 16, Blocks.web, 0, 3); - world.setBlock(x + 9, y + 39, z + 17, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 39, z + 17, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 39, z + 20, Blocks.web, 0, 3); - world.setBlock(x + 7, y + 39, z + 20, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 39, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 39, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 39, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 4, y + 39, z + 22, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 39, z + 22, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 39, z + 22, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 39, z + 23, Blocks.web, 0, 3); - world.setBlock(x + 11, y + 40, z + 14, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 40, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 11, y + 40, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 12, y + 40, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 40, z + 16, Blocks.web, 0, 3); - world.setBlock(x + 11, y + 40, z + 16, Blocks.web, 0, 3); - world.setBlock(x + 9, y + 40, z + 17, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 40, z + 17, Blocks.web, 0, 3); - world.setBlock(x + 5, y + 40, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 6, y + 40, z + 21, Blocks.web, 0, 3); - world.setBlock(x + 11, y + 41, z + 15, Blocks.web, 0, 3); - world.setBlock(x + 10, y + 41, z + 16, Blocks.web, 0, 3); - world.setBlock(x + 17, y + 42, z + 9, Blocks.web, 0, 3); - world.setBlock(x + 18, y + 42, z + 9, Blocks.web, 0, 3); - world.setBlock(x + 16, y + 42, z + 10, Blocks.web, 0, 3); - world.setBlock(x + 17, y + 42, z + 10, Blocks.web, 0, 3); - world.setBlock(x + 18, y + 42, z + 10, Blocks.web, 0, 3); - world.setBlock(x + 19, y + 42, z + 10, Blocks.web, 0, 3); - world.setBlock(x + 15, y + 42, z + 11, Blocks.web, 0, 3); - world.setBlock(x + 16, y + 42, z + 11, Blocks.web, 0, 3); - world.setBlock(x + 17, y + 42, z + 11, Blocks.web, 0, 3); - world.setBlock(x + 18, y + 42, z + 11, Blocks.web, 0, 3); - world.setBlock(x + 15, y + 42, z + 12, Blocks.web, 0, 3); - world.setBlock(x + 16, y + 42, z + 12, Blocks.web, 0, 3); - world.setBlock(x + 17, y + 42, z + 12, Blocks.web, 0, 3); - world.setBlock(x + 17, y + 43, z + 10, Blocks.web, 0, 3); - world.setBlock(x + 18, y + 43, z + 10, Blocks.web, 0, 3); - world.setBlock(x + 17, y + 43, z + 11, Blocks.web, 0, 3); - if(GeneralConfig.enableDebugMode) - System.out.print("[Debug] Successfully spawned abandoned factory at " + x + " " + y +" " + z + "\n"); - return true; - - } - -} \ No newline at end of file From daae6e96945a19a30614b51b122fdee49950b095 Mon Sep 17 00:00:00 2001 From: Lazzzycatwastaken Date: Thu, 18 Sep 2025 20:17:32 +0200 Subject: [PATCH 23/26] peak meter 100% --- .../java/com/hbm/config/StructureConfig.java | 82 ++++++++ .../com/hbm/world/gen/NTMWorldGenerator.java | 175 +++++++++--------- 2 files changed, 172 insertions(+), 85 deletions(-) diff --git a/src/main/java/com/hbm/config/StructureConfig.java b/src/main/java/com/hbm/config/StructureConfig.java index 5ce4c6d51..2ed7b40e3 100644 --- a/src/main/java/com/hbm/config/StructureConfig.java +++ b/src/main/java/com/hbm/config/StructureConfig.java @@ -17,6 +17,50 @@ public class StructureConfig { public static boolean debugStructures = false; + public static boolean enableRuins = true; + public static boolean enableOceanStructures = true; + + public static int ruinsASpawnWeight = 10; + public static int ruinsBSpawnWeight = 12; + public static int ruinsCSpawnWeight = 12; + public static int ruinsDSpawnWeight = 12; + public static int ruinsESpawnWeight = 12; + public static int ruinsFSpawnWeight = 12; + public static int ruinsGSpawnWeight = 12; + public static int ruinsHSpawnWeight = 12; + public static int ruinsISpawnWeight = 12; + public static int ruinsJSpawnWeight = 12; // Total 120 (used to be 220) + + public static int plane1SpawnWeight = 25; + public static int plane2SpawnWeight = 25; + + public static int desertShack1SpawnWeight = 18; + public static int desertShack2SpawnWeight = 20; + public static int desertShack3SpawnWeight = 22; + + public static int laboratorySpawnWeight = 20; + public static int lighthouseSpawnWeight = 4; + public static int oilRigSpawnWeight = 5; + public static int beachedPatrolSpawnWeight = 15; + public static int vertibirdSpawnWeight = 6; + public static int vertibirdCrashedSpawnWeight = 10; + + public static int factorySpawnWeight = 40; + public static int radioSpawnWeight = 30; + public static int forestChemSpawnWeight = 30; + public static int forestPostSpawnWeight = 30; + + public static int spireSpawnWeight = 2; + public static int bunkerSpawnWeight = 6; + public static int dishSpawnWeight = 20; + public static int featuresSpawnWeight = 50; + + public static int aircraftCarrierSpawnWeight = 3; + + // --- Null weights + public static int plainsNullWeight = 4; + public static int oceanNullWeight = 15; + public static void loadFromConfig(Configuration config) { final String CATEGORY_STRUCTURES = CommonConfig.CATEGORY_STRUCTURES; @@ -32,6 +76,44 @@ public class StructureConfig { debugStructures = CommonConfig.createConfigBool(config, CATEGORY_STRUCTURES, "5.04_debugStructures", "If enabled, special structure blocks like jigsaw blocks will not be transformed after generating", false); + enableRuins = CommonConfig.createConfigBool(config, CATEGORY_STRUCTURES, "5.05_enableRuins", "Toggle for all ruin structures (A through J)", true); + enableOceanStructures = CommonConfig.createConfigBool(config, CATEGORY_STRUCTURES, "5.06_enableOceanStructures", "Toggle for ocean structures. (Aircraft carrier, oil rig, lighthouse.)", true); + + spireSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.07_spireSpawnWeight", "Spawn weight for spire structure.", 2); + featuresSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.08_featuresSpawnWeight", "Spawn weight for misc structures (ex. Houses, offices.)", 50); + bunkerSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.09_bunkerSpawnWeight", "Spawn weight for bunker structure.", 6); + vertibirdSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.10_vertibirdSpawnWeight", "Spawn weight for vertibird structure.", 6); + vertibirdCrashedSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.11_crashedVertibirdSpawnWeight", "Spawn weight for crashed vertibird structure.", 10); + aircraftCarrierSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.12_aircraftCarrierSpawnWeight", "Spawn weight for aircraft carrier structure.", 3); + oilRigSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.13_oilRigSpawnWeight", "Spawn weight for oil rig structure.", 5); + lighthouseSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.14_lighthouseSpawnWeight", "Spawn weight for lighthouse structure.", 1); + beachedPatrolSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.15_beachedPatrolSpawnWeight", "Spawn weight for beached patrol structure.", 15); + dishSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.16_dishSpawnWeight", "Spawn weight for dish structures.", 10); + forestChemSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.17_forestChemSpawnWeight", "Spawn weight for forest chemical plant structure.", 30); + plane1SpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.18_plane1SpawnWeight", "Spawn weight for crashed plane 1 structure.", 25); + plane2SpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.19_plane2SpawnWeight", "Spawn weight for crashed plane 2 structure.", 25); + desertShack1SpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.20_desertShack1SpawnWeight", "Spawn weight for desert shack 1 structure.", 18); + desertShack2SpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.21_desertShack2SpawnWeight", "Spawn weight for desert shack 2 structure.", 20); + desertShack3SpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.22_desertShack3SpawnWeight", "Spawn weight for desert shack 3 structure.", 22); + laboratorySpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.23_laboratorySpawnWeight", "Spawn weight for laboratory structure/", 20); + forestPostSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.24_forestPostSpawnWeight", "Spawn weight for forest post structure.", 30); + ruinsASpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.25_ruinASpawnWeight", "Spawn weight for ruin A structure.", 10); + ruinsBSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.26_ruinBSpawnWeight", "Spawn weight for ruin B structure.", 12); + ruinsCSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.27_ruinCSpawnWeight", "Spawn weight for ruin C structure.", 12); + ruinsDSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.28_ruinDSpawnWeight", "Spawn weight for ruin D structure.", 12); + ruinsESpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.29_ruinESpawnWeight", "Spawn weight for ruin E structure.", 12); + ruinsFSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.30_ruinFSpawnWeight", "Spawn weight for ruin F structure.", 12); + ruinsGSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.31_ruinGSpawnWeight", "Spawn weight for ruin G structure.", 12); + ruinsHSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.32_ruinHSpawnWeight", "Spawn weight for ruin H structure.", 12); + ruinsISpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.33_ruinISpawnWeight", "Spawn weight for ruin I structure.", 12); + ruinsJSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.34_ruinJSpawnWeight", "Spawn weight for ruin J structure.", 12); + radioSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.35_radioSpawnWeight", "Spawn weight for radio structure.", 25); + factorySpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.36_factorySpawnWeight", "Spawn weight for factory structure.", 40); + + plainsNullWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.37_plainsNullWeight", "Null spawn weight for plains biome", 20); + oceanNullWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.38_oceanNullWeight", "Null spawn weight for ocean biomes", 35); + + structureMinChunks = CommonConfig.setDef(structureMinChunks, 4); structureMaxChunks = CommonConfig.setDef(structureMaxChunks, 12); diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index 4e61206ff..8d951f8a3 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -40,60 +40,38 @@ public class NTMWorldGenerator implements IWorldGenerator { final List oceanBiomes = Arrays.asList(new BiomeGenBase[] { BiomeGenBase.ocean, BiomeGenBase.deepOcean }); final List beachBiomes = Arrays.asList(new BiomeGenBase[] { BiomeGenBase.beach, BiomeGenBase.stoneBeach, BiomeGenBase.coldBeach }); final List lighthouseBiomes = Arrays.asList(new BiomeGenBase[] { BiomeGenBase.ocean, BiomeGenBase.deepOcean, BiomeGenBase.beach, BiomeGenBase.stoneBeach, BiomeGenBase.coldBeach }); - final List flatbiomes = Arrays.asList(new BiomeGenBase[] { BiomeGenBase.plains, BiomeGenBase.icePlains, BiomeGenBase.desert }); + final List flatbiomes = Arrays.asList(BiomeGenBase.plains,BiomeGenBase.icePlains,BiomeGenBase.desert, BiomeGenBase.forest, BiomeGenBase.taiga, BiomeGenBase.coldTaiga, BiomeGenBase.savanna, BiomeGenBase.savannaPlateau, BiomeGenBase.birchForest); + /// SPIRE /// NBTStructure.registerStructure(0, new SpawnCondition("spire") {{ canSpawn = biome -> biome.heightVariation <= 0.05F && !invalidBiomes.contains(biome); structure = new JigsawPiece("spire", StructureManager.spire, -1); - spawnWeight = 2; + spawnWeight = StructureConfig.spireSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("features") {{ canSpawn = biome -> !invalidBiomes.contains(biome); start = d -> new MapGenNTMFeatures.Start(d.getW(), d.getX(), d.getY(), d.getZ()); - spawnWeight = 14 * 4; + spawnWeight = StructureConfig.featuresSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("bunker") {{ canSpawn = biome -> !invalidBiomes.contains(biome); start = d -> new BunkerStart(d.getW(), d.getX(), d.getY(), d.getZ()); - spawnWeight = 1 * 4; + spawnWeight = StructureConfig.bunkerSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("vertibird") {{ canSpawn = biome -> !biome.canSpawnLightningBolt() && biome.temperature >= 2F; structure = new JigsawPiece("vertibird", StructureManager.vertibird, -3); - spawnWeight = 3 * 4; + spawnWeight = StructureConfig.vertibirdSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("crashed_vertibird") {{ canSpawn = biome -> !biome.canSpawnLightningBolt() && biome.temperature >= 2F; structure = new JigsawPiece("crashed_vertibird", StructureManager.crashed_vertibird, -10); - spawnWeight = 3 * 4; - }}); - - NBTStructure.registerStructure(0, new SpawnCondition("aircraft_carrier") {{ - canSpawn = oceanBiomes::contains; - structure = new JigsawPiece("aircraft_carrier", StructureManager.aircraft_carrier, -6); - maxHeight = 42; - spawnWeight = 1; - }}); - - NBTStructure.registerStructure(0, new SpawnCondition("oil_rig") {{ - canSpawn = biome -> biome == BiomeGenBase.deepOcean; - structure = new JigsawPiece("oil_rig", StructureManager.oil_rig, -20); - maxHeight = 12; - minHeight = 11; - spawnWeight = 2; - }}); - - NBTStructure.registerStructure(0, new SpawnCondition("lighthouse") {{ - canSpawn = lighthouseBiomes::contains; - structure = new JigsawPiece("lighthouse", StructureManager.lighthouse, -40); - maxHeight = 29; - minHeight = 28; - spawnWeight = 2; + spawnWeight = StructureConfig.vertibirdCrashedSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("beached_patrol") {{ @@ -101,7 +79,30 @@ public class NTMWorldGenerator implements IWorldGenerator { structure = new JigsawPiece("beached_patrol", StructureManager.beached_patrol, -5); minHeight = 58; maxHeight = 67; - spawnWeight = 8; + spawnWeight = StructureConfig.beachedPatrolSpawnWeight; + }}); + + NBTStructure.registerStructure(0, new SpawnCondition("aircraft_carrier") {{ + canSpawn = oceanBiomes::contains; + structure = new JigsawPiece("aircraft_carrier", StructureManager.aircraft_carrier, -6); + maxHeight = 42; + spawnWeight = StructureConfig.enableOceanStructures ? StructureConfig.aircraftCarrierSpawnWeight : 0; + }}); + + NBTStructure.registerStructure(0, new SpawnCondition("oil_rig") {{ + canSpawn = biome -> biome == BiomeGenBase.deepOcean; + structure = new JigsawPiece("oil_rig", StructureManager.oil_rig, -20); + maxHeight = 12; + minHeight = 11; + spawnWeight = StructureConfig.enableOceanStructures ? StructureConfig.oilRigSpawnWeight : 0; + }}); + + NBTStructure.registerStructure(0, new SpawnCondition("lighthouse") {{ + canSpawn = lighthouseBiomes::contains; + structure = new JigsawPiece("lighthouse", StructureManager.lighthouse, -40); + maxHeight = 29; + minHeight = 28; + spawnWeight = StructureConfig.enableOceanStructures ? StructureConfig.lighthouseSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("dish") {{ @@ -109,120 +110,124 @@ public class NTMWorldGenerator implements IWorldGenerator { structure = new JigsawPiece("dish", StructureManager.dish, -10); minHeight = 53; maxHeight = 65; - spawnWeight = 1; + spawnWeight = StructureConfig.dishSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("forestchem") {{ - canSpawn = biome -> biome == BiomeGenBase.forest; + canSpawn = biome -> biome.heightVariation <= 0.3F; structure = new JigsawPiece("forest_chem", StructureManager.forest_chem, -9); - spawnWeight = 50; + spawnWeight = StructureConfig.forestChemSpawnWeight; }}); + + NBTStructure.registerStructure(0, new SpawnCondition("labolatory") {{ + canSpawn = flatbiomes::contains; + structure = new JigsawPiece("laboratory", StructureManager.laboratory, -10); + minHeight = 53; + maxHeight = 65; + spawnWeight = StructureConfig.laboratorySpawnWeight; + }}); + + NBTStructure.registerStructure(0, new SpawnCondition("forest_post") {{ + canSpawn = biome -> biome.heightVariation <= 0.3F; + structure = new JigsawPiece("forest_post", StructureManager.forest_post, -9); + spawnWeight = StructureConfig.forestPostSpawnWeight; + }}); + + NBTStructure.registerStructure(0, new SpawnCondition("radio") {{ + canSpawn = flatbiomes::contains; + structure = new JigsawPiece("radio_house", StructureManager.radio_house, -6); + spawnWeight = StructureConfig.radioSpawnWeight; + }}); + + NBTStructure.registerStructure(0, new SpawnCondition("factory") {{ + canSpawn = flatbiomes::contains; + structure = new JigsawPiece("factory", StructureManager.factory, -10); + spawnWeight = StructureConfig.factorySpawnWeight; + }}); + NBTStructure.registerStructure(0, new SpawnCondition("plane1") {{ - canSpawn = biome -> biome == BiomeGenBase.forest || biome == BiomeGenBase.plains; + canSpawn = biome -> biome.heightVariation <= 0.3F; structure = new JigsawPiece("crashed_plane_1", StructureManager.plane1, -5); - spawnWeight = 50; + spawnWeight = StructureConfig.plane1SpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("plane2") {{ - canSpawn = biome -> biome == BiomeGenBase.forest || biome == BiomeGenBase.plains; + canSpawn = biome -> biome.heightVariation <= 0.3F; structure = new JigsawPiece("crashed_plane_2", StructureManager.plane2, -8); - spawnWeight = 50; + spawnWeight = StructureConfig.plane2SpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("desert_shack_1") {{ canSpawn = biome -> biome == BiomeGenBase.desert; structure = new JigsawPiece("desert_shack_1", StructureManager.desert_shack_1, -7); - spawnWeight = 20; + spawnWeight = StructureConfig.desertShack1SpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("desert_shack_2") {{ canSpawn = biome -> biome == BiomeGenBase.desert; structure = new JigsawPiece("desert_shack_2", StructureManager.desert_shack_2, -7); - spawnWeight = 25; + spawnWeight = StructureConfig.desertShack2SpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("desert_shack_3") {{ canSpawn = biome -> biome == BiomeGenBase.desert; structure = new JigsawPiece("desert_shack_3", StructureManager.desert_shack_3, -5); - spawnWeight = 30; + spawnWeight = StructureConfig.desertShack3SpawnWeight; }}); - NBTStructure.registerStructure(0, new SpawnCondition("labolatory") {{ - canSpawn = biome -> biome == BiomeGenBase.plains; - structure = new JigsawPiece("laboratory", StructureManager.laboratory, -10); - minHeight = 53; - maxHeight = 65; - spawnWeight = 8; - }}); - NBTStructure.registerStructure(0, new SpawnCondition("forest_post") {{ - canSpawn = biome -> biome == BiomeGenBase.forest; - structure = new JigsawPiece("forest_post", StructureManager.forest_post, -9); - spawnWeight = 40; - }}); - - NBTStructure.registerStructure(0, new SpawnCondition("ruin1") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinA") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsA", StructureManager.ntmruinsA, -1) {{conformToTerrain = true;}}; - spawnWeight = 20; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsASpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin2") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinB") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsB", StructureManager.ntmruinsB, -1) {{conformToTerrain = true;}}; - spawnWeight = 25; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsBSpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin3") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinC") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsC", StructureManager.ntmruinsC, -1) {{conformToTerrain = true;}}; - spawnWeight = 25; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsCSpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin4") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinD") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsD", StructureManager.ntmruinsD, -1) {{conformToTerrain = true;}}; - spawnWeight = 30; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsDSpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin5") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinE") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsE", StructureManager.ntmruinsE, -1) {{conformToTerrain = true;}}; - spawnWeight = 30; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsESpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin6") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinF") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsF", StructureManager.ntmruinsF, -1) {{conformToTerrain = true;}}; - spawnWeight = 35; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsFSpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin7") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinG") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsG", StructureManager.ntmruinsG, -1) {{conformToTerrain = true;}}; - spawnWeight = 35; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsGSpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin8") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinH") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsH", StructureManager.ntmruinsH, -1) {{conformToTerrain = true;}}; - spawnWeight = 35; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsHSpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin9") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinI") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsI", StructureManager.ntmruinsI, -1) {{conformToTerrain = true;}}; - spawnWeight = 35; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsISpawnWeight : 0; }}); - NBTStructure.registerStructure(0, new SpawnCondition("ruin10") {{ + NBTStructure.registerStructure(0, new SpawnCondition("ruinJ") {{ canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsJ", StructureManager.ntmruinsJ, -1) {{conformToTerrain = true;}}; - spawnWeight = 35; - }}); - NBTStructure.registerStructure(0, new SpawnCondition("radio") {{ - canSpawn = flatbiomes::contains; - structure = new JigsawPiece("radio_house", StructureManager.radio_house, -6); - spawnWeight = 30; - }}); - NBTStructure.registerStructure(0, new SpawnCondition("factory") {{ - canSpawn = flatbiomes::contains; - structure = new JigsawPiece("factory", StructureManager.factory, -6); - spawnWeight = 30; + spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsJSpawnWeight : 0; }}); - NBTStructure.registerNullWeight(0, 2, biome -> biome == BiomeGenBase.plains); - NBTStructure.registerNullWeight(0, 4, oceanBiomes::contains); + NBTStructure.registerNullWeight(0, StructureConfig.plainsNullWeight, biome -> biome == BiomeGenBase.plains); + NBTStructure.registerNullWeight(0, StructureConfig.oceanNullWeight, oceanBiomes::contains); Map bricks = new HashMap() {{ put(ModBlocks.meteor_brick, new MeteorBricks()); From 7113838d682ef254a363f315b2a4d99f94dc84ee Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 19 Sep 2025 12:08:00 +1000 Subject: [PATCH 24/26] add compact compressor to NEI handler --- src/main/java/com/hbm/handler/nei/CompressorHandler.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/handler/nei/CompressorHandler.java b/src/main/java/com/hbm/handler/nei/CompressorHandler.java index 79beb12ff..4d68cca39 100644 --- a/src/main/java/com/hbm/handler/nei/CompressorHandler.java +++ b/src/main/java/com/hbm/handler/nei/CompressorHandler.java @@ -3,10 +3,15 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.recipes.CompressorRecipes; +import net.minecraft.item.ItemStack; + public class CompressorHandler extends NEIUniversalHandler { public CompressorHandler() { - super(ModBlocks.machine_compressor.getLocalizedName(), ModBlocks.machine_compressor, CompressorRecipes.getRecipes()); + super(ModBlocks.machine_compressor.getLocalizedName(), new ItemStack[] { + new ItemStack(ModBlocks.machine_compressor), + new ItemStack(ModBlocks.machine_compressor_compact), + }, CompressorRecipes.getRecipes()); } @Override From f7ffc694bff66720798b415ae8d5eab3fccb9c90 Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 19 Sep 2025 12:27:10 +1000 Subject: [PATCH 25/26] retract drill upon hitting depth rock --- .../tileentity/machine/TileEntityMachineExcavator.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 28b4e49f7..2cad13901 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -5,6 +5,7 @@ import java.util.*; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockDepth; import com.hbm.blocks.generic.BlockBedrockOreTE.TileEntityBedrockOre; import com.hbm.blocks.network.CraneInserter; import com.hbm.entity.item.EntityMovingItem; @@ -270,7 +271,12 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements break; } - if(shouldIgnoreBlock(b, x, y ,z)) continue; + // if hitting depth rock, turn off the drill + if(b instanceof BlockDepth) { + this.enableDrill = false; + } + + if(shouldIgnoreBlock(b, x, y, z)) continue; ignoreAll = false; From b3405d085b107e1cea2bb7cb42afcf25ff32fc9a Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 19 Sep 2025 13:02:50 +0200 Subject: [PATCH 26/26] the skeleton's coming out, AAAAAAAAAAAAA --- changelog | 3 + .../java/com/hbm/entity/EntityMappings.java | 1 - .../com/hbm/handler/GunConfiguration.java | 123 ------------------ .../com/hbm/items/weapon/ItemCrucible.java | 1 - .../weapon/sedna/factory/ConfettiUtil.java | 2 + src/main/java/com/hbm/main/ClientProxy.java | 5 - .../com/hbm/particle/ParticleSkeleton.java | 25 +++- .../hbm/particle/helper/SkeletonCreator.java | 24 +++- .../hbm/textures/particle/skeleton_blood.png | Bin 0 -> 2411 bytes .../hbm/textures/particle/skoilet_blood.png | Bin 0 -> 4218 bytes 10 files changed, 47 insertions(+), 137 deletions(-) delete mode 100644 src/main/java/com/hbm/handler/GunConfiguration.java create mode 100644 src/main/resources/assets/hbm/textures/particle/skeleton_blood.png create mode 100644 src/main/resources/assets/hbm/textures/particle/skoilet_blood.png diff --git a/changelog b/changelog index 5dc4a445d..938e01585 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,9 @@ * All dual wielded guns now render more accurately when dropped instead of only showing one gun * Added support for left handed guns (currently unused)* * Removed the presentations for the old particle accelerator and schottky diode +* Gibbing NPCs now also spawns bones, if supported by the skeletonizer + * Gibbed bones only have a 50% chance of spawning and come with a unique red texture + * Gibbed bones have a way shorter lifetime and higher gravity to match the gib particles ## Fixed * Fixed wood burner only being able to create one ash pile per item burned, even when that item yields more, creating a backlog in the internal ash value diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 9c5d5358d..764b06463 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -25,7 +25,6 @@ import com.hbm.entity.train.*; import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Quartet; -import cpw.mods.fml.common.registry.EntityRegistry; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EnumCreatureType; diff --git a/src/main/java/com/hbm/handler/GunConfiguration.java b/src/main/java/com/hbm/handler/GunConfiguration.java deleted file mode 100644 index f703d47e4..000000000 --- a/src/main/java/com/hbm/handler/GunConfiguration.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.hbm.handler; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.function.Consumer; - -import com.hbm.items.weapon.sedna.Crosshair; -import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.render.anim.AnimationEnums.GunAnimation; -import com.hbm.render.anim.BusAnimation; - -import net.minecraft.util.ResourceLocation; - -@Deprecated -public class GunConfiguration implements Cloneable { - - /** - * alt function restrictions: - * alt can not be reloaded (reload type of 0, ammo cap of 0) - * alt cooldown and main cooldown are shared (alt cooldown will almoast always be greater or equal) - * alt is always the lower priority, mouse2 will be canceled then mouse1 is activated at the same time - * restrictions must be applied in gun's logic, mechanism may be dysfunctional if these rules are ignored - */ - - //amount of ticks between each bullet - public int rateOfFire; - //amount of bullets fired per delay passed - public int roundsPerCycle; - /** Amount of rounds per burst, irrelevant if not a burst fire weapon**/ - public int roundsPerBurst; - //0 = normal, 1 = release, 2 = both - public int gunMode; - //0 = manual, 1 = automatic - public int firingMode; - //weapon won't fire after weapon breaks (main only) - public int durability; - - //animations! - public HashMap animations = new HashMap(); - //lazy-ish loading for animations, required for loading animations from ResourceManager, since that occurs after we've initialised the guns - public Consumer loadAnimations; - public boolean animationsLoaded = false; - //when sneaking, disables crosshair and centers the bullet spawn point - public boolean hasSights; - //does this weapon behave like fully sick old-school boomer shooters - public boolean isCentered; - //texture overlay when sneaking - public ResourceLocation scopeTexture; - - //duration of every animation cycle, used also for how quickly a burst fire rifle can fire - public int firingDuration; - //sound path to the shooting sound - public String firingSound = ""; - public String firingSoundEmpty = null; - public float firingVolume = 1.0F; - public float firingPitch = 1.0F; - //how long the reload animation will play - //MUST BE GREATER THAN ZERO ! ! ! - public int reloadDuration; - public int emptyReloadAdditionalDuration; - //sound path to the reload sound - public String reloadSound = ""; - public String reloadSoundEmpty = null; - //whether the reload sound should be played at the beginning or at the end of the reload - public boolean reloadSoundEnd = true; - public String equipSound = ""; - - //how much ammo the clip can hold, 0 if drawn from inventory - public int ammoCap; - //0 does not allow direct reload, 1 is full clip, 2 is single bullet - public int reloadType; - // If the animations are designed to be sequential, the last frame will be held until the next anmiation starts - public boolean reloadAnimationsSequential = false; - //whether or not the infinity enchantment should work - public boolean allowsInfinity; - //whether the ammo count should be displayed - public boolean showAmmo = true; - - //for electrically powered weapons: - //the Maximum capacity of the gun - public long maxCharge; - //the rate at which the gun is charged - public long chargeRate; - //how much energy is discharged per shot - public long dischargePerShot; - - public String name = ""; - public EnumGunManufacturer manufacturer = EnumGunManufacturer.NONE; - public List comment = new ArrayList(); - - //bullet configs for main and alt fire - public List config = new ArrayList(); - - //crosshair - public Crosshair crosshair; - - //casing eject behavior - public CasingEjector ejector = null; - - public static final int MODE_NORMAL = 0; - public static final int MODE_RELEASE = 1; - public static final int MODE_BOTH = 1; - - public static final int FIRE_MANUAL = 0; - public static final int FIRE_AUTO = 1; - public static final int FIRE_BURST = 2; - - public static final int RELOAD_NONE = 0; - public static final int RELOAD_FULL = 1; - public static final int RELOAD_SINGLE = 2; - - public static final String RSOUND_REVOLVER = "hbm:weapon.revolverReload"; - public static final String RSOUND_RIFLE = ""; - public static final String RSOUND_MAG = "hbm:weapon.magReload"; - public static final String RSOUND_MAG_BOLT = "hbm:weapon.magReloadBolt"; - public static final String RSOUND_SHOTGUN = "hbm:weapon.shotgunReload"; - public static final String RSOUND_LAUNCHER = "hbm:weapon.rpgReload"; - public static final String RSOUND_GRENADE = "hbm:weapon.hkReload"; - public static final String RSOUND_GRENADE_NEW = "hbm:weapon.glReload"; - public static final String RSOUND_FATMAN = "hbm:weapon.fatmanReload"; - -} diff --git a/src/main/java/com/hbm/items/weapon/ItemCrucible.java b/src/main/java/com/hbm/items/weapon/ItemCrucible.java index 3945e52cc..09c1e5453 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCrucible.java +++ b/src/main/java/com/hbm/items/weapon/ItemCrucible.java @@ -1,7 +1,6 @@ package com.hbm.items.weapon; import java.util.List; -import java.util.Random; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java b/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java index 10745b90d..661b4185a 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java @@ -48,6 +48,8 @@ public class ConfettiUtil { if(entity instanceof EntitySkeleton) return; if(entity instanceof EntitySlime) return; + SkeletonCreator.composeEffectGib(entity.worldObj, entity, 0.25F); + NBTTagCompound vdat = new NBTTagCompound(); vdat.setString("type", "giblets"); vdat.setInteger("ent", entity.getEntityId()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 2d51ccd49..a1c226305 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -41,7 +41,6 @@ import com.hbm.handler.HbmKeybinds; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.handler.ImpactWorldHandler; import com.hbm.handler.imc.IMCHandlerNHNEI; -import com.hbm.items.IAnimatedItem; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.factory.GunFactoryClient; import com.hbm.lib.RefStrings; @@ -49,10 +48,6 @@ import com.hbm.particle.*; import com.hbm.particle.helper.ParticleCreators; import com.hbm.particle.psys.engine.EventHandlerParticleEngine; import com.hbm.qmaw.QMAWLoader; -import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationSequence; -import com.hbm.render.anim.HbmAnimations; -import com.hbm.render.anim.HbmAnimations.Animation; import com.hbm.render.block.*; import com.hbm.render.entity.RenderEmpty; import com.hbm.render.entity.effect.*; diff --git a/src/main/java/com/hbm/particle/ParticleSkeleton.java b/src/main/java/com/hbm/particle/ParticleSkeleton.java index a3eb3f4c9..37f8f5cf1 100644 --- a/src/main/java/com/hbm/particle/ParticleSkeleton.java +++ b/src/main/java/com/hbm/particle/ParticleSkeleton.java @@ -26,8 +26,13 @@ public class ParticleSkeleton extends EntityFX { public static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/skeleton.png"); public static final ResourceLocation texture_ext = new ResourceLocation(RefStrings.MODID + ":textures/particle/skoilet.png"); + public static final ResourceLocation texture_blood = new ResourceLocation(RefStrings.MODID + ":textures/particle/skeleton_blood.png"); + public static final ResourceLocation texture_blood_ext = new ResourceLocation(RefStrings.MODID + ":textures/particle/skoilet_blood.png"); public static final IModelCustom skeleton = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/effect/skeleton.obj"), false).asVBO(); protected EnumSkeletonType type; + + public ResourceLocation useTexture; + public ResourceLocation useTextureExt; private float momentumYaw; private float momentumPitch; @@ -50,6 +55,18 @@ public class ParticleSkeleton extends EntityFX { this.momentumPitch = rand.nextFloat() * 5 * (rand.nextBoolean() ? 1 : -1); this.momentumYaw = rand.nextFloat() * 5 * (rand.nextBoolean() ? 1 : -1); + + this.useTexture = texture; + this.useTextureExt = texture_ext; + } + + public ParticleSkeleton makeGib() { + this.initialDelay = -2; // skip post delay motion randomization + this.useTexture = texture_blood; + this.useTextureExt = texture_blood_ext; + this.particleGravity = 0.04F; + this.particleMaxAge = 600 + rand.nextInt(20); + return this; } @Override @@ -139,16 +156,16 @@ public class ParticleSkeleton extends EntityFX { switch(type) { case SKULL: - this.textureManager.bindTexture(texture); + this.textureManager.bindTexture(useTexture); skeleton.renderPart("Skull"); break; case TORSO: - this.textureManager.bindTexture(texture); + this.textureManager.bindTexture(useTexture); skeleton.renderPart("Torso"); break; case LIMB: - this.textureManager.bindTexture(texture); + this.textureManager.bindTexture(useTexture); skeleton.renderPart("Limb"); break; case SKULL_VILLAGER: - this.textureManager.bindTexture(texture_ext); + this.textureManager.bindTexture(useTextureExt); skeleton.renderPart("SkullVillager"); break; } diff --git a/src/main/java/com/hbm/particle/helper/SkeletonCreator.java b/src/main/java/com/hbm/particle/helper/SkeletonCreator.java index 98018bd17..059ae65a8 100644 --- a/src/main/java/com/hbm/particle/helper/SkeletonCreator.java +++ b/src/main/java/com/hbm/particle/helper/SkeletonCreator.java @@ -33,20 +33,31 @@ public class SkeletonCreator implements IParticleCreator { public static HashMap> skullanizer = new HashMap(); public static void composeEffect(World world, Entity toSkeletonize, float brightness) { - NBTTagCompound data = new NBTTagCompound(); data.setString("type", "skeleton"); data.setInteger("entityID", toSkeletonize.getEntityId()); data.setFloat("brightness", brightness); IParticleCreator.sendPacket(world, toSkeletonize.posX, toSkeletonize.posY, toSkeletonize.posZ, 100, data); } + + public static void composeEffectGib(World world, Entity toSkeletonize, float force) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "skeleton"); + data.setInteger("entityID", toSkeletonize.getEntityId()); + data.setFloat("brightness", 1F); + data.setFloat("force", force); + data.setBoolean("gib", true); + IParticleCreator.sendPacket(world, toSkeletonize.posX, toSkeletonize.posY, toSkeletonize.posZ, 100, data); + } @Override @SideOnly(Side.CLIENT) public void makeParticle(World world, EntityPlayer player, TextureManager texman, Random rand, double x, double y, double z, NBTTagCompound data) { if(skullanizer.isEmpty()) init(); - + + boolean gib = data.getBoolean("gib"); + float force = data.getFloat("force"); int entityID = data.getInteger("entityID"); Entity entity = world.getEntityByID(entityID); if(!(entity instanceof EntityLivingBase)) return; @@ -61,9 +72,16 @@ public class SkeletonCreator implements IParticleCreator { if(bonealizer != null) { BoneDefinition[] bones = bonealizer.apply(living); for(BoneDefinition bone : bones) { + if(gib && rand.nextBoolean()) continue; ParticleSkeleton skeleton = new ParticleSkeleton(Minecraft.getMinecraft().getTextureManager(), world, bone.x, bone.y, bone.z, brightness, brightness, brightness, bone.type); skeleton.prevRotationYaw = skeleton.rotationYaw = bone.yaw; skeleton.prevRotationPitch = skeleton.rotationPitch = bone.pitch; + if(gib) { + skeleton.makeGib(); + skeleton.motionX = rand.nextGaussian() * force; + skeleton.motionY = (rand.nextGaussian() + 1) * force; + skeleton.motionZ = rand.nextGaussian() * force; + } Minecraft.getMinecraft().effectRenderer.addEffect(skeleton); } } @@ -161,7 +179,7 @@ public class SkeletonCreator implements IParticleCreator { skullanizer.put(EntityDummy.class.getSimpleName(), BONES_DUMMY); //techguns compat, for some reason - //not alwayss accurate because of variable arm position, but better than nothing + //not always accurate because of variable arm position, but better than nothing skullanizer.put("ArmySoldier", BONES_ZOMBIE); skullanizer.put("PsychoSteve", BONES_ZOMBIE); skullanizer.put("SkeletonSoldier", BONES_ZOMBIE); diff --git a/src/main/resources/assets/hbm/textures/particle/skeleton_blood.png b/src/main/resources/assets/hbm/textures/particle/skeleton_blood.png new file mode 100644 index 0000000000000000000000000000000000000000..1ecde389ec204b0f979ee57f2dc7546007e155b8 GIT binary patch literal 2411 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/particle/skoilet_blood.png b/src/main/resources/assets/hbm/textures/particle/skoilet_blood.png new file mode 100644 index 0000000000000000000000000000000000000000..bd714fb71fdbbb0a3a6ea95696a702b1133e0f23 GIT binary patch literal 4218 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 QdjJ3c07*qoM6N<$f(RiX1^@s6 literal 0 HcmV?d00001