From 37546b252dafe5608e37472a336b30f43bec0d52 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Tue, 10 Jun 2025 20:35:59 +0300 Subject: [PATCH 01/17] =?UTF-8?q?=F0=9F=85=B0=EF=B8=8Fss?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/uk_UA.lang | 62 ++++++++++++------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 28776824b..9891b1542 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -566,6 +566,21 @@ cannery.schottky.7=If any virtual particles encounter any malformed segments, al cannery.schottky.8=Note that virtual particles will never use the same Diode exit twice. Infinite loops will fail, but re-entering a Diode is otherwise fine cannery.schottky.9=Your Schottky Particle Diode should be properly enclosed, with free paths for each intersection exit +chem.hydrogen=Водень +chem.hydrogencoke=Hydrogen from CokeAdd commentMore actions +chem.oxygen=Кисень +chem.xenon=Ксеноновий газ +chem.xenonoxy=Ксеноновий газ (Охолоджений) +chem.helium3=Гелій-3 +chem.ethanol=Етанол +chem.biogas=Біогаз +chem.biofuel=Трансестерифікація біопалива +chem.reoil=Очищення оливи +chem.gasoline=Газолін +chem.tarsand=Бітум з бітумінозного піску +chem.meatprocessing=Обробка м'яса гліфідів +chem.birkeland=Азотна кислота з повітря + chem.ARSENIC=Екстракція миш'яку chem.ASPHALT=Виробництво асфальту chem.BAKELITE=Виробництво карболіту @@ -759,6 +774,7 @@ container.machineAmmoPress=Прес для боєприпасів container.machineArcWelder=Дуговий зварювальник container.machineArcFurnaceLarge=Дугова піч container.machineBoiler=Нагрівач нафти +container.machineChemicalPlant=Хімічний завод container.machineCMB=CMB Steel Furnace container.machineCoal=Твердопаливний генератор container.machineCoker=Коксова установка @@ -1398,22 +1414,25 @@ hazard.particleFine=Твердих часток hazard.sand=Подразників очей hbm.key=NTM Hotkeys -hbm.key.calculator=Calculator -hbm.key.copyToolAlt=Copy Tool: Switch Paste -hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes -hbm.key.craneLoad=Load/Unload Crane -hbm.key.craneMoveDown=Move Crane Backward -hbm.key.craneMoveLeft=Move Crane Left -hbm.key.craneMoveRight=Move Crane Right -hbm.key.craneMoveUp=Move Crane Forward -hbm.key.dash=Dash -hbm.key.gunPrimary=Primary Fire -hbm.key.gunSecondary=Secondary Fire -hbm.key.gunTertitary=Gun Sights -hbm.key.toggleBack=Toggle Jetpack -hbm.key.toggleHUD=Toggle HUD -hbm.key.trainInv=Train Inventory -hbm.key.reload=Reload +hbm.key.ability=Перемикання здібностей інструмента +hbm.key.abilityAlt=Конфігурація здібностей інструмента +hbm.key.calculator=Калькулятор +hbm.key.copyToolAlt=Інструмент копіювання: Перемикнути вставку +hbm.key.copyToolCtrl=Інструмент копіювання: Застосувати до труб +hbm.key.craneLoad=Завантажити/Розвантажити кран +hbm.key.craneMoveDown=Рухати кран назад +hbm.key.craneMoveLeft=Рухати кран вліво +hbm.key.craneMoveRight=Рухати кран вправо +hbm.key.craneMoveUp=Рухати кран вперед +hbm.key.dash=Ривок +hbm.key.gunPrimary=Основний вогонь +hbm.key.gunSecondary=Альтернативний вогонь +hbm.key.gunTertitary=Приціл +hbm.key.toggleBack=Перемикання реактивного ранця +hbm.key.toggleHUD=Перемикання HUD +hbm.key.toggleMagnet=Перемикання магніта +hbm.key.trainInv=Інвентар поїзда +hbm.key.reload=Перезарядити hbmfluid.air=Стиснене повітря hbmfluid.alumina=Оксид алюмінію @@ -1449,8 +1468,8 @@ hbmfluid.death=Розчин осмистого іридію hbmfluid.deuterium=Дейтерій hbmfluid.diesel=Дизель hbmfluid.diesel_crack=Крекінговий дизель -hbmfluid.diesel_crack_reform=Високооктановий крекінговий дизель -hbmfluid.diesel_reform=Високооктановий дизель +hbmfluid.diesel_crack_reform=Високоцетановий крекінговий дизель +hbmfluid.diesel_reform=Високоцетановий дизель hbmfluid.egg=Розчинене яйце hbmfluid.estradiol=Розчин естрадіолу hbmfluid.ethanol=Етанол @@ -3620,6 +3639,7 @@ item.part_barrel_light.name=Легкий ствол %s item.part_beryllium.name=Коробка з берилієвим пилом item.part_carbon.name=Коробка з вугільним пилом item.part_copper.name=Коробка з мідним пилом +item.part_generic.glass_polarized.name=Поляризована лінза item.part_generic.hde.name=Елемент для важких умов експлуатації item.part_generic.lde.name=Елемент низької щільності item.part_generic.piston_electric.name=Електричний поршень @@ -5346,6 +5366,7 @@ tile.geiger.name=Лічильник Гейгера tile.glass_ash.name=Попелясте скло tile.glass_boron.name=Борне скло tile.glass_lead.name=Свинцеве скло +tile.glass_polarized.name=Поляризоване скло tile.glass_polonium.name=Полонієве скло tile.glass_quartz.name=Кварцове скло tile.glass_trinitite.name=Тринітитове скло @@ -5369,10 +5390,6 @@ tile.hadron_coil_neodymium.name=Щільна неодимова котушка tile.hadron_coil_schrabidate.name=Щільна шрабідатова котушка tile.hadron_coil_schrabidium.name=Щільна шрабідієва котушка tile.hadron_coil_starmetal.name=Щільна котушка з зіркового металу -tile.hadron_cooler.name=Блок охолодження прискорювача частинок -tile.hadron_cooler.desc=Cooling power: 10$Overcooling threshold: 10$Cooling bonus: +10%%$Overcooling penalty: -25%% -tile.hadron_cooler_mk2.name=Particle Accelerator Cooling Unit - The Palindrome Special -tile.hadron_cooler_mk2.desc=Cooling power: 5$Efficiency function: 2-(cooling-15)²/225$Maximum penalty: -90%% tile.hadron_core.name=Particle Accelerator Core Component tile.hadron_diode.name=Schottky Particle Diode tile.hadron_plating.name=Particle Accelerator Plating @@ -5473,6 +5490,7 @@ tile.machine_catalytic_cracker.name=Вежа каталітичного крек tile.machine_catalytic_reformer.name=Каталітичний риформер tile.machine_centrifuge.name=Центрифуга tile.machine_chemfac.name=Хімічна фабрика +tile.machine_chemical_plant.name=Хімічний завод 2: Electric Boogaloo tile.machine_chemplant.name=Хімічний завод tile.machine_chungus.name=Парова турбіна "Левіафан" tile.machine_chungus.desc=Ефективність: 85%% From b328130edb90a1eaeee041c1f00ff8af197faf9e Mon Sep 17 00:00:00 2001 From: DangerousMilk Date: Sun, 15 Jun 2025 19:55:37 +0200 Subject: [PATCH 02/17] Added paintable coated variant of the exhaust pipe. --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../FluidDuctPaintableBlockExhaust.java | 202 ++++++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + src/main/resources/assets/hbm/lang/uk_UA.lang | 1 + src/main/resources/assets/hbm/lang/zh_CN.lang | 1 + .../fluid_duct_paintable_block_exhaust.png | Bin 0 -> 649 bytes 8 files changed, 210 insertions(+) create mode 100644 src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/fluid_duct_paintable_block_exhaust.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 143c33fa0..45966e0a0 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -791,6 +791,7 @@ public class ModBlocks { public static Block fluid_duct_paintable; public static Block fluid_duct_gauge; public static Block fluid_duct_exhaust; + public static Block fluid_duct_paintable_block_exhaust; public static Block fluid_valve; public static Block fluid_switch; public static Block fluid_pump; @@ -1919,6 +1920,7 @@ public class ModBlocks { fluid_duct_neo = new FluidDuctStandard(Material.iron).setBlockName("fluid_duct_neo").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pipe_neo"); fluid_duct_box = new FluidDuctBox(Material.iron).setBlockName("fluid_duct_box").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_box"); fluid_duct_exhaust = new FluidDuctBoxExhaust(Material.iron).setBlockName("fluid_duct_exhaust").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_box"); + fluid_duct_paintable_block_exhaust = new FluidDuctPaintableBlockExhaust().setBlockName("fluid_duct_paintable_block_exhaust").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_duct_paintable = new FluidDuctPaintable().setBlockName("fluid_duct_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_duct_gauge = new FluidDuctGauge().setBlockName("fluid_duct_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_valve = new FluidValve(Material.iron).setBlockName("fluid_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3185,6 +3187,7 @@ public class ModBlocks { register(fluid_duct_neo); register(fluid_duct_box); register(fluid_duct_exhaust); + register(fluid_duct_paintable_block_exhaust); register(fluid_duct_paintable); register(fluid_duct_gauge); register(fluid_valve); diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java new file mode 100644 index 000000000..3be2934af --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -0,0 +1,202 @@ +package com.hbm.blocks.network; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.blocks.ILookOverlay; +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.lib.Library; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.RenderBlockMultipass; +import com.hbm.tileentity.network.TileEntityPipeExhaust; +import com.hbm.util.i18n.I18nUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.List; + +public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay { + + @SideOnly(Side.CLIENT) protected IIcon overlay; + + public FluidDuctPaintableBlockExhaust() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityPipeExhaustPaintable(); + } + + public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir, TileEntity tile) { + return Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE) || + Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_LEADED) || + Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_POISON); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + List text = new ArrayList(); + text.add(Fluids.SMOKE.getLocalizedName()); + text.add(Fluids.SMOKE_LEADED.getLocalizedName()); + text.add(Fluids.SMOKE_POISON.getLocalizedName()); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":fluid_duct_paintable_block_exhaust"); + this.overlay = reg.registerIcon(RefStrings.MODID + ":fluid_duct_paintable_overlay"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block != null) { + if(RenderBlockMultipass.currentPass == 1) { + return this.overlay; + } else { + return pipe.block.getIcon(side, pipe.meta); + } + } + } + + return this.blockIcon; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + + if(stack != null && stack.getItem() instanceof ItemBlock) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if(block.renderAsNormalBlock() && block != this) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block == null) { + pipe.block = block; + pipe.meta = stack.getItemDamage() & 15; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + } + } + + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) return false; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block != null) { + pipe.block = null; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + + return false; + } + + @Override + public int getPasses() { + return 2; + } + + @Override + public int getRenderType(){ + return IBlockMultiPass.getRenderType(); + } + + public static class TileEntityPipeExhaustPaintable extends TileEntityPipeExhaust implements ICopiable { + + private Block block; + private int meta; + private Block lastBlock; + private int lastMeta; + + @Override + public void updateEntity() { + super.updateEntity(); + + if(worldObj.isRemote && (lastBlock != block || lastMeta != meta)) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + lastBlock = block; + lastMeta = meta; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(block != null) { + nbt.setInteger("paintblock", Block.getIdFromBlock(block)); + nbt.setInteger("paintmeta", meta); + } + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("paintblock")) { + this.block = Block.getBlockById(nbt.getInteger("paintblock")); + this.meta = nbt.getInteger("paintmeta"); + } + } + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 819c38039..3f04f0e38 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4183,6 +4183,7 @@ tile.floodlight.name=Elektrischer Scheinwerfer tile.fluid_duct.name=Universelles Flüssigkeitsrohr (Veraltet) tile.fluid_duct_box.name=Universelles Flüssigkeitsrohr (Boxrohr) tile.fluid_duct_exhaust.name=Abgasrohr +tile.fluid_duct_paintable_block_exhaust.name=Geschirmtes Abgasrohr (Färbbar) tile.fluid_duct_gauge.name=Flussmessrohr tile.fluid_duct_gauge.desc=Rohr welches anzeight, wie viel Flüssigkeit$sich pro Tick im Netzwerk bewegt.$Geteilte Netzwerke die über Fässer oder Tanks$verbunden sind, werden als ein einzelnes gezählt. tile.fluid_duct_neo.name=Universelles Flüssigkeitsrohr diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a3a94ae52..1051a0b4c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5308,6 +5308,7 @@ tile.floodlight.name=Powered Floodlight tile.fluid_duct.name=Universal Fluid Duct (Deprecated) tile.fluid_duct_box.name=Universal Fluid Duct (Boxduct) tile.fluid_duct_exhaust.name=Exhaust Pipe +tile.fluid_duct_paintable_block_exhaust.name=Paintable Coated Exhaust Pipe tile.fluid_duct_gauge.name=Flow Gauge Pipe tile.fluid_duct_gauge.desc=Pipe that displays how much fluid$moves within the network per tick.$Split networks connected by barrels$or tanks are considered as one shared network. tile.fluid_duct_neo.name=Universal Fluid Duct diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 5c3efa442..105832e03 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5551,6 +5551,7 @@ tile.floodlight.name=Электрический прожектор tile.fluid_duct.name=Универсальная жидкостная труба (Устаревшее) tile.fluid_duct_box.name=Универсальная жидкостная труба (Boxduct) tile.fluid_duct_exhaust.name=Выхлопная труба +tile.fluid_duct_paintable_block_exhaust.name=Окрашиваемая покрытая выхлопная труба tile.fluid_duct_gauge.name=Труба с измерителем потока tile.fluid_duct_gauge.desc=Труба которая показывает сколько жидкости$перемещается внутри сети за тик.$Разделенные сети, соединенные бочками$или резервуары рассматриваются как одна общая сеть. tile.fluid_duct_neo.name=Универсальная жидкостная труба diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 28776824b..9addd7c46 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5288,6 +5288,7 @@ tile.floodlight.name=Потужний прожектор tile.fluid_duct.name=Універсальний рідинний трубопровід (Застаріло) tile.fluid_duct_box.name=Універсальний рідинний трубопровід (Boxduct) tile.fluid_duct_exhaust.name=Вихлопна труба +tile.fluid_duct_paintable_block_exhaust.name=Вихлопна труба з покриттям tile.fluid_duct_gauge.name=Вимірювальна труба tile.fluid_duct_gauge.desc=Труба, що показує, скільки рідини$переміщується в мережі за один тік.$Розділені мережі, з'єднані бочками$або цистернами, вважаються однією спільною мережею. tile.fluid_duct_neo.name=Універсальний рідинний трубопровід diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 41847c119..5cf34ef87 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5021,6 +5021,7 @@ tile.floodlight.name=电力泛光灯 tile.fluid_duct.name=通用流体管道 tile.fluid_duct_box.name=通用流体管道(方形) tile.fluid_duct_exhaust.name=排气管 +tile.fluid_duct_paintable_block_exhaust.name=具有涂装性的排气管 tile.fluid_duct_gauge.name=流量计管 tile.fluid_duct_gauge.desc=显示每个游戏刻在管网有多少流体移动的管道$由桶或罐连接的分离网络被视为一个共享网络。 tile.fluid_duct_neo.name=通用流体管道 diff --git a/src/main/resources/assets/hbm/textures/blocks/fluid_duct_paintable_block_exhaust.png b/src/main/resources/assets/hbm/textures/blocks/fluid_duct_paintable_block_exhaust.png new file mode 100644 index 0000000000000000000000000000000000000000..85d4c5e3a7c7d8a0c76c61591d3edcd9c44bcd08 GIT binary patch literal 649 zcmV;40(Sk0P)0IY*?uP00GTOL_t(I%bkU57890Vt)2q6p_4^ZA@KO#uc|o2H?1Bj9weU^1B?r9^8@|K}%% z!x8i573JO|%d){h=N!&j{OJv#EK59ZOt$(;+c>PX)J;$48thnNtvxq8$B%8xr-vIr zUDtg3@|j7bv9_b@d&;Wja5&QK4{+%DRk;CjwL%=nc%DbmL$R}epFBn?#{Xx^hvfb; jepOWzML|&%FZ$9?b=TKg9l|GB00000NkvXXu0mjf1IG*o literal 0 HcmV?d00001 From 155595772c780f15dda30d13ee88836230a67211 Mon Sep 17 00:00:00 2001 From: DangerousMilk Date: Mon, 16 Jun 2025 17:48:05 +0200 Subject: [PATCH 03/17] Added recipe and changed function order to make more sense. --- .../FluidDuctPaintableBlockExhaust.java | 69 ++++++++++--------- .../java/com/hbm/main/CraftingManager.java | 1 + 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java index 3be2934af..24f792bc4 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -3,6 +3,7 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; import com.hbm.blocks.IBlockMultiPass; import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; @@ -33,13 +34,13 @@ import java.util.ArrayList; import java.util.List; public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay { - + @SideOnly(Side.CLIENT) protected IIcon overlay; - + public FluidDuctPaintableBlockExhaust() { - super(Material.iron); + super(Material.iron); } - + @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPipeExhaustPaintable(); @@ -51,15 +52,6 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_POISON); } - @Override - public void printHook(Pre event, World world, int x, int y, int z) { - List text = new ArrayList(); - text.add(Fluids.SMOKE.getLocalizedName()); - text.add(Fluids.SMOKE_LEADED.getLocalizedName()); - text.add(Fluids.SMOKE_POISON.getLocalizedName()); - ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); - } - @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister reg) { @@ -87,6 +79,27 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo return this.blockIcon; } + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) return false; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block != null) { + pipe.block = null; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + + return false; + } + @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { @@ -117,27 +130,6 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); } - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - - if(tool != ToolType.SCREWDRIVER) return false; - - TileEntity tile = world.getTileEntity(x, y, z); - - if(tile instanceof TileEntityPipeExhaustPaintable) { - TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; - - if(pipe.block != null) { - pipe.block = null; - world.markBlockForUpdate(x, y, z); - pipe.markDirty(); - return true; - } - } - - return false; - } - @Override public int getPasses() { return 2; @@ -148,6 +140,15 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo return IBlockMultiPass.getRenderType(); } + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + List text = new ArrayList(); + text.add(Fluids.SMOKE.getLocalizedName()); + text.add(Fluids.SMOKE_LEADED.getLocalizedName()); + text.add(Fluids.SMOKE_POISON.getLocalizedName()); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + public static class TileEntityPipeExhaustPaintable extends TileEntityPipeExhaust implements ICopiable { private Block block; diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 76646f307..86a280f16 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -604,6 +604,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_neo, 8, 1), new Object[] { "IAI", " ", "IAI", 'I', IRON.plate(), 'A', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_neo, 8, 2), new Object[] { "ASA", " ", "ASA", 'S', STEEL.plate(), 'A', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_paintable, 8), new Object[] { "SAS", "A A", "SAS", 'S', STEEL.ingot(), 'A', AL.plate() }); + addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_paintable_block_exhaust, 8), new Object[] { "SAS", "A A", "SAS", 'S', IRON.ingot(), 'A', ModItems.plate_polymer}); addShapelessAuto(new ItemStack(ModBlocks.fluid_duct_gauge), new Object[] { ModBlocks.fluid_duct_paintable, STEEL.ingot(), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); addRecipeAuto(new ItemStack(ModBlocks.fluid_valve, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.fluid_duct_paintable }); addRecipeAuto(new ItemStack(ModBlocks.fluid_switch, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.fluid_duct_paintable }); From 474148110dde8cad8489c816b887bb70db5076a4 Mon Sep 17 00:00:00 2001 From: DangerousMilk Date: Tue, 17 Jun 2025 14:23:45 +0200 Subject: [PATCH 04/17] Added the TileEntity to the TileMappings. Removed unnecessary canConnectTo function and TileEntityPipePaintable import --- .../network/FluidDuctPaintableBlockExhaust.java | 12 +++--------- src/main/java/com/hbm/tileentity/TileMappings.java | 2 ++ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java index 24f792bc4..1510ec422 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -1,9 +1,9 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; + import com.hbm.blocks.IBlockMultiPass; import com.hbm.blocks.ILookOverlay; -import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; @@ -45,12 +45,6 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPipeExhaustPaintable(); } - - public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir, TileEntity tile) { - return Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE) || - Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_LEADED) || - Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_POISON); - } @Override @SideOnly(Side.CLIENT) @@ -155,11 +149,11 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo private int meta; private Block lastBlock; private int lastMeta; - + @Override public void updateEntity() { super.updateEntity(); - + if(worldObj.isRemote && (lastBlock != block || lastMeta != meta)) { worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); lastBlock = block; diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index f8252b5af..0b41812fe 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -35,6 +35,7 @@ import com.hbm.blocks.network.CableDiode.TileEntityDiode; import com.hbm.blocks.network.CranePartitioner.TileEntityCranePartitioner; import com.hbm.blocks.network.FluidDuctGauge.TileEntityPipeGauge; import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; +import com.hbm.blocks.network.FluidDuctPaintableBlockExhaust.TileEntityPipeExhaustPaintable; import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch; import com.hbm.tileentity.bomb.*; @@ -410,6 +411,7 @@ public class TileMappings { put(TileEntityPipePaintable.class, "tileentity_pipe_paintable"); put(TileEntityPipeGauge.class, "tileentity_pipe_gauge"); put(TileEntityPipeExhaust.class, "tileentity_pipe_exhaust"); + put(TileEntityPipeExhaustPaintable.class, "tileentity_pipe_exhaust_paintable"); put(TileEntityFluidValve.class, "tileentity_pipe_valve"); put(TileEntityFluidPump.class, "tileentity_pipe_pump"); From ad4b1733d5bb4dec82df1792dc951409141cd437 Mon Sep 17 00:00:00 2001 From: DangerousMilk Date: Tue, 17 Jun 2025 20:30:54 +0200 Subject: [PATCH 05/17] Fixed NBT data not saving. --- .../network/FluidDuctPaintableBlockExhaust.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java index 1510ec422..f57b6f9b1 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -23,6 +23,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; @@ -96,7 +99,7 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { - + ItemStack stack = player.getHeldItem(); if(stack != null && stack.getItem() instanceof ItemBlock) { @@ -160,6 +163,18 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo lastMeta = meta; } } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } @Override public void readFromNBT(NBTTagCompound nbt) { From 06a1b9163d806729e2edbbaca570f628bc7d0f48 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Wed, 18 Jun 2025 16:57:55 +0800 Subject: [PATCH 06/17] M78 --- src/main/resources/assets/hbm/lang/zh_CN.lang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 41847c119..33c484487 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -1340,8 +1340,8 @@ hbmfluid.death=锇酸溶液 hbmfluid.deuterium=氘 hbmfluid.diesel=柴油 hbmfluid.diesel_crack=裂化柴油 -hbmfluid.diesel_crack_reform=高辛烷值裂化柴油 -hbmfluid.diesel_reform=高辛烷值柴油 +hbmfluid.diesel_crack_reform=高十六烷值裂化柴油 +hbmfluid.diesel_reform=高十六烷值柴油 hbmfluid.egg=蛋溶解液 hbmfluid.estradiol=雌二醇溶液 hbmfluid.ethanol=乙醇 @@ -5101,10 +5101,6 @@ tile.hadron_coil_neodymium.name=致密钕线圈 tile.hadron_coil_schrabidate.name=致密Sa酸铁线圈 tile.hadron_coil_schrabidium.name=致密Sa326线圈 tile.hadron_coil_starmetal.name=致密星辉线圈 -tile.hadron_cooler.name=粒子加速器冷却装置 -tile.hadron_cooler.desc=冷却功率:10$过冷阈值:10$冷却加成:+10%%$过冷惩罚:-25%% -tile.hadron_cooler_mk2.name=粒子加速器冷却装置-回文特制 -tile.hadron_cooler_mk2.desc=冷却功率:5$效率功能:2-(冷却-15)²/225$最高惩罚:-90%% tile.hadron_core.name=粒子加速器核心组件 tile.hadron_diode.name=肖基特二极管 tile.hadron_plating.name=粒子加速器镀层 @@ -6091,3 +6087,7 @@ tile.fan.falloffOff=稳定的风扇功率 tile.glass_polarized.name=偏光玻璃 tile.machine_autosaw.suspended=暂停 tile.machine_chemical_plant.name=化工厂二代 : 电子布加洛 +hbm.key.ability=循环工具能力 +hbm.key.abilityAlt=配置工具能力 +hbm.key.toggleMagnet=开关磁铁 +upgrade.speed=工作速度 %s From 9b08adc3144ff11e64c7544ca83590c2d7bda8ac Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 01:26:23 +0300 Subject: [PATCH 07/17] Mass Storage AE2 compat --- build.gradle | 15 +++ .../com/hbm/handler/ae2/AE2CompatHandler.java | 12 ++ .../ae2/MSUExternalStorageHandler.java | 44 ++++++++ .../handler/ae2/MassStorageMEInventory.java | 84 ++++++++++++++ src/main/java/com/hbm/main/MainRegistry.java | 4 + .../storage/TileEntityMassStorage.java | 105 ++++++++++++++++++ 6 files changed, 264 insertions(+) create mode 100644 src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java create mode 100644 src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java create mode 100644 src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java diff --git a/build.gradle b/build.gradle index 07cca4635..7becffe8b 100644 --- a/build.gradle +++ b/build.gradle @@ -79,6 +79,18 @@ repositories { // name = "CurseForge" // url = "https://minecraft.curseforge.com/api/maven/" //} + maven { + name = "Jitpack" + url = "https://jitpack.io" + } + maven { + name = "CurseMaven" + url = "https://cursemaven.com" + } + maven { + name = "OpenComputers" + url = "https://maven.cil.li/" + } } dependencies { @@ -94,6 +106,9 @@ dependencies { compileOnly "inventorytweaks:InventoryTweaks:1.59-dev:deobf" implementation "li.cil.oc:OpenComputers:MC1.7.10-1.5.+:api" + + implementation "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev" + compileOnly "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:sources" } processResources { diff --git a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java new file mode 100644 index 000000000..8efaa3e84 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java @@ -0,0 +1,12 @@ +package com.hbm.handler.ae2; + +import appeng.api.AEApi; +import cpw.mods.fml.common.Loader; + +public class AE2CompatHandler { + public static void init() { + if (Loader.isModLoaded("appliedenergistics2")) { + AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + } + } +} diff --git a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java new file mode 100644 index 000000000..ca83534b9 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java @@ -0,0 +1,44 @@ +package com.hbm.handler.ae2; + +import com.hbm.tileentity.machine.storage.TileEntityMassStorage; +import com.hbm.util.ItemStackUtil; + +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IExternalStorageHandler; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.me.storage.MEMonitorIInventory; +import appeng.util.inv.IMEAdaptor; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public class MSUExternalStorageHandler implements IExternalStorageHandler { + + public MSUExternalStorageHandler() {} + + @Override + public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { + return channel == StorageChannel.ITEMS && te instanceof TileEntityMassStorage; + } + + @Override + public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource src) { + if (!canHandle(te, d, channel, src)) + return null; + + // Note: apparently I need this, though I'm not sure why. Storage drawers does it. + // Here's a relevant discussion, if anyone wants to dive into that rabbit hole: + // https://github.com/AppliedEnergistics/Applied-Energistics-2/issues/418 + return new MEMonitorIInventory(new IMEAdaptor(new MassStorageMEInventory((TileEntityMassStorage)te), src)) { + @Override + public boolean isPrioritized(IAEItemStack stack) { + ItemStack type = ((TileEntityMassStorage)te).getType(); + + return type != null && ItemStackUtil.areStacksCompatible(stack.getItemStack(), type); + } + }; + } + +} diff --git a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java new file mode 100644 index 000000000..a2fe88c77 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java @@ -0,0 +1,84 @@ +package com.hbm.handler.ae2; + +import static com.hbm.inventory.OreDictManager.I; + +import com.hbm.tileentity.machine.storage.TileEntityMassStorage; +import com.hbm.util.ItemStackUtil; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import net.minecraft.item.ItemStack; + +public class MassStorageMEInventory implements IMEInventory { + + private TileEntityMassStorage tile; + + public MassStorageMEInventory(TileEntityMassStorage tile) { + this.tile = tile; + } + + @Override + public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) { + ItemStack typeStack = tile.getType(); + + if (typeStack == null || !ItemStackUtil.areStacksCompatible(input.getItemStack(), typeStack)) + return input; + + // If you're working with amounts greater than MAX_INT, you shouldn't use MSUs in the first place + int remaining = tile.increaseTotalStockpile((int)input.getStackSize(), type == Actionable.MODULATE); + + if (remaining == 0) { + return null; + } + + return AEApi.instance().storage() + .createItemStack(typeStack) + .setStackSize(remaining); + } + + @Override + public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) { + ItemStack typeStack = tile.getType(); + + if (typeStack == null || !ItemStackUtil.areStacksCompatible(request.getItemStack(), typeStack)) + return null; + + // If you're working with amounts greater than MAX_INT, you shouldn't use MSUs in the first place + int missing = tile.decreaseTotalStockpile((int)request.getStackSize(), mode == Actionable.MODULATE); + long fulfilled = request.getStackSize() - missing; + + if (fulfilled == 0) { + return null; + } + + return AEApi.instance().storage() + .createItemStack(typeStack) + .setStackSize(fulfilled); + } + + @Override + public IItemList getAvailableItems(IItemList out) { + ItemStack typeStack = tile.getType(); + + if (typeStack != null) { + out.add( + AEApi.instance().storage() + .createItemStack(typeStack) + .setStackSize(tile.getTotalStockpile()) + ); + } + + return out; + } + + @Override + public StorageChannel getChannel() { + return StorageChannel.ITEMS; + } + +} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index ab9f2f995..51c71e0ec 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -13,6 +13,7 @@ import com.hbm.entity.grenade.*; import com.hbm.entity.logic.IChunkLoader; import com.hbm.entity.mob.siege.SiegeTier; import com.hbm.handler.*; +import com.hbm.handler.ae2.AE2CompatHandler; import com.hbm.handler.imc.IMCBlastFurnace; import com.hbm.handler.imc.IMCCentrifuge; import com.hbm.handler.imc.IMCCrystallizer; @@ -881,6 +882,9 @@ public class MainRegistry { // Load compatibility for OC. CompatHandler.init(); + // Load compatibility for AE2. + AE2CompatHandler.init(); + //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); 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 8d939f523..6290254ff 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -7,6 +7,7 @@ import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.util.BufferUtil; +import com.hbm.util.ItemStackUtil; import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORValueProvider; @@ -15,6 +16,7 @@ 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.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -133,6 +135,109 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa return result; } + // Note: the following three methods are used for AE2 integration, and aren't meant to be called in any other context by default + + public int getTotalStockpile() { + ItemStack type = getType(); + if (type == null) + return 0; + + int result = getStockpile(); + + ItemStack inStack = slots[0]; + if (inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { + result += inStack.stackSize; + } + + ItemStack outStack = slots[2]; + if (outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { + result += outStack.stackSize; + } + + return result; + } + + // Returns the remainder that didn't fit. + // If `actually` is false, only predicts the outcome, but doesn't change the state + public int increaseTotalStockpile(int amount, boolean actually) { + return changeTotalStockpile(amount, actually, +1); + } + + // Returns the remainder that couldn't be extracted. + // If `actually` is false, only predicts the outcome, but doesn't change the state + public int decreaseTotalStockpile(int amount, boolean actually) { + return changeTotalStockpile(amount, actually, -1); + } + + private int changeTotalStockpile(int amount, boolean actually, int sign) { + ItemStack type = getType(); + + if (type == null) + return amount; + + int stockpileAvail = sign > 0 ? getCapacity() - getStockpile() : getStockpile(); + + if (amount > 0 && stockpileAvail > 0) { + int depositStockpile = Math.min(amount, stockpileAvail); + if (actually) { + this.stack += sign * depositStockpile; + } + amount -= depositStockpile; + } + + int inputAvail = 0; + ItemStack inStack = slots[0]; + if (inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { + inputAvail = sign > 0 ? inStack.getMaxStackSize() - inStack.stackSize : inStack.stackSize; + } else if (inStack == null) { + inputAvail = sign > 0 ? type.getMaxStackSize() : 0; + } + + if (amount > 0 && inputAvail > 0) { + int depositInput = Math.min(amount, inputAvail); + 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) { + slots[0] = null; + } + } + amount -= depositInput; + } + + int outputAvail = 0; + ItemStack outStack = slots[2]; + if (outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { + outputAvail = sign > 0 ? outStack.getMaxStackSize() - outStack.stackSize : outStack.stackSize; + } else if (outStack == null) { + outputAvail = sign > 0 ? type.getMaxStackSize() : 0; + } + + if (amount > 0 && outputAvail > 0) { + int depositOutput = Math.min(amount, outputAvail); + 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) { + slots[2] = null; + } + } + amount -= depositOutput; + } + + if (actually) { + this.markDirty(); + } + + return amount; + } + @Override public void serialize(ByteBuf buf) { buf.writeInt(this.stack); From eaa2dfa23d69678c0f50a64a27431fc75201bfb5 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 01:41:47 +0300 Subject: [PATCH 08/17] Add optional interface annotations --- .../java/com/hbm/handler/ae2/MSUExternalStorageHandler.java | 2 ++ .../java/com/hbm/handler/ae2/MassStorageMEInventory.java | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java index ca83534b9..be5dadbfa 100644 --- a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java +++ b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java @@ -2,6 +2,7 @@ package com.hbm.handler.ae2; import com.hbm.tileentity.machine.storage.TileEntityMassStorage; import com.hbm.util.ItemStackUtil; +import cpw.mods.fml.common.Optional; import appeng.api.networking.security.BaseActionSource; import appeng.api.storage.IExternalStorageHandler; @@ -14,6 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; +@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2") public class MSUExternalStorageHandler implements IExternalStorageHandler { public MSUExternalStorageHandler() {} diff --git a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java index a2fe88c77..4728043ff 100644 --- a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java +++ b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java @@ -1,10 +1,10 @@ package com.hbm.handler.ae2; -import static com.hbm.inventory.OreDictManager.I; - import com.hbm.tileentity.machine.storage.TileEntityMassStorage; import com.hbm.util.ItemStackUtil; +import cpw.mods.fml.common.Optional; + import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.networking.security.BaseActionSource; @@ -14,6 +14,7 @@ import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import net.minecraft.item.ItemStack; +@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2") public class MassStorageMEInventory implements IMEInventory { private TileEntityMassStorage tile; From 2744ab322c9c1068b7d785f25bd9956de28fbda2 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 01:53:05 +0300 Subject: [PATCH 09/17] Fix annotations Turns out the InterfaceList is obligatory, even if there's only one interface --- .../java/com/hbm/handler/ae2/MSUExternalStorageHandler.java | 2 +- src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java index be5dadbfa..fe82feb00 100644 --- a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java +++ b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java @@ -15,7 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2") +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2")}) public class MSUExternalStorageHandler implements IExternalStorageHandler { public MSUExternalStorageHandler() {} diff --git a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java index 4728043ff..848e2c053 100644 --- a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java +++ b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java @@ -14,7 +14,7 @@ import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import net.minecraft.item.ItemStack; -@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2") +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2")}) public class MassStorageMEInventory implements IMEInventory { private TileEntityMassStorage tile; From d15ab7079ae087fd7e48c1e443bbb9678f31fa76 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 02:00:14 +0300 Subject: [PATCH 10/17] Reduce dependencies If I understand it correctly, the implementation rule is there to include anything we use in the mod that is not part of the API? If so, I don't use anything like that. Anyway, it compiles, and it runs, so I'm happy with it. Revert this if issues arise, I guess --- build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 7becffe8b..4e7e8f7f4 100644 --- a/build.gradle +++ b/build.gradle @@ -107,8 +107,7 @@ dependencies { implementation "li.cil.oc:OpenComputers:MC1.7.10-1.5.+:api" - implementation "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev" - compileOnly "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:sources" + compileOnly "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev" } processResources { From 149e79f5501471ca8866039091b4732af2026203 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 02:25:57 +0300 Subject: [PATCH 11/17] Fix crash without AE2 --- src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java index 8efaa3e84..b40571179 100644 --- a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java +++ b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java @@ -2,11 +2,17 @@ package com.hbm.handler.ae2; import appeng.api.AEApi; import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.Optional; public class AE2CompatHandler { public static void init() { if (Loader.isModLoaded("appliedenergistics2")) { - AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + registerHandler(); } } + + @Optional.Method(modid = "appliedenergistics2") + private static void registerHandler() { + AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + } } From 014a253e4300c96a56ea981140a40540ce26b9f3 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Fri, 20 Jun 2025 12:09:26 +0300 Subject: [PATCH 12/17] =?UTF-8?q?=D1=85=D1=96=D0=BC=D1=96=D1=87=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B7=D0=B0=D0=B2=D0=BE=D0=B4=20uk=5FUA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/uk_UA.lang | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 9891b1542..991f16dee 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -774,6 +774,7 @@ container.machineAmmoPress=Прес для боєприпасів container.machineArcWelder=Дуговий зварювальник container.machineArcFurnaceLarge=Дугова піч container.machineBoiler=Нагрівач нафти +container.machineChemicalFactory=Хімічна фабрика container.machineChemicalPlant=Хімічний завод container.machineCMB=CMB Steel Furnace container.machineCoal=Твердопаливний генератор @@ -5489,9 +5490,11 @@ tile.machine_boiler_off.name=Старий бойлер tile.machine_catalytic_cracker.name=Вежа каталітичного крекінгу tile.machine_catalytic_reformer.name=Каталітичний риформер tile.machine_centrifuge.name=Центрифуга -tile.machine_chemfac.name=Хімічна фабрика -tile.machine_chemical_plant.name=Хімічний завод 2: Electric Boogaloo -tile.machine_chemplant.name=Хімічний завод +tile.machine_chemfac.name=Хімічна фабрика (Застаріла) +tile.machine_chemical_factory.name=Хімічна фабрика +tile.machine_chemical_factory.desc=Четверний хімічний завод.$Рецепти обробляються вдвічі швидше,$але потребують вдвічі більше енергії.$Потрібно охолоджуватися водою,$виробляє пару низького тиску. +tile.machine_chemical_plant.name=Хімічний завод +tile.machine_chemplant.name=Хімічний завод (Застарілий) tile.machine_chungus.name=Парова турбіна "Левіафан" tile.machine_chungus.desc=Ефективність: 85%% tile.machine_coal_off.name=Combustion Generator @@ -6166,12 +6169,13 @@ upgrade.acid=Необхідна кислота %s upgrade.burn=Burn %smb/t for %sHE upgrade.consumption=Споживання %s upgrade.coolantConsumption=Витрата охолоджувальної рідини %s -upgrade.delay=Швидкість роботи %s +upgrade.delay=Час роботи %s upgrade.efficiency=Ефективність %s upgrade.fortune=Вдача %s upgrade.overheatChance=Ймовірність перегріву %s upgrade.productivity=Продуктивність %s upgrade.range=Радіус %s +upgrade.speed=Швидкість роботи %s upgrade.gui.title=§lДопустимі покращення:§r upgrade.gui.afterburner= * §dФорсаж§r: Складається до %s рівнів From 5a12d14948894b6eb4470ceb6743daf3788608aa Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Fri, 20 Jun 2025 12:47:17 +0300 Subject: [PATCH 13/17] fuck --- src/main/resources/assets/hbm/lang/uk_UA.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 991f16dee..998614bf9 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5492,7 +5492,7 @@ tile.machine_catalytic_reformer.name=Каталітичний риформер tile.machine_centrifuge.name=Центрифуга tile.machine_chemfac.name=Хімічна фабрика (Застаріла) tile.machine_chemical_factory.name=Хімічна фабрика -tile.machine_chemical_factory.desc=Четверний хімічний завод.$Рецепти обробляються вдвічі швидше,$але потребують вдвічі більше енергії.$Потрібно охолоджуватися водою,$виробляє пару низького тиску. +tile.machine_chemical_factory.desc=Четверний хімічний завод.$Рецепти обробляються вдвічі швидше,$але потребують вдвічі більше енергії.$Потрібно охолодження водою,$виробляє пару низького тиску. tile.machine_chemical_plant.name=Хімічний завод tile.machine_chemplant.name=Хімічний завод (Застарілий) tile.machine_chungus.name=Парова турбіна "Левіафан" From 1615096a8439b49beb0c7257ca5a5bcea4700bb4 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Tue, 24 Jun 2025 09:23:32 +0300 Subject: [PATCH 14/17] i just don't know --- src/main/resources/assets/hbm/lang/uk_UA.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 998614bf9..e3a137691 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -3706,7 +3706,7 @@ item.pellet_rtg_cobalt.name=РІТЕГ гранула кобальту-60 item.pellet_rtg_cobalt.desc=Не найкращий як РІТЕГ, але чудовий для гамма-випромінювання! item.pellet_rtg_depleted.bismuth.name=Розкладена вісмутова РІТЕГ гранула item.pellet_rtg_depleted.lead.name=Розкладена свинцева РІТЕГ гранула -item.pellet_rtg_depleted.neptunium.name=Розкладена немтунієва РІТЕГ гранула +item.pellet_rtg_depleted.neptunium.name=Розкладена нептунієва РІТЕГ гранула item.pellet_rtg_depleted.mercury.name=Розкладена ртутна РІТЕГ гранула item.pellet_rtg_depleted.nickel.name=Розкладена нікелева РІТЕГ гранула item.pellet_rtg_depleted.zirconium.name=Розкладена цирконієва РІТЕГ гранула @@ -5809,7 +5809,7 @@ tile.pump_electric.desc=Використовує електроенергію д tile.pump_steam.name=Паровий насос ґрунтових вод tile.pump_steam.desc=Використовує пару для відкачування ґрунтових вод$Генерує до 1,000mB/t$Повинен бути розміщений нижче Y:70 tile.pwr_block.name=ВВЕР -tile.pwr_casing.name=Корпус рекатора ВВЕР +tile.pwr_casing.name=Корпус реактора ВВЕР tile.pwr_casing.desc=Потрібно покрити всі внутрішні частини реактора для формування$Розміщення: Корпус tile.pwr_channel.name=Канал теплоносія ВВЕР tile.pwr_channel.desc=Використовує тепло корпусу для нагрівання охолоджувальної рідини$Розміщення: Будь-яке From 18d8fe292ce4d34aded5c036d0c4874e78ae316d Mon Sep 17 00:00:00 2001 From: MerrittK <65367913+MerrittK@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:40:21 -0400 Subject: [PATCH 15/17] Fixed Advanced rocketry moon turf compat --- src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index efd778696..6b02b0610 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -360,9 +360,9 @@ public class ShredderRecipes extends SerializableRecipe { /* AR COMPAT */ Block arMoonTurf = Compat.tryLoadBlock(Compat.MOD_AR, "turf"); - if(arMoonTurf != null && gcMoonBlock != Blocks.air) ShredderRecipes.setRecipe(arMoonTurf, new ItemStack(ModBlocks.moon_turf)); //i assume it's moon turf + if(arMoonTurf != null && arMoonTurf != Blocks.air) ShredderRecipes.setRecipe(arMoonTurf, new ItemStack(ModBlocks.moon_turf)); //i assume it's moon turf Block arMoonTurfDark = Compat.tryLoadBlock(Compat.MOD_AR, "turfDark"); - if(arMoonTurfDark != null && gcMoonBlock != Blocks.air) ShredderRecipes.setRecipe(arMoonTurfDark, new ItemStack(ModBlocks.moon_turf)); //probably moon dirt? would have helped if i had ever played AR for more than 5 seconds + if(arMoonTurfDark != null && arMoonTurfDark != Blocks.air) ShredderRecipes.setRecipe(arMoonTurfDark, new ItemStack(ModBlocks.moon_turf)); //probably moon dirt? would have helped if i had ever played AR for more than 5 seconds } /** From 7737ac7989881a68aa88df285ebca17b33360247 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 24 Jun 2025 17:46:18 -0400 Subject: [PATCH 16/17] Rotary Furnace Port Tooltip Says what it does on the tin, hovering over the rotary furnace steam, fluid, and fuel ports, tells you what each one is for Also gets rid of a vanilla obfuscation ID variable on a NTM class for strange reasons --- .../blocks/machine/MachineRotaryFurnace.java | 60 ++++++++++++++++++- .../com/hbm/entity/particle/EntityModFX.java | 5 +- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java b/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java index 1f5e3d119..e252c8445 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java +++ b/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java @@ -1,15 +1,23 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineRotaryFurnace; +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.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.util.ForgeDirection; -public class MachineRotaryFurnace extends BlockDummyable { +import java.util.ArrayList; +import java.util.List; + +public class MachineRotaryFurnace extends BlockDummyable implements ILookOverlay { public MachineRotaryFurnace(Material mat) { super(mat); @@ -56,4 +64,54 @@ public class MachineRotaryFurnace extends BlockDummyable { //solid fuel this.makeExtra(world, x + dir.offsetX + rot.offsetX, y, z + dir.offsetZ + rot.offsetZ); } + + @Override + public void printHook(RenderGameOverlayEvent.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 TileEntityMachineRotaryFurnace)) return; + + TileEntityMachineRotaryFurnace furnace = (TileEntityMachineRotaryFurnace) te; + + ForgeDirection dir = ForgeDirection.getOrientation(furnace.getBlockMetadata() - offset); + + List text = new ArrayList<>(); + + //steam + if(hitCheck(dir, pos[0], pos[1], pos[2], -1, -1, 0, x, y, z) || hitCheck(dir, pos[0], pos[1], pos[2], -1, -2, 0, x, y, z)) { + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + furnace.tanks[1].getTankType().getLocalizedName()); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + furnace.tanks[2].getTankType().getLocalizedName()); + } + + //fluids + if(hitCheck(dir, pos[0], pos[1], pos[2], 1, 2, 0, x, y, z) || hitCheck(dir, pos[0], pos[1], pos[2], -1, 2, 0, x, y, z)) { + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + furnace.tanks[0].getTankType().getLocalizedName()); + } + + if(hitCheck(dir, pos[0], pos[1], pos[2], 1, 1, 0, x, y, z)) { + text.add(EnumChatFormatting.YELLOW + "-> " + EnumChatFormatting.RESET + "Fuel"); + } + + + if(!text.isEmpty()) { + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + } + + protected boolean hitCheck(ForgeDirection dir, int coreX, int coreY, int coreZ, int exDir, int exRot, int exY, int hitX, int hitY, int hitZ) { + + ForgeDirection turn = dir.getRotation(ForgeDirection.DOWN); + + int iX = coreX + dir.offsetX * exDir + turn.offsetX * exRot; + int iY = coreY + exY; + int iZ = coreZ + dir.offsetZ * exDir + turn.offsetZ * exRot; + + return iX == hitX && iZ == hitZ && iY == hitY; + } + } diff --git a/src/main/java/com/hbm/entity/particle/EntityModFX.java b/src/main/java/com/hbm/entity/particle/EntityModFX.java index e416965d4..16efa997f 100644 --- a/src/main/java/com/hbm/entity/particle/EntityModFX.java +++ b/src/main/java/com/hbm/entity/particle/EntityModFX.java @@ -31,7 +31,6 @@ public class EntityModFX extends Entity public static double interpPosX; public static double interpPosY; public static double interpPosZ; - public static final String __OBFID = "CL_00000914"; float smokeParticleScale; public int particleAge; public int maxAge; @@ -39,7 +38,7 @@ public class EntityModFX extends Entity public EntityModFX(World world) { super(world); } - + protected EntityModFX(World p_i1218_1_, double p_i1218_2_, double p_i1218_4_, double p_i1218_6_) { super(p_i1218_1_); @@ -257,7 +256,7 @@ public class EntityModFX extends Entity { return this.getClass().getSimpleName() + ", Pos (" + this.posX + "," + this.posY + "," + this.posZ + "), RGBA (" + this.particleRed + "," + this.particleGreen + "," + this.particleBlue + "," + this.particleAlpha + "), Age " + this.particleAge; } - + @Override @SideOnly(Side.CLIENT) public boolean isInRangeToRenderDist(double distance) From a982616f89aa0ace4571012507a9426dcd2ddfd9 Mon Sep 17 00:00:00 2001 From: MerrittK <65367913+MerrittK@users.noreply.github.com> Date: Wed, 25 Jun 2025 15:12:00 -0400 Subject: [PATCH 17/17] I had to reinvent the wheel because of a different config implementation. --- .../java/com/hbm/config/CommonConfig.java | 4 ++-- .../java/com/hbm/config/GeneralConfig.java | 6 +++-- .../inventory/recipes/ShredderRecipes.java | 5 ++-- src/main/java/com/hbm/util/Compat.java | 24 ++++++++++++++++++- src/main/java/com/hbm/util/ItemStackUtil.java | 16 +++++++++++++ 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/hbm/config/CommonConfig.java b/src/main/java/com/hbm/config/CommonConfig.java index 7fce253e8..d6ead8f95 100644 --- a/src/main/java/com/hbm/config/CommonConfig.java +++ b/src/main/java/com/hbm/config/CommonConfig.java @@ -81,8 +81,8 @@ public class CommonConfig { prop.comment = comment; return prop.getIntList(); } - public static String[] createConfigStringList(Configuration config, String category, String name, String comment) { - Property prop = config.get(category, name, new String[] { "PLACEHOLDER" }); + public static String[] createConfigStringList(Configuration config, String category, String name, String comment, String[] def) { + Property prop = config.get(category, name, def); prop.comment = comment; return prop.getStringList(); } diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index 09900f007..c843cde57 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -1,7 +1,7 @@ package com.hbm.config; import net.minecraftforge.common.config.Configuration; - +import com.hbm.lib.RefStrings; public class GeneralConfig { public static boolean enableThermosPreventer = true; @@ -70,6 +70,7 @@ public class GeneralConfig { public static boolean enableLBSMSafeMEDrives = true; public static boolean enableLBSMIGen = true; public static int schrabRate = 20; + public static String[] preferredOutputMod = new String[] {RefStrings.MODID}; public static void loadFromConfig(Configuration config) { @@ -117,7 +118,8 @@ public class GeneralConfig { normalSoundChannels = CommonConfig.createConfigInt(config, CATEGORY_GENERAL, "1.41_normalSoundChannels", "The amount of channels to create while 1.39_enableSoundExtension is enabled.\n" + "Note that a value below 28 or above 200 can cause buggy sounds and issues with other mods running out of sound memory.", 100); - + preferredOutputMod = CommonConfig.createConfigStringList(config,CATEGORY_GENERAL,"1.42_preferredOutputMod", + "The mod which is preferred as output when certain machines autogenerate recipes. Currently used for the shredder", new String[] {RefStrings.MODID}); enableExpensiveMode = config.get(CATEGORY_GENERAL, "1.99_enableExpensiveMode", false, "It does what the name implies.").getBoolean(false); final String CATEGORY_528 = CommonConfig.CATEGORY_528; diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index 6b02b0610..908804a5e 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -374,8 +374,9 @@ public class ShredderRecipes extends SerializableRecipe { List matches = OreDictionary.getOres("dust" + name); - if(matches != null && !matches.isEmpty()) - return matches.get(0).copy(); + if(matches != null && !matches.isEmpty()) { + return Compat.getPreferredOreOutput(matches); + } return new ItemStack(ModItems.scrap); } diff --git a/src/main/java/com/hbm/util/Compat.java b/src/main/java/com/hbm/util/Compat.java index cac127f1a..db59a6026 100644 --- a/src/main/java/com/hbm/util/Compat.java +++ b/src/main/java/com/hbm/util/Compat.java @@ -49,7 +49,29 @@ public class Compat { private static String getReg(String domain, String name) { return domain + ":" + name; } - + + public static ItemStack getPreferredOreOutput(List oreList) { + int lowestPref = -1; + ItemStack preferredStack = null; + + for(ItemStack item : oreList) { + String modid = ItemStackUtil.getModIdFromItemStack(item); + for(int i = 0; i < GeneralConfig.preferredOutputMod.length; i++) { + if (modid.equals(GeneralConfig.preferredOutputMod[i])){ + if (lowestPref<0 || i