From 72500ed74923ab6cc5476d84c125c4651a72ead9 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Fri, 9 Jan 2026 16:28:44 +0200 Subject: [PATCH 1/7] =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=BC=D0=BE=D1=8F=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=BD=D1=8B=D0=B9=20=D1=82=D0=B5=D1=80=D0=BC=D0=BE?= =?UTF-8?q?=D1=8F=D0=B4=D0=B5=D1=80=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index f7ac4d346..f44cd5806 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5852,6 +5852,8 @@ tile.fusion_collector.name=Улавливающая камера (термояд tile.fusion_collector.desc=Собирает дополнительное количество продуктов$при подключении к основной камере. tile.fusion_klystron.name=Клистрон (термоядерный реактор) tile.fusion_klystron.desc=Зажигает термоядерный реактор.$Требует охлаждения сжатым воздухом. +tile.fusion_klystron_creative.name=Творческий клистрон (термоядерный реактор) +tile.fusion_klystron_creative.desc=Обеспечивает бесконечную энергию клистрона. tile.fusion_mhdt.name=МГД-турбина (термоядерный реактор) tile.fusion_mhdt.desc=Извлекает электроэнергию из плазмы напрямую,$что позволяет достичь меньших потерь.$Требуется охлаждение! tile.fusion_torus.name=Основная камера (термоядерный реактор) @@ -6825,5 +6827,6 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From 439d5e52b878e8c9a690644059d7f62666f2eb09 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Fri, 9 Jan 2026 16:43:32 +0200 Subject: [PATCH 2/7] =?UTF-8?q?=D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D1=81=D1=81=D0=B8=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index f44cd5806..f28347487 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6010,6 +6010,7 @@ tile.machine_battery.name=Энергохранилище (LEGACY) tile.machine_battery_potato.name=Картофельная батарея (LEGACY) tile.machine_battery_redd.name=ЭМЭХ tile.machine_battery_socket.name=Аккумуляторный массив +tile.machine_battery_socket.desc=Позволяет подключать аккумуляторы$напрямую к энергосети.$Выступает в качестве кабеля, все порты$подключены к одной сети. tile.machine_boiler.name=Бойлер tile.machine_boiler.desc=Большой бойлер для кипячения воды или нагрева нефти.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Электрический нагреватель нефти @@ -6828,5 +6829,6 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From be93b9cc8c1bf2abb5d808dff69d29bdf561a53a Mon Sep 17 00:00:00 2001 From: Voxelstice <95834462+Voxelstice@users.noreply.github.com> Date: Fri, 9 Jan 2026 23:01:38 +0300 Subject: [PATCH 3/7] waiter! waiter! more lead acid batteries please! adds OC compat to new battery blocks --- .../storage/TileEntityBatteryBase.java | 91 ++++++++++++++--- .../storage/TileEntityBatteryREDD.java | 84 ++++++++++++---- .../storage/TileEntityBatterySocket.java | 97 +++++++++++++++---- .../storage/TileEntityMachineBattery.java | 14 +-- 4 files changed, 226 insertions(+), 60 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java index 34976ac9d..27e1bb726 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine.storage; +import com.hbm.handler.CompatHandler; import com.hbm.interfaces.IControlReceiver; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -14,19 +15,25 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.energymk2.Nodespace; import api.hbm.energymk2.Nodespace.PowerNode; +import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.SimpleComponent; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; -public abstract class TileEntityBatteryBase extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { +@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) +public abstract class TileEntityBatteryBase extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent { public byte lastRedstone = 0; public long prevPowerState = 0; - + public static final int mode_input = 0; public static final int mode_buffer = 1; public static final int mode_output = 2; @@ -36,20 +43,20 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem public ConnectionPriority priority = ConnectionPriority.LOW; protected PowerNode node; - + public TileEntityBatteryBase(int slotCount) { super(slotCount); } @Override public void updateEntity() { - + if(!worldObj.isRemote) { if(priority == null || priority.ordinal() == 0 || priority.ordinal() == 4) { priority = ConnectionPriority.LOW; } - + if(this.node == null || this.node.expired) { this.node = (PowerNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); @@ -58,20 +65,20 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem UniNodespace.createNode(worldObj, this.node); } } - + if(this.node != null && this.node.hasValidNet()) switch(this.getRelevantMode(false)) { case mode_input: this.node.net.removeProvider(this); this.node.net.addReceiver(this); break; case mode_output: this.node.net.addProvider(this); this.node.net.removeReceiver(this); break; case mode_buffer: this.node.net.addProvider(this); this.node.net.addReceiver(this); break; case mode_none: this.node.net.removeProvider(this); this.node.net.removeReceiver(this); break; } - + byte comp = this.getComparatorPower(); if(comp != this.lastRedstone) this.markDirty(); this.lastRedstone = comp; prevPowerState = this.getPower(); - + this.networkPackNT(100); } } @@ -80,7 +87,7 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem double frac = (double) this.getPower() / (double) this.getMaxPower() * 15D; return (byte) (MathHelper.clamp_int((int) frac + 1, 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower } - + @Override public PowerNode createNode() { return new PowerNode(this.getPortPos()).setConnections(this.getConPos()); @@ -105,7 +112,7 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem @Override public void serialize(ByteBuf buf) { super.serialize(buf); - + buf.writeShort(redLow); buf.writeShort(redHigh); buf.writeByte(priority.ordinal()); @@ -147,7 +154,7 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem public abstract DirPos[] getConPos(); private short modeCache = 0; - + public short getRelevantMode(boolean useCache) { if(useCache) return this.modeCache; boolean powered = false; @@ -155,7 +162,7 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem this.modeCache = powered ? this.redHigh : this.redLow; return this.modeCache; } - + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } @Override @@ -175,10 +182,68 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, ordinal); } } - + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { return 65536.0D; } + + // do some opencomputer stuff + @Override + @Optional.Method(modid = "OpenComputers") + public String getComponentName() { + return "ntm_energy_storage"; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEnergyInfo(Context context, Arguments args) { + return new Object[] {getPower(), getMaxPower()}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getModeInfo(Context context, Arguments args) { + return new Object[] {redLow, redHigh, getPriority().ordinal()}; + } + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] setModeLow(Context context, Arguments args) { + short newMode = (short) args.checkInteger(0); + if (newMode >= mode_input && newMode <= mode_none) { + redLow = newMode; + return new Object[] {}; + } else { + return new Object[] {"Invalid mode"}; + } + } + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] setModeHigh(Context context, Arguments args) { + short newMode = (short) args.checkInteger(0); + if (newMode >= mode_input && newMode <= mode_none) { + redHigh = newMode; + return new Object[] {}; + } else { + return new Object[] {"Invalid mode"}; + } + } + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] setPriority(Context context, Arguments args) { + int newPriority = args.checkInteger(0); + if (newPriority >= 0 && newPriority <= 2) { + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, newPriority+1); + return new Object[] {}; + } else { + return new Object[] {"Invalid mode"}; + } + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getInfo(Context context, Arguments args) { + return new Object[] {getPower(), getMaxPower(), redLow, redHigh, getPriority().ordinal()}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java index 13f07574f..e5293088f 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java @@ -10,7 +10,11 @@ import com.hbm.sound.AudioWrapper; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import cpw.mods.fml.common.Optional; import io.netty.buffer.ByteBuf; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -25,28 +29,28 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { public BigInteger[] log = new BigInteger[20]; public BigInteger delta = BigInteger.valueOf(0); - + public BigInteger power = BigInteger.valueOf(0); - + private AudioWrapper audio; public TileEntityBatteryREDD() { super(2); } - + @Override public String getName() { return "container.batteryREDD"; } @Override public void updateEntity() { BigInteger prevPower = new BigInteger(power.toByteArray()); - + super.updateEntity(); - + if(!worldObj.isRemote) { - + long toAdd = Library.chargeTEFromItems(slots, 0, 0, this.getMaxPower()); if(toAdd > 0) this.power = this.power.add(BigInteger.valueOf(toAdd)); - + long toRemove = this.getPower() - Library.chargeItemsFromTE(slots, 1, this.getPower(), this.getMaxPower()); if(toRemove > 0)this.power = this.power.subtract(BigInteger.valueOf(toRemove)); @@ -59,16 +63,16 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { } this.log[19] = avg; - + } else { this.prevRotation = this.rotation; this.rotation += this.getSpeed(); - + if(rotation >= 360) { rotation -= 360; prevRotation -= 360; } - + float pitch = 0.5F + this.getSpeed() / 15F * 1.5F; if(this.prevRotation != this.rotation && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 5.5, zCoord + 0.5) < 30 * 30) { @@ -76,11 +80,11 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { this.audio = MainRegistry.proxy.getLoopedSound("hbm:block.fensuHum", xCoord, yCoord, zCoord, this.getVolume(1.5F), 25F, pitch, 5); this.audio.startSound(); } - + this.audio.updateVolume(this.getVolume(1.5F)); this.audio.updatePitch(pitch); this.audio.keepAlive(); - + } else { if(this.audio != null) { this.audio.stopSound(); @@ -89,7 +93,7 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { } } } - + public float getSpeed() { return (float) Math.min(Math.pow(Math.log(this.power.doubleValue() * 0.05 + 1) * 0.05F, 5), 15F); } @@ -141,7 +145,7 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - + this.power = new BigInteger(nbt.getByteArray("power")); } @@ -149,7 +153,7 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - + nbt.setByteArray("power", this.power.toByteArray()); } @@ -186,7 +190,7 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { public void usePower(long power) { this.power = this.power.subtract(BigInteger.valueOf(power)); } - + @Override public long transferPower(long power) { this.power = this.power.add(BigInteger.valueOf(power)); @@ -199,12 +203,12 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerBatteryREDD(player.inventory, this); } @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBatteryREDD(player.inventory, this); } - + AxisAlignedBB bb = null; - + @Override public AxisAlignedBB getRenderBoundingBox() { - + if(bb == null) { bb = AxisAlignedBB.getBoundingBox( xCoord - 4, @@ -215,7 +219,47 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { zCoord + 5 ); } - + return bb; } + + // do some opencomputer stuff + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEnergyInfo(Context context, Arguments args) { + return new Object[] {this.power.doubleValue(), this.delta.longValue()}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getInfo(Context context, Arguments args) { + return new Object[] {this.power.doubleValue(), this.delta.longValue(), redLow, redHigh, getPriority().ordinal()}; + } + + @Override + @Optional.Method(modid = "OpenComputers") + public String[] methods() { + return new String[] { + "getEnergyInfo", + "getModeInfo", + "setModeLow", + "setModeHigh", + "setPriority", + "getInfo" + }; + } + + @Override + @Optional.Method(modid = "OpenComputers") + public Object[] invoke(String method, Context context, Arguments args) throws Exception { + switch (method) { + case "getEnergyInfo": return getEnergyInfo(context, args); + case "getModeInfo": return getModeInfo(context, args); + case "setModeLow": return setModeLow(context, args); + case "setModeHigh": return setModeHigh(context, args); + case "setPriority": return setPriority(context, args); + case "getInfo": return getInfo(context, args); + } + throw new NoSuchMethodException(); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java index 5fd082740..e2f010565 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -12,7 +12,11 @@ import api.hbm.energymk2.IBatteryItem; import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.tile.IInfoProviderEC; +import cpw.mods.fml.common.Optional; import io.netty.buffer.ByteBuf; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -25,21 +29,21 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR public long[] log = new long[20]; public long delta = 0; - + public int renderPack = -1; - + public TileEntityBatterySocket() { super(1); } - + @Override public String getName() { return "container.batterySocket"; } @Override public void updateEntity() { long prevPower = this.getPower(); - + super.updateEntity(); - + if(!worldObj.isRemote) { long avg = (this.getPower() + prevPower) / 2; @@ -56,7 +60,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR @Override public void serialize(ByteBuf buf) { super.serialize(buf); - + int renderPack = -1; if(slots[0] != null && slots[0].getItem() == ModItems.battery_pack) { renderPack = slots[0].getItemDamage(); @@ -88,7 +92,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; return ((IBatteryItem) slots[0].getItem()).getCharge(slots[0]); } - + @Override public void setPower(long power) { if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return; @@ -124,7 +128,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR new BlockPos(xCoord - dir.offsetX + rot.offsetX, yCoord, zCoord - dir.offsetZ + rot.offsetZ) }; } - + @Override public DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); @@ -132,13 +136,13 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR return new DirPos[] { new DirPos(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir), new DirPos(xCoord + dir.offsetX + rot.offsetX, yCoord, zCoord + dir.offsetZ + rot.offsetZ, dir), - + new DirPos(xCoord - dir.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2, dir.getOpposite()), new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ, dir.getOpposite()), - + new DirPos(xCoord + rot.offsetX * 2, yCoord, zCoord + rot.offsetZ * 2, rot), new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ, rot), - + new DirPos(xCoord - rot.offsetX, yCoord, zCoord - rot.offsetZ, rot.getOpposite()), new DirPos(xCoord - rot.offsetX - dir.offsetX, yCoord, zCoord - rot.offsetZ - dir.offsetZ, rot.getOpposite()) }; @@ -146,12 +150,12 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerBatterySocket(player.inventory, this); } @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBatterySocket(player.inventory, this); } - + AxisAlignedBB bb = null; - + @Override public AxisAlignedBB getRenderBoundingBox() { - + if(bb == null) { bb = AxisAlignedBB.getBoundingBox( xCoord - 1, @@ -162,7 +166,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR zCoord + 2 ); } - + return bb; } @@ -190,10 +194,10 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR @Override public String runRORFunction(String name, String[] params) { - + if((PREFIX_FUNCTION + "setmode").equals(name) && params.length > 0) { int mode = IRORInteractive.parseInt(params[0], 0, 3); - + if(mode != this.redLow) { this.redLow = (short) mode; this.markChanged(); @@ -206,10 +210,10 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR } return null; } - + if((PREFIX_FUNCTION + "setredmode").equals(name) && params.length > 0) { int mode = IRORInteractive.parseInt(params[0], 0, 3); - + if(mode != this.redHigh) { this.redHigh = (short) mode; this.markChanged(); @@ -222,7 +226,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR } return null; } - + if((PREFIX_FUNCTION + "setpriority").equals(name) && params.length > 0) { int priority = IRORInteractive.parseInt(params[0], 0, 2) + 1; ConnectionPriority p = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority); @@ -237,4 +241,57 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR public void provideExtraInfo(NBTTagCompound data) { data.setLong(CompatEnergyControl.L_DIFF_HE, (log[0] - log[19]) / 20L); } + + // do some opencomputer stuff + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEnergyInfo(Context context, Arguments args) { + return new Object[] {getPower(), getMaxPower(), this.delta}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getPackInfo(Context context, Arguments args) { + if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return new Object[] {"", 0, 0}; + IBatteryItem bat = ((IBatteryItem) slots[0].getItem()); + return new Object[] {slots[0].getUnlocalizedName(), bat.getChargeRate(slots[0]), bat.getDischargeRate(slots[0])}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getInfo(Context context, Arguments args) { + Object[] energyInfo = getEnergyInfo(context, args); + Object[] packInfo = getPackInfo(context, args); + Object[] modeInfo = getModeInfo(context, args); + return new Object[] {energyInfo[0], energyInfo[1], energyInfo[2], modeInfo[0], modeInfo[1], modeInfo[2], packInfo[0], packInfo[1], packInfo[2]}; + } + + @Override + @Optional.Method(modid = "OpenComputers") + public String[] methods() { + return new String[] { + "getEnergyInfo", + "getPackInfo", + "getModeInfo", + "setModeLow", + "setModeHigh", + "setPriority", + "getInfo" + }; + } + + @Override + @Optional.Method(modid = "OpenComputers") + public Object[] invoke(String method, Context context, Arguments args) throws Exception { + switch (method) { + case "getEnergyInfo": return getEnergyInfo(context, args); + case "getPackInfo": return getPackInfo(context, args); + case "getModeInfo": return getModeInfo(context, args); + case "setModeLow": return setModeLow(context, args); + case "setModeHigh": return setModeHigh(context, args); + case "setPriority": return setPriority(context, args); + case "getInfo": return getInfo(context, args); + } + throw new NoSuchMethodException(); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 3c0a726bb..23666eac8 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -129,7 +129,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I nbt.setShort("redHigh", redHigh); nbt.setByte("lastRedstone", lastRedstone); nbt.setByte("priority", (byte)this.priority.ordinal()); - + if (customName != null) { nbt.setString("name", customName); } @@ -320,7 +320,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I @Override @Optional.Method(modid = "OpenComputers") public String getComponentName() { - return "ntm_energy_storage"; //ok if someone else can figure out how to do this that'd be nice (change the component name based on the type of storage block) + return "ntm_energy_storage_legacy"; } @Callback(direct = true) @@ -396,10 +396,10 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I @Override public String runRORFunction(String name, String[] params) { - + if((PREFIX_FUNCTION + "setmode").equals(name) && params.length > 0) { int mode = IRORInteractive.parseInt(params[0], 0, 3); - + if(mode != this.redLow) { this.redLow = (short) mode; this.markChanged(); @@ -412,10 +412,10 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I } return null; } - + if((PREFIX_FUNCTION + "setredmode").equals(name) && params.length > 0) { int mode = IRORInteractive.parseInt(params[0], 0, 3); - + if(mode != this.redHigh) { this.redHigh = (short) mode; this.markChanged(); @@ -428,7 +428,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I } return null; } - + if((PREFIX_FUNCTION + "setpriority").equals(name) && params.length > 0) { int priority = IRORInteractive.parseInt(params[0], 0, 2) + 1; ConnectionPriority p = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority); From 65ea177ac0dcd4d565d025e97d231b06cd9921ad Mon Sep 17 00:00:00 2001 From: Voxelstice <95834462+Voxelstice@users.noreply.github.com> Date: Fri, 9 Jan 2026 23:05:21 +0300 Subject: [PATCH 4/7] consider not forgetting. thanks. priority is outputted correctly now --- .../hbm/tileentity/machine/storage/TileEntityBatteryBase.java | 4 ++-- .../hbm/tileentity/machine/storage/TileEntityBatteryREDD.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java index 27e1bb726..93491c6e6 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java @@ -205,7 +205,7 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getModeInfo(Context context, Arguments args) { - return new Object[] {redLow, redHigh, getPriority().ordinal()}; + return new Object[] {redLow, redHigh, getPriority().ordinal()-1}; } @Callback(direct = true) @Optional.Method(modid = "OpenComputers") @@ -244,6 +244,6 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {getPower(), getMaxPower(), redLow, redHigh, getPriority().ordinal()}; + return new Object[] {getPower(), getMaxPower(), redLow, redHigh, getPriority().ordinal()-1}; } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java index e5293088f..f3863cfdf 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java @@ -233,7 +233,7 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {this.power.doubleValue(), this.delta.longValue(), redLow, redHigh, getPriority().ordinal()}; + return new Object[] {this.power.doubleValue(), this.delta.longValue(), redLow, redHigh, getPriority().ordinal()-1}; } @Override From 4bfce2ba92a389a2829809510f6a834ffac2105b Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 10 Jan 2026 14:39:59 +0100 Subject: [PATCH 5/7] Auto stash before merge of "master" and "origin/master" --- changelog | 4 +++- .../java/com/hbm/handler/nei/NEIUniversalHandler.java | 2 +- .../hbm/inventory/recipes/AssemblyMachineRecipes.java | 8 ++++---- .../hbm/inventory/recipes/loader/GenericRecipe.java | 11 +++++++++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/changelog b/changelog index 100a12032..31c62c549 100644 --- a/changelog +++ b/changelog @@ -17,4 +17,6 @@ * Fixed fluid counter valve not having a recipe * Fixed issue where `/ntmreload` would break registered fluids from addons * Fixed yet another issue regarding crates -* Fixed RBMK fluid heaters losing their tank types when unable to boil anything \ No newline at end of file +* Fixed RBMK fluid heaters losing their tank types when unable to boil anything +* Fixed the FEnSU, cyclotron and reliant robin missile being uncraftable due to stacksize limitations + * The system for detecting impossible recipe has been improved, instead of a fixed 64 item limit, it now uses the actual limit of the item (or 64 for ore dictionary inputs) \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index 471469d49..2e1b46619 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -23,7 +23,7 @@ import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -@Deprecated +@Deprecated // an experiment that i had to staple more and more features to until it ended up a bloated decaying corpse public abstract class NEIUniversalHandler extends TemplateRecipeHandler implements ICompatNHNEI { public LinkedList transferRectsRec = new LinkedList(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 5013ba2ba..aee6c4b70 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -424,7 +424,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_battery_redd, 1)) .inputItems(new ComparableStack(ModItems.ingot_electronium, 64), - new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), + new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM), new OreDictStack(OSMIRIDIUM.plateWelded(), 64), new OreDictStack(OSMIRIDIUM.plateWelded(), 64), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64), @@ -436,7 +436,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64)) .inputItemsEx(new ComparableStack(ModItems.ingot_electronium, 64), - new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), + new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.FERRO_PLATING), new OreDictStack(OSMIRIDIUM.plateWelded(), 64), @@ -461,7 +461,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { // accelerators this.register(new GenericRecipe("ass.cyclotron").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_cyclotron, 1)) - .inputItems(new ComparableStack(ModItems.battery_pack, 3, EnumBatteryPack.BATTERY_LITHIUM), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate(), 32), new OreDictStack(AL.plate(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate(), 32), new OreDictStack(AL.plate(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 32), new OreDictStack(AL.plateWelded(), 16), new OreDictStack(RUBBER.ingot(), 32), new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.beamline").setup(200, 100).outputItems(new ItemStack(ModBlocks.pa_beamline, 1)) .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate(), 16), new OreDictStack(GOLD.wireDense(), 4)) @@ -872,7 +872,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.stealthmissile").setup(1_200, 100).outputItems(new ItemStack(ModItems.missile_stealth, 1)) .inputItems(new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32))); this.register(new GenericRecipe("ass.shuttlemissile").setup(200, 100).outputItems(new ItemStack(ModItems.missile_shuttle, 1)) - .inputItems(new ComparableStack(ModItems.missile_generic, 2), new ComparableStack(ModItems.missile_strong, 1), new OreDictStack(KEY_ORANGE, 5), new ComparableStack(ModItems.canister_full, 24, Fluids.GASOLINE_LEADED.getID()), new OreDictStack(FIBER.ingot(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 8), new OreDictStack(KEY_ANYPANE, 6), new OreDictStack(STEEL.plate(), 4))); + .inputItems(new ComparableStack(ModItems.missile_generic, 1), new ComparableStack(ModItems.missile_strong, 1), new OreDictStack(KEY_ORANGE, 5), new ComparableStack(ModItems.canister_full, 24, Fluids.GASOLINE_LEADED.getID()), new OreDictStack(FIBER.ingot(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 8), new OreDictStack(KEY_ANYPANE, 6), new OreDictStack(STEEL.plate(), 4))); this.register(new GenericRecipe("ass.launchpad").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad_large, 1)) .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(ANY_CONCRETE.any(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModBlocks.steel_scaffold, 24), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED))); this.register(new GenericRecipe("ass.launchpadsilo").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad, 1)) diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index eab7c3543..f2be9414a 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -7,6 +7,7 @@ import java.util.Locale; import com.hbm.config.GeneralConfig; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutput; import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutputMulti; import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; @@ -73,12 +74,18 @@ public class GenericRecipe { public GenericRecipe setPools528(String... pools) { if(GeneralConfig.enable528) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); } return this; } public GenericRecipe setGroup(String autoSwitch, GenericRecipes set) { this.autoSwitchGroup = autoSwitch; set.addToGroup(autoSwitch, this); return this; } - public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } - public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } + public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(exceedsStackLimit(stack)) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } + public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(exceedsStackLimit(stack)) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; } + + private boolean exceedsStackLimit(AStack stack) { + if(stack instanceof ComparableStack && stack.stacksize > ((ComparableStack) stack).item.getItemStackLimit(((ComparableStack) stack).toStack())) return true; + if(stack.stacksize > 64) return true; + return false; + } public GenericRecipe outputItems(ItemStack... output) { this.outputItem = new IOutput[output.length]; From 8bdce3a4b34384d628fb663c019fd2725606b7f3 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 10 Jan 2026 21:31:09 +0100 Subject: [PATCH 6/7] been thinking about that yaoi --- changelog | 32 +++--- src/main/java/com/hbm/blocks/ModBlocks.java | 8 -- .../com/hbm/blocks/machine/SPPBottom.java | 31 ------ .../java/com/hbm/blocks/machine/SPPTop.java | 22 ----- .../blocks/network/MachineBatteryREDD.java | 40 +++++++- .../blocks/network/MachineBatterySocket.java | 45 ++++++++- .../com/hbm/entity/item/EntityDroneBase.java | 2 +- .../com/hbm/inventory/fluid/FluidType.java | 4 +- .../java/com/hbm/inventory/fluid/Fluids.java | 5 +- .../hbm/inventory/gui/GUIBatterySocket.java | 2 +- .../java/com/hbm/inventory/material/Mats.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 18 ++-- .../items/block/ItemBlockStorageCrate.java | 19 ++-- src/main/java/com/hbm/main/MainRegistry.java | 2 + .../module/machine/ModuleMachineFusion.java | 2 +- .../hbm/render/anim/BusAnimationKeyframe.java | 5 +- .../hbm/render/anim/BusAnimationSequence.java | 4 +- .../tileentity/RenderBatterySocket.java | 14 ++- .../java/com/hbm/tileentity/TileMappings.java | 1 - .../bomb/TileEntityNukeBalefire.java | 14 +-- .../machine/TileEntityMachineSPP.java | 97 ------------------- .../storage/TileEntityBatteryBase.java | 14 ++- .../storage/TileEntityBatteryREDD.java | 19 +++- .../storage/TileEntityBatterySocket.java | 34 +++---- src/main/java/com/hbm/util/BobMathUtil.java | 5 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- 26 files changed, 193 insertions(+), 250 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/machine/SPPBottom.java delete mode 100644 src/main/java/com/hbm/blocks/machine/SPPTop.java delete mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java diff --git a/changelog b/changelog index 31c62c549..a05a9fc17 100644 --- a/changelog +++ b/changelog @@ -1,22 +1,18 @@ -## Added -* Creative klystron - * Always outputs as much KyU as the most demanding existing recipe needs - ## Changed -* Updated chinese and russian localization -* Increased density of osmiridium ores in tom craters considerably (from 1:500 to 1:200) -* Added a new server setting called `ENABLE_MKU` to toggle contageon effects, spread and save (part of `/ntmserver`) -* Extended logging now logs uses of MKU -* Mass storage units now display their held item on a display -* Improved HUD gauges, electric chestplates with jetpacks installed now two gauges side by side +* Material autogen now creates redstone in ingot form, allowing smaller than block quantities to be cast +* Removed the ancient ZPE blocks +* Drone hitboxes are now way smaller, which should cause them to get stuck when flying less +* The new FENSU now keeps its charge and installed muffler when broken +* Battery sockets are now compatible with comparator output ## Fixed -* Fixed missing battery socket tooltip -* Potentially fixed an issue in regards to some hidden structures spawning -* Fixed FEnSU not immediately applying the muffler effect when used -* Fixed fluid counter valve not having a recipe -* Fixed issue where `/ntmreload` would break registered fluids from addons -* Fixed yet another issue regarding crates -* Fixed RBMK fluid heaters losing their tank types when unable to boil anything * Fixed the FEnSU, cyclotron and reliant robin missile being uncraftable due to stacksize limitations - * The system for detecting impossible recipe has been improved, instead of a fixed 64 item limit, it now uses the actual limit of the item (or 64 for ore dictionary inputs) \ No newline at end of file + * The system for detecting impossible recipe has been improved, instead of a fixed 64 item limit, it now uses the actual limit of the item (or 64 for ore dictionary inputs) +* Fixed yet another issue regarding addon fluids breaking on recipe reload +* Fixed YET ANOTHER issue regarding crates, AGAIN +* Fixed a rare issue where the fusion reactor could have negative fuel +* Fixed battery socket priority tooltip offset +* Fixed enchantability on many armor sets being incorrect + * Most power armors are intended to not be enchantable at all +* Fixed crash caused by the balefire bomb +* Fixed JSON gun reload animations becoming faster and faster with the trenchmaster set \ 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 ef0796687..7a4ef7b6f 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1062,9 +1062,6 @@ public class ModBlocks { public static Block machine_controller; - public static Block machine_spp_bottom; - public static Block machine_spp_top; - public static Block radiobox; public static Block radiorec; @@ -2307,9 +2304,6 @@ public class ModBlocks { machine_siren = new MachineSiren(Material.iron).setBlockName("machine_siren").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_siren"); - machine_spp_bottom = new SPPBottom(Material.iron).setBlockName("machine_spp_bottom").setHardness(5.0F).setResistance(10.0F); - machine_spp_top = new SPPTop(Material.iron).setBlockName("machine_spp_top").setHardness(5.0F).setResistance(10.0F); - radiobox = new Radiobox(Material.iron).setBlockName("radiobox").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":radiobox"); radiorec = new RadioRec(Material.iron).setBlockName("radiorec").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":radiorec"); @@ -3126,8 +3120,6 @@ public class ModBlocks { GameRegistry.registerBlock(machine_powerrtg, machine_powerrtg.getUnlocalizedName()); GameRegistry.registerBlock(machine_radiolysis, machine_radiolysis.getUnlocalizedName()); GameRegistry.registerBlock(machine_hephaestus, machine_hephaestus.getUnlocalizedName()); - GameRegistry.registerBlock(machine_spp_bottom, machine_spp_bottom.getUnlocalizedName()); - GameRegistry.registerBlock(machine_spp_top, machine_spp_top.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating, hadron_plating.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating_blue, hadron_plating_blue.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/SPPBottom.java b/src/main/java/com/hbm/blocks/machine/SPPBottom.java deleted file mode 100644 index 96cd660b5..000000000 --- a/src/main/java/com/hbm/blocks/machine/SPPBottom.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.hbm.blocks.machine; - -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityMachineSPP; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -public class SPPBottom extends BlockContainer { - - public SPPBottom(Material p_i45386_1_) { - super(p_i45386_1_); - } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachineSPP(); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_deprecated"); - } - -} diff --git a/src/main/java/com/hbm/blocks/machine/SPPTop.java b/src/main/java/com/hbm/blocks/machine/SPPTop.java deleted file mode 100644 index 9d9daa5bc..000000000 --- a/src/main/java/com/hbm/blocks/machine/SPPTop.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.hbm.blocks.machine; - -import com.hbm.lib.RefStrings; - -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; - -public class SPPTop extends Block { - - public SPPTop(Material p_i45394_1_) { - super(p_i45394_1_); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_deprecated"); - } -} diff --git a/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java b/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java index ee40d8574..26928db70 100644 --- a/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java +++ b/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java @@ -1,16 +1,27 @@ package com.hbm.blocks.network; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.IPersistentInfoProvider; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; +import com.hbm.util.BobMathUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class MachineBatteryREDD extends BlockDummyable { +public class MachineBatteryREDD extends BlockDummyable implements IPersistentInfoProvider { public MachineBatteryREDD() { super(Material.iron); @@ -47,4 +58,31 @@ public class MachineBatteryREDD extends BlockDummyable { this.makeExtra(world, x + rot.offsetX * 4, y, z + rot.offsetZ * 4); this.makeExtra(world, x - rot.offsetX * 4, y, z - rot.offsetZ * 4); } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + return IPersistentNBT.getDrops(world, x, y, z, this); + } + + @Override + public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) { + + if(!player.capabilities.isCreativeMode) { + harvesters.set(player); + this.dropBlockAsItem(world, x, y, z, meta, 0); + harvesters.set(null); + } + } + + @Override + public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) { + player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1); + player.addExhaustion(0.025F); + } + + @Override + public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { + if(persistentTag != null && persistentTag.hasKey("power")) + list.add(EnumChatFormatting.YELLOW + "" + BobMathUtil.format(new BigInteger(persistentTag.getByteArray("power"))) + " HE"); + } } diff --git a/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java index 89ccdf7ce..61cb49b96 100644 --- a/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java +++ b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java @@ -1,20 +1,24 @@ package com.hbm.blocks.network; +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.TileEntityProxyCombo; import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; +import com.hbm.util.BobMathUtil; 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.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -public class MachineBatterySocket extends BlockDummyable implements ITooltipProvider { +public class MachineBatterySocket extends BlockDummyable implements ITooltipProvider, ILookOverlay { public MachineBatterySocket() { super(Material.iron); @@ -49,4 +53,43 @@ public class MachineBatterySocket extends BlockDummyable implements ITooltipProv public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { addStandardInfo(stack, player, list, ext); } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(World world, int x, int y, int z, int side) { + if(world.getBlockMetadata(x, y, z) < 6) return 0; + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return 0; + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(te instanceof TileEntityBatterySocket)) return 0; + + TileEntityBatterySocket battery = (TileEntityBatterySocket) te; + return battery.getComparatorPower(); + } + + @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 TileEntityBatterySocket)) return; + TileEntityBatterySocket socket = (TileEntityBatterySocket) te; + if(socket.syncStack == null) return; + + List text = new ArrayList(); + text.add(BobMathUtil.getShortNumber(socket.powerFromStack(socket.syncStack)) + " / " + BobMathUtil.getShortNumber(socket.maxPowerFromStack(socket.syncStack)) + "HE"); + + double percent = (double) socket.powerFromStack(socket.syncStack) / (double) socket.maxPowerFromStack(socket.syncStack); + int charge = (int) Math.floor(percent * 10_000D); + int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8); + + text.add("&[" + color + "&]" + (charge / 100D) + "%"); + + ILookOverlay.printGeneric(event, socket.syncStack.getDisplayName(), 0xffff00, 0x404000, text); + } } diff --git a/src/main/java/com/hbm/entity/item/EntityDroneBase.java b/src/main/java/com/hbm/entity/item/EntityDroneBase.java index cdd8c000b..d2d84e56c 100644 --- a/src/main/java/com/hbm/entity/item/EntityDroneBase.java +++ b/src/main/java/com/hbm/entity/item/EntityDroneBase.java @@ -24,7 +24,7 @@ public abstract class EntityDroneBase extends Entity { public EntityDroneBase(World world) { super(world); - this.setSize(1.5F, 2.0F); + this.setSize(0.75F, 0.75F); } public void setTarget(double x, double y, double z) { diff --git a/src/main/java/com/hbm/inventory/fluid/FluidType.java b/src/main/java/com/hbm/inventory/fluid/FluidType.java index 9113db421..c66fb40fe 100644 --- a/src/main/java/com/hbm/inventory/fluid/FluidType.java +++ b/src/main/java/com/hbm/inventory/fluid/FluidType.java @@ -104,9 +104,6 @@ public class FluidType { /** For CompatFluidRegistry */ public FluidType(String name, int id, int color, int p, int f, int r, EnumSymbol symbol, ResourceLocation texture) { setupForeign(name, id, color, p, f, r, symbol, texture); - - Fluids.foreignFluids.add(this); - Fluids.metaOrder.add(this); } public FluidType setupForeign(String name, int id, int color, int p, int f, int r, EnumSymbol symbol, ResourceLocation texture) { @@ -121,6 +118,7 @@ public class FluidType { this.renderWithTint = true; this.id = id; + Fluids.foreignFluids.add(this); Fluids.register(this, id); return this; } diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 47fe280d4..2d0e8977a 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -418,6 +418,8 @@ public class Fluids { if(!customTypes.exists()) initDefaultFluids(customTypes); readCustomFluids(customTypes); + for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad(); + //AND DON'T FORGET THE META DOWN HERE // V V V V V V V V @@ -601,6 +603,7 @@ public class Fluids { ACID = PEROXIDE; for(FluidType custom : customFluids) metaOrder.add(custom); + for(FluidType custom : foreignFluids) metaOrder.add(custom); CHLORINE.addTraits(new FT_Toxin().addEntry(new ToxinDirectDamage(ModDamageSource.cloud, 2F, 20, HazardClass.GAS_LUNG, false))); PHOSGENE.addTraits(new FT_Toxin().addEntry(new ToxinDirectDamage(ModDamageSource.cloud, 4F, 20, HazardClass.GAS_LUNG, false))); @@ -670,7 +673,6 @@ public class Fluids { throw new IllegalStateException("A severe error has occoured during NTM's fluid registering process! The MetaOrder and Mappings are inconsistent! Mapping size: " + idMapping.size()+ " / MetaOrder size: " + metaOrder.size()); } - /// FINAL /// long baseline = 100_000L; //we do not know @@ -921,6 +923,7 @@ public class Fluids { } for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad(); + for(FluidType custom : foreignFluids) metaOrder.add(custom); } private static void registerCalculatedFuel(FluidType type, double base, double combustMult, FuelGrade grade) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java index cc94ceae3..b336a22c4 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java +++ b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java @@ -67,7 +67,7 @@ public class GUIBatterySocket extends GuiInfoContainer { String[] desc = I18nUtil.resolveKeyArray("battery.priority." + lang + ".desc"); for(String s : desc) priority.add(s); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 152, guiTop + 35, 16, 16, mouseX, mouseY, priority); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 125, guiTop + 35, 16, 16, mouseX, mouseY, priority); } protected void mouseClicked(int x, int y, int i) { diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 09c243cb5..55b910e8f 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -60,7 +60,7 @@ public class Mats { public static final NTMMaterial MAT_DIAMOND = makeNonSmeltable(1430, DIAMOND, 0xFFFFFF, 0x1B7B6B, 0x8CF4E2).setConversion(MAT_CARBON, 1, 1).setAutogen(FRAGMENT).n(); public static final NTMMaterial MAT_IRON = makeSmeltable(2600, IRON, 0xFFFFFF, 0x353535, 0xFFA259).setAutogen(FRAGMENT, DUST, PIPE, CASTPLATE, WELDEDPLATE, BLOCK).m(); public static final NTMMaterial MAT_GOLD = makeSmeltable(7900, GOLD, 0xFFFF8B, 0xC26E00, 0xE8D754).setAutogen(FRAGMENT, WIRE, NUGGET, DUST, DENSEWIRE, CASTPLATE, BLOCK).m(); - public static final NTMMaterial MAT_REDSTONE = makeSmeltable(_VS + 01, REDSTONE, 0xE3260C, 0x700E06, 0xFF1000).setAutogen(FRAGMENT).n(); + public static final NTMMaterial MAT_REDSTONE = makeSmeltable(_VS + 01, REDSTONE, 0xE3260C, 0x700E06, 0xFF1000).setAutogen(FRAGMENT, INGOT).n(); public static final NTMMaterial MAT_OBSIDIAN = makeSmeltable(_VS + 02, df("Obsidian"), 0x3D234D).n(); public static final NTMMaterial MAT_HEMATITE = makeAdditive( 2601, HEMATITE, 0xDFB7AE, 0x5F372E, 0x6E463D).m(); public static final NTMMaterial MAT_WROUGHTIRON = makeSmeltable(2602, df("WroughtIron"), 0xFAAB89).m(); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index fb868ca18..73dd3ea86 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -4206,7 +4206,7 @@ public class ModItems { public static void initializeItem2() { - ArmorMaterial aMatZirconium = EnumHelper.addArmorMaterial("HBM_ZIRCONIUM", 1000, new int[] { 2, 5, 3, 1 }, 100); + ArmorMaterial aMatZirconium = EnumHelper.addArmorMaterial("HBM_ZIRCONIUM", 1000, new int[] { 2, 5, 3, 1 }, 1000); aMatZirconium.customCraftingMaterial = ModItems.ingot_zirconium; zirconium_legs = new ArmorFSB(aMatZirconium, 2, RefStrings.MODID + ":textures/armor/zirconium_2.png").setUnlocalizedName("zirconium_legs").setTextureName(RefStrings.MODID + ":zirconium_legs"); @@ -4268,7 +4268,7 @@ public class ModItems { dieselsuit_legs = new ArmorDiesel(aMatDiesel, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_legs"); dieselsuit_boots = new ArmorDiesel(aMatDiesel, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_boots"); - ArmorMaterial aMatAJR = EnumHelper.addArmorMaterial("HBM_T45AJR", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatAJR = EnumHelper.addArmorMaterial("HBM_T45AJR", 150, new int[] { 3, 8, 6, 3 }, 0); aMatAJR.customCraftingMaterial = ModItems.plate_armor_ajr; ajr_helmet = new ArmorAJR(aMatAJR, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25) .enableVATS(true) @@ -4310,7 +4310,7 @@ public class ModItems { rpa_legs = new ArmorRPA(aMatAJR, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_legs").setTextureName(RefStrings.MODID + ":rpa_legs"); rpa_boots = new ArmorRPA(aMatAJR, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_boots").setTextureName(RefStrings.MODID + ":rpa_boots"); - ArmorMaterial aMatBJ = EnumHelper.addArmorMaterial("HBM_BLACKJACK", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatBJ = EnumHelper.addArmorMaterial("HBM_BLACKJACK", 150, new int[] { 3, 8, 6, 3 }, 0); aMatBJ.customCraftingMaterial = ModItems.plate_armor_lunar; bj_helmet = new ArmorBJ(aMatBJ, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100) .enableVATS(true) @@ -4329,7 +4329,7 @@ public class ModItems { bj_legs = new ArmorBJ(aMatBJ, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_legs").setTextureName(RefStrings.MODID + ":bj_legs"); bj_boots = new ArmorBJ(aMatBJ, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_boots").setTextureName(RefStrings.MODID + ":bj_boots"); - ArmorMaterial aMatEnv = EnumHelper.addArmorMaterial("HBM_ENV", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatEnv = EnumHelper.addArmorMaterial("HBM_ENV", 150, new int[] { 3, 8, 6, 3 }, 10); aMatEnv.customCraftingMaterial = ModItems.plate_armor_hev; envsuit_helmet = new ArmorEnvsuit(aMatEnv, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0) .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) @@ -4340,7 +4340,7 @@ public class ModItems { envsuit_legs = new ArmorEnvsuit(aMatEnv, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_legs").setTextureName(RefStrings.MODID + ":envsuit_legs"); envsuit_boots = new ArmorEnvsuit(aMatEnv, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_boots").setTextureName(RefStrings.MODID + ":envsuit_boots"); - ArmorMaterial aMatHEV = EnumHelper.addArmorMaterial("HBM_HEV", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatHEV = EnumHelper.addArmorMaterial("HBM_HEV", 150, new int[] { 3, 8, 6, 3 }, 0); aMatHEV.customCraftingMaterial = ModItems.plate_armor_hev; hev_helmet = new ArmorHEV(aMatHEV, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000, 10000, 2500, 0) .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) @@ -4356,7 +4356,7 @@ public class ModItems { jackt = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt").setTextureName(RefStrings.MODID + ":jackt"); jackt2 = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt2").setTextureName(RefStrings.MODID + ":jackt2"); - ArmorMaterial aMatFau = EnumHelper.addArmorMaterial("HBM_DIGAMMA", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatFau = EnumHelper.addArmorMaterial("HBM_DIGAMMA", 150, new int[] { 3, 8, 6, 3 }, 0); aMatFau.customCraftingMaterial = ModItems.plate_armor_fau; fau_helmet = new ArmorDigamma(aMatFau, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0) .addEffect(new PotionEffect(Potion.jump.id, 20, 1)) @@ -4372,7 +4372,7 @@ public class ModItems { fau_legs = new ArmorDigamma(aMatFau, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).hides(EnumPlayerPart.LEFT_LEG, EnumPlayerPart.RIGHT_LEG).setFullSetForHide().setUnlocalizedName("fau_legs").setTextureName(RefStrings.MODID + ":fau_legs"); fau_boots = new ArmorDigamma(aMatFau, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).setUnlocalizedName("fau_boots").setTextureName(RefStrings.MODID + ":fau_boots"); - ArmorMaterial aMatDNS = EnumHelper.addArmorMaterial("HBM_DNT_NANO", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatDNS = EnumHelper.addArmorMaterial("HBM_DNT_NANO", 150, new int[] { 3, 8, 6, 3 }, 0); aMatDNS.customCraftingMaterial = ModItems.plate_armor_dnt; dns_helmet = new ArmorDNT(aMatDNS, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115) .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 9)) @@ -4391,7 +4391,7 @@ public class ModItems { dns_legs = new ArmorDNT(aMatDNS, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_legs").setTextureName(RefStrings.MODID + ":dns_legs"); dns_boots = new ArmorDNT(aMatDNS, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_boots").setTextureName(RefStrings.MODID + ":dns_boots"); - ArmorMaterial aMatTaurun = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatTaurun = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 10); aMatTaurun.customCraftingMaterial = ModItems.plate_iron; taurun_helmet = new ArmorTaurun(aMatTaurun, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) @@ -4401,7 +4401,7 @@ public class ModItems { taurun_plate = new ArmorTaurun(aMatTaurun, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_plate").setTextureName(RefStrings.MODID + ":taurun_plate"); taurun_legs = new ArmorTaurun(aMatTaurun, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_legs").setTextureName(RefStrings.MODID + ":taurun_legs"); taurun_boots = new ArmorTaurun(aMatTaurun, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_boots").setTextureName(RefStrings.MODID + ":taurun_boots"); - ArmorMaterial aMatTrench = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); + ArmorMaterial aMatTrench = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 0); aMatTrench.customCraftingMaterial = ModItems.plate_iron; trenchmaster_helmet = new ArmorTrenchmaster(aMatTrench, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 2)) diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index d9b3d5765..2e5d3816e 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -164,12 +164,9 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider stack.writeToNBT(slot); nbt.setTag("slot" + i, slot); } - - if(nbt.hasNoTags()) { - nbt = null; - } else { - nbt.setLong("stacklock", rand.nextLong()); // add shit that prevents crates from stacking - } + + // never, ever fucking ever remove the tag compound here, lack of tack compound makes the crate stackable + nbt.setLong("stacklock", rand.nextLong()); // add shit that prevents crates from stacking target.setTagCompound(nbt); } @@ -181,6 +178,16 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider // Check for 6kb item vomit target.setTagCompound(checkNBT(target.getTagCompound())); player.inventoryContainer.detectAndSendChanges(); + + if(target.stackTagCompound != null) { + target.stackTagCompound.removeTag("stacklock"); + + if(target.stackTagCompound.hasNoTags()) { + target.setTagCompound(null); // if there's no tags left, clear compound to make the crate stackable again + } else { + target.stackTagCompound.setLong("stacklock", rand.nextLong()); // add shit that prevents crates from stacking + } + } } } } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 3046a25cd..afae2a617 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1469,6 +1469,8 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.fusion_conductor"); ignoreMappings.add("hbm:tile.fusion_center"); ignoreMappings.add("hbm:tile.fusion_motor"); + ignoreMappings.add("hbm:tile.machine_spp_bottom"); + ignoreMappings.add("hbm:tile.machine_spp_top"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java b/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java index 3d4c40814..9b2467b6e 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java @@ -64,7 +64,7 @@ public class ModuleMachineFusion extends ModuleMachineBase { // fusion reactor is the only machine as of now that consumes input while not having finished the output if(recipe.inputFluid != null) { for(int i = 0; i < Math.min(recipe.inputFluid.length, inputTanks.length); i++) { - inputTanks[i].setFill(inputTanks[i].getFill() - (int) Math.ceil(recipe.inputFluid[i].fill * processSpeed)); + inputTanks[i].setFill(Math.max(inputTanks[i].getFill() - (int) Math.ceil(recipe.inputFluid[i].fill * processSpeed), 0)); } } diff --git a/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java b/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java index e25f5f95e..c5aafb9a7 100644 --- a/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java +++ b/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java @@ -58,6 +58,7 @@ public class BusAnimationKeyframe { public double value; public IType interpolationType; public EType easingType; + public int originalDuration; public int duration; // bezier handles @@ -78,7 +79,7 @@ public class BusAnimationKeyframe { // this one can be used for "reset" type keyframes public BusAnimationKeyframe() { this.value = 0; - this.duration = 1; + this.originalDuration = this.duration = 1; this.interpolationType = IType.LINEAR; this.easingType = EType.AUTO; } @@ -86,7 +87,7 @@ public class BusAnimationKeyframe { public BusAnimationKeyframe(double value, int duration) { this(); this.value = value; - this.duration = (int) (duration / Math.max(0.001D, ClientConfig.GUN_ANIMATION_SPEED.get())); + this.originalDuration = this.duration = (int) (duration / Math.max(0.001D, ClientConfig.GUN_ANIMATION_SPEED.get())); } public BusAnimationKeyframe(double value, int duration, IType interpolation) { diff --git a/src/main/java/com/hbm/render/anim/BusAnimationSequence.java b/src/main/java/com/hbm/render/anim/BusAnimationSequence.java index a66d65c62..760803870 100644 --- a/src/main/java/com/hbm/render/anim/BusAnimationSequence.java +++ b/src/main/java/com/hbm/render/anim/BusAnimationSequence.java @@ -90,7 +90,9 @@ public class BusAnimationSequence { for(Dimension dim : Dimension.values()) { List keyframes = transformKeyframes.get(dim.ordinal()); - for(BusAnimationKeyframe keyframe : keyframes) keyframe.duration *= mult; + for(BusAnimationKeyframe keyframe : keyframes) { + keyframe.duration = (int) (keyframe.originalDuration * mult); + } } return this; } diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java index 20a63dbf1..6b4e8828e 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java @@ -3,6 +3,7 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; @@ -11,6 +12,7 @@ import com.hbm.util.EnumUtil; 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; @@ -38,10 +40,14 @@ public class RenderBatterySocket extends TileEntitySpecialRenderer implements II bindTexture(ResourceManager.battery_socket_tex); ResourceManager.battery_socket.renderPart("Socket"); - if(socket.renderPack >= 0) { - EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, socket.renderPack); - bindTexture(pack.texture); - ResourceManager.battery_socket.renderPart(pack.isCapacitor() ? "Capacitor" : "Battery"); + ItemStack render = socket.syncStack; + if(render != null) { + + if(render.getItem() == ModItems.battery_pack) { + EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, render.getItemDamage()); + bindTexture(pack.texture); + ResourceManager.battery_socket.renderPart(pack.isCapacitor() ? "Capacitor" : "Battery"); + } } 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 9be769ef1..f65d12d00 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -123,7 +123,6 @@ public class TileMappings { put(TileEntityMachinePress.class, "tileentity_press"); put(TileEntityMachineAmmoPress.class, "tileentity_ammo_press"); put(TileEntityMachineSiren.class, "tileentity_siren"); - put(TileEntityMachineSPP.class, "tileentity_spp"); put(TileEntityMachineRadGen.class, "tileentity_radgen"); put(TileEntityMachineRadarNT.class, "tileentity_radar"); put(TileEntityMachineRadarLarge.class, "tileentity_radar_large"); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java index 3e9875521..f50a1756e 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java @@ -8,7 +8,6 @@ import com.hbm.items.ModItems; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; -import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -104,17 +103,8 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU } public int getBattery() { - - if(slots[1] != null && slots[1].getItem() == ModItems.battery_spark && - ((IBatteryItem)ModItems.battery_spark).getCharge(slots[1]) == ((IBatteryItem)ModItems.battery_spark).getMaxCharge(slots[1])) { - return 1; - } - - if(slots[1] != null && slots[1].getItem() == ModItems.battery_trixite && - ((IBatteryItem)ModItems.battery_trixite).getCharge(slots[1]) == ((IBatteryItem)ModItems.battery_trixite).getMaxCharge(slots[1])) { - return 2; - } - + if(slots[1] != null && slots[1].getItem() == ModItems.battery_spark) return 1; + if(slots[1] != null && slots[1].getItem() == ModItems.battery_trixite) return 2; return 0; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java deleted file mode 100644 index f659905d0..000000000 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.hbm.tileentity.machine; - -import com.hbm.blocks.ModBlocks; -import com.hbm.lib.Library; -import com.hbm.tileentity.TileEntityLoadedBase; -import com.hbm.util.CompatEnergyControl; - -import api.hbm.energymk2.IEnergyProviderMK2; -import api.hbm.tile.IInfoProviderEC; -import net.minecraft.init.Blocks; -import net.minecraft.nbt.NBTTagCompound; - -public class TileEntityMachineSPP extends TileEntityLoadedBase implements IEnergyProviderMK2, IInfoProviderEC { - - public long power; - public static final long maxPower = 100000; - public int age = 0; - public int gen = 0; - - @Override - public void updateEntity() { - - if(!worldObj.isRemote) { - - this.tryProvide(worldObj, xCoord + 1, yCoord, zCoord, Library.POS_X); - this.tryProvide(worldObj, xCoord - 1, yCoord, zCoord, Library.NEG_X); - this.tryProvide(worldObj, xCoord, yCoord, zCoord + 1, Library.POS_Z); - this.tryProvide(worldObj, xCoord, yCoord, zCoord - 1, Library.NEG_Z); - this.tryProvide(worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); - - if(worldObj.getTotalWorldTime() % 20 == 0) - gen = checkStructure() * 15; - - if(gen > 0) - power += gen; - if(power > maxPower) - power = maxPower; - } - - } - - public int checkStructure() { - - int h = 0; - - for(int i = yCoord + 1; i < 254; i++) - if(worldObj.getBlock(xCoord, i, zCoord) == ModBlocks.machine_spp_top) { - h = i; - break; - } - - for(int i = yCoord + 1; i < h; i++) - if(!checkSegment(i)) - return 0; - - - return h - yCoord - 1; - } - - public boolean checkSegment(int y) { - - // BBB - // BAB - // BBB - - return (worldObj.getBlock(xCoord + 1, y, zCoord) != Blocks.air && - worldObj.getBlock(xCoord + 1, y, zCoord + 1) != Blocks.air && - worldObj.getBlock(xCoord + 1, y, zCoord - 1) != Blocks.air && - worldObj.getBlock(xCoord - 1, y, zCoord + 1) != Blocks.air && - worldObj.getBlock(xCoord - 1, y, zCoord) != Blocks.air && - worldObj.getBlock(xCoord - 1, y, zCoord - 1) != Blocks.air && - worldObj.getBlock(xCoord, y, zCoord + 1) != Blocks.air && - worldObj.getBlock(xCoord, y, zCoord - 1) != Blocks.air && - worldObj.getBlock(xCoord, y, zCoord) == Blocks.air); - } - - @Override - public long getPower() { - return this.power; - } - - @Override - public void setPower(long i) { - this.power = i; - } - - @Override - public long getMaxPower() { - return this.maxPower; - } - - @Override - public void provideExtraInfo(NBTTagCompound data) { - data.setBoolean(CompatEnergyControl.B_ACTIVE, this.gen > 0); - data.setDouble(CompatEnergyControl.D_OUTPUT_HE, this.gen); - } -} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java index 34976ac9d..0a8171bab 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java @@ -4,6 +4,7 @@ import com.hbm.interfaces.IControlReceiver; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.uninos.UniNodespace; +import com.hbm.util.Compat; import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -20,6 +21,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; public abstract class TileEntityBatteryBase extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { @@ -67,7 +69,13 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem } byte comp = this.getComparatorPower(); - if(comp != this.lastRedstone) this.markDirty(); + if(comp != this.lastRedstone) { + System.out.println(comp); + for(BlockPos port : this.getPortPos()) { + TileEntity tile = Compat.getTileStandard(worldObj, port.getX(), port.getY(), port.getZ()); + if(tile != null) tile.markDirty(); + } + } this.lastRedstone = comp; prevPowerState = this.getPower(); @@ -77,8 +85,8 @@ public abstract class TileEntityBatteryBase extends TileEntityMachineBase implem } public byte getComparatorPower() { - double frac = (double) this.getPower() / (double) this.getMaxPower() * 15D; - return (byte) (MathHelper.clamp_int((int) frac + 1, 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower + double frac = (double) this.getPower() / (double) Math.max(this.getMaxPower(), 1) * 15D; + return (byte) (MathHelper.clamp_int((int) Math.round(frac), 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java index 13f07574f..f2879c2da 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java @@ -7,6 +7,7 @@ import com.hbm.inventory.gui.GUIBatteryREDD; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -18,7 +19,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityBatteryREDD extends TileEntityBatteryBase { +public class TileEntityBatteryREDD extends TileEntityBatteryBase implements IPersistentNBT { public float prevRotation = 0F; public float rotation = 0F; @@ -151,7 +152,6 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { super.writeToNBT(nbt); nbt.setByteArray("power", this.power.toByteArray()); - } @Override @@ -218,4 +218,19 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { return bb; } + + @Override + public void writeNBT(NBTTagCompound nbt) { + NBTTagCompound data = new NBTTagCompound(); + data.setByteArray("power", this.power.toByteArray()); + data.setBoolean("muffled", muffled); + nbt.setTag(NBT_PERSISTENT_KEY, data); + } + + @Override + public void readNBT(NBTTagCompound nbt) { + NBTTagCompound data = nbt.getCompoundTag(NBT_PERSISTENT_KEY); + this.power = new BigInteger(data.getByteArray("power")); + this.muffled = data.getBoolean("muffled"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java index 5fd082740..3c48f7b3d 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -2,7 +2,7 @@ package com.hbm.tileentity.machine.storage; import com.hbm.inventory.container.ContainerBatterySocket; import com.hbm.inventory.gui.GUIBatterySocket; -import com.hbm.items.ModItems; +import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; @@ -26,7 +26,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR public long[] log = new long[20]; public long delta = 0; - public int renderPack = -1; + public ItemStack syncStack; public TileEntityBatterySocket() { super(1); @@ -56,20 +56,15 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR @Override public void serialize(ByteBuf buf) { super.serialize(buf); - - int renderPack = -1; - if(slots[0] != null && slots[0].getItem() == ModItems.battery_pack) { - renderPack = slots[0].getItemDamage(); - } - buf.writeInt(renderPack); buf.writeLong(delta); + BufferUtil.writeItemStack(buf, this.slots[0]); } @Override public void deserialize(ByteBuf buf) { super.deserialize(buf); - renderPack = buf.readInt(); delta = buf.readLong(); + this.syncStack = BufferUtil.readItemStack(buf); } @Override @@ -83,22 +78,23 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR @Override public int[] getAccessibleSlotsFromSide(int side) { return new int[] {0}; } - @Override - public long getPower() { - if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; - return ((IBatteryItem) slots[0].getItem()).getCharge(slots[0]); - } + @Override public long getPower() { return powerFromStack(slots[0]); } + @Override public long getMaxPower() { return maxPowerFromStack(slots[0]); } @Override public void setPower(long power) { if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return; ((IBatteryItem) slots[0].getItem()).setCharge(slots[0], power); } - - @Override - public long getMaxPower() { - if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; - return ((IBatteryItem) slots[0].getItem()).getMaxCharge(slots[0]); + + public static long powerFromStack(ItemStack stack) { + if(stack == null || !(stack.getItem() instanceof IBatteryItem)) return 0; + return ((IBatteryItem) stack.getItem()).getCharge(stack); + } + + public static long maxPowerFromStack(ItemStack stack) { + if(stack == null || !(stack.getItem() instanceof IBatteryItem)) return 0; + return ((IBatteryItem) stack.getItem()).getMaxCharge(stack); } @Override public long getProviderSpeed() { diff --git a/src/main/java/com/hbm/util/BobMathUtil.java b/src/main/java/com/hbm/util/BobMathUtil.java index ad8b8ee0e..2bd421991 100644 --- a/src/main/java/com/hbm/util/BobMathUtil.java +++ b/src/main/java/com/hbm/util/BobMathUtil.java @@ -184,10 +184,7 @@ public class BobMathUtil { * @param amount * @return the number as a string with thousand group commas */ - public static String format(int amount) { - return String.format(Locale.US, "%,d", amount); - } - public static String format(long amount) { + public static String format(Number amount) { return String.format(Locale.US, "%,d", amount); } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 94b9e5c02..3fef4b463 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5740,7 +5740,7 @@ tile.machine_battery.name=Energy Storage Block (LEGACY) tile.machine_battery_potato.name=Potato Battery Block (LEGACY) tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Battery Socket -tile.machine_battery_socket.desc=Allows battery items to be connected$to the power grid directly.$Acts as a cable, all ports are connected$to the same netowrk. +tile.machine_battery_socket.desc=Allows battery items to be connected$to the power grid directly.$Acts as a cable, all ports are connected$to the same network. tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Electric Oil Heater From 71fb9a814d66f1420b9ec9a34e646fd2d526b153 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 11 Jan 2026 19:14:08 +0100 Subject: [PATCH 7/7] he rotates --- changelog | 12 ++- .../hbm/blocks/machine/MachineCrucible.java | 8 +- .../inventory/recipes/AssemblerRecipes.java | 1 - .../recipes/AssemblyMachineRecipes.java | 5 +- .../hbm/inventory/recipes/MachineRecipes.java | 9 +- .../inventory/recipes/anvil/AnvilRecipes.java | 3 +- src/main/java/com/hbm/items/ModItems.java | 32 ++++--- .../com/hbm/items/machine/ItemBatterySC.java | 62 +++++++++++++ .../java/com/hbm/main/CraftingManager.java | 22 +++-- .../java/com/hbm/main/ResourceManager.java | 1 + .../tileentity/RenderBatterySocket.java | 34 +++++++ .../render/tileentity/RendererObjTester.java | 69 +------------- src/main/resources/assets/hbm/lang/de_DE.lang | 85 ++++++++++-------- src/main/resources/assets/hbm/lang/en_US.lang | 83 +++++++++-------- .../hbm/textures/items/battery_sc.am241.png | Bin 0 -> 330 bytes .../hbm/textures/items/battery_sc.au198.png | Bin 0 -> 327 bytes .../hbm/textures/items/battery_sc.co60.png | Bin 0 -> 323 bytes .../hbm/textures/items/battery_sc.empty.png | Bin 0 -> 296 bytes .../hbm/textures/items/battery_sc.pb209.png | Bin 0 -> 329 bytes .../hbm/textures/items/battery_sc.po210.png | Bin 0 -> 325 bytes .../hbm/textures/items/battery_sc.pu238.png | Bin 0 -> 321 bytes .../hbm/textures/items/battery_sc.ra226.png | Bin 0 -> 320 bytes .../hbm/textures/items/battery_sc.tc99.png | Bin 0 -> 320 bytes .../hbm/textures/items/battery_sc.waste.png | Bin 0 -> 321 bytes .../hbm/textures/models/horse/sunburst.png | Bin 0 -> 1409 bytes .../textures/models/machines/battery_sc.png | Bin 0 -> 1008 bytes 26 files changed, 250 insertions(+), 176 deletions(-) create mode 100644 src/main/java/com/hbm/items/machine/ItemBatterySC.java create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.am241.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.au198.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.co60.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.empty.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.pb209.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.po210.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.pu238.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.ra226.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.tc99.png create mode 100644 src/main/resources/assets/hbm/textures/items/battery_sc.waste.png create mode 100644 src/main/resources/assets/hbm/textures/models/horse/sunburst.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_sc.png diff --git a/changelog b/changelog index a05a9fc17..0a380e1fd 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,14 @@ * Drone hitboxes are now way smaller, which should cause them to get stuck when flying less * The new FENSU now keeps its charge and installed muffler when broken * Battery sockets are now compatible with comparator output +* Battery sockets now have a tooltip when a battery pack is installed +* Sef-charging batteries have been reworked + * They are now a new item with metadata (legacy ones still work) + * The base form is an empty selfcharger which is filled with two billets of material, i.e. no more upgrade recipes + * There are a few new variants like cobalt-60 and gold-198 + * New selfchargers have a model when plugged into a battery socket + * Selfchargers are a fair bit weaker than their old counterparts, but substantially cheaper too +* Old batteries now have the "LEGACY" tag ## Fixed * Fixed the FEnSU, cyclotron and reliant robin missile being uncraftable due to stacksize limitations @@ -15,4 +23,6 @@ * Fixed enchantability on many armor sets being incorrect * Most power armors are intended to not be enchantable at all * Fixed crash caused by the balefire bomb -* Fixed JSON gun reload animations becoming faster and faster with the trenchmaster set \ No newline at end of file +* Fixed JSON gun reload animations becoming faster and faster with the trenchmaster set +* Fixed heat transfer rate labels on the boilers and coker unit being off by a magnitude of 10 +* Fixed crucible not having a heat transfer rate tooltip \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java index cb9671776..c7ad347bd 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ICustomBlockHighlight; +import com.hbm.blocks.ITooltipProvider; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.items.machine.ItemScraps; import com.hbm.main.MainRegistry; @@ -27,7 +28,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.common.util.ForgeDirection; -public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor { +public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor, ITooltipProvider { public MachineCrucible() { super(Material.rock); @@ -181,4 +182,9 @@ public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 6ad7036c3..97510ed26 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -126,7 +126,6 @@ import net.minecraft.item.ItemStack; makeRecipe(new ComparableStack(ModBlocks.machine_crystallizer, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC), },200); makeRecipe(new ComparableStack(ModBlocks.machine_fluidtank, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(STEEL.plate(), 6), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4), },150); makeRecipe(new ComparableStack(ModBlocks.machine_bat9000, 1), new AStack[] {new OreDictStack(STEEL.plate(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16), },150); - makeRecipe(new ComparableStack(ModBlocks.machine_orbus, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plate(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_turbofan, 1), new AStack[] {!exp ? new OreDictStack(TI.shell(), 8) : new OreDictStack(TI.heavyComp(), 1), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()) }, 300); makeRecipe(new ComparableStack(ModBlocks.machine_turbinegas, 1), new AStack[] {!exp ? new OreDictStack(STEEL.shell(), 10) : new OreDictStack(STEEL.heavyComp(), 2), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4), new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 3), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.ingot_rubber, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())}, 600); makeRecipe(new ComparableStack(ModBlocks.watz_element, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)},200); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index aee6c4b70..2a9c16c95 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -28,6 +28,7 @@ import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemFluidIcon; import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; +import com.hbm.items.machine.ItemBatterySC.EnumBatterySC; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemPACoil.EnumCoilType; @@ -456,8 +457,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16))); this.register(new GenericRecipe("ass.orbus").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_orbus, 1)) - .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plateCast(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1)) - .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new OreDictStack(BIGMT.plateCast(), 16), new ComparableStack(ModItems.coil_advanced_alloy, 24), new ComparableStack(ModItems.battery_sc_polonium, 1))); + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plateCast(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc, 1, EnumBatterySC.PO210)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new OreDictStack(BIGMT.plateCast(), 16), new ComparableStack(ModItems.coil_advanced_alloy, 24), new ComparableStack(ModItems.battery_sc, 1, EnumBatterySC.PO210))); // accelerators this.register(new GenericRecipe("ass.cyclotron").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_cyclotron, 1)) diff --git a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java index ecbe59072..fd6668851 100644 --- a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java @@ -7,6 +7,7 @@ import com.hbm.inventory.FluidContainer; import com.hbm.inventory.FluidContainerRegistry; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; +import com.hbm.items.machine.ItemBatterySC.EnumBatterySC; import com.hbm.util.Tuple.Triplet; import net.minecraft.init.Blocks; @@ -52,14 +53,8 @@ public class MachineRecipes { fuels.add(new ItemStack(ModItems.fusion_core)); fuels.add(new ItemStack(ModItems.energy_core)); for(EnumBatteryPack num : EnumBatteryPack.values()) fuels.add(new ItemStack(ModItems.battery_pack, 1, num.ordinal())); + for(EnumBatterySC num : EnumBatterySC.values()) fuels.add(new ItemStack(ModItems.battery_sc, 1, num.ordinal())); fuels.add(new ItemStack(ModItems.battery_creative)); - fuels.add(new ItemStack(ModItems.battery_sc_uranium)); - fuels.add(new ItemStack(ModItems.battery_sc_technetium)); - fuels.add(new ItemStack(ModItems.battery_sc_plutonium)); - fuels.add(new ItemStack(ModItems.battery_sc_polonium)); - fuels.add(new ItemStack(ModItems.battery_sc_gold)); - fuels.add(new ItemStack(ModItems.battery_sc_lead)); - fuels.add(new ItemStack(ModItems.battery_sc_americium)); return fuels; } 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 27d058172..de7d3e6e8 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -26,6 +26,7 @@ import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; import com.hbm.items.food.ItemFlask.EnumInfusion; +import com.hbm.items.machine.ItemBatterySC.EnumBatterySC; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.util.Tuple.Pair; @@ -751,7 +752,7 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(ModItems.scrap, 1)), new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 2)), new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), - new AnvilOutput(new ItemStack(ModItems.battery_sc_uranium, 1), 0.1F), + new AnvilOutput(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.RA226.ordinal()), 0.1F), new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.05F) } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 73dd3ea86..7fd1ba599 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1657,13 +1657,15 @@ public class ModItems { public static Item battery_spark; public static Item battery_trixite; - public static Item battery_sc_uranium; - public static Item battery_sc_technetium; - public static Item battery_sc_plutonium; - public static Item battery_sc_polonium; - public static Item battery_sc_gold; - public static Item battery_sc_lead; - public static Item battery_sc_americium; + @Deprecated public static Item battery_sc_uranium; + @Deprecated public static Item battery_sc_technetium; + @Deprecated public static Item battery_sc_plutonium; + @Deprecated public static Item battery_sc_polonium; + @Deprecated public static Item battery_sc_gold; + @Deprecated public static Item battery_sc_lead; + @Deprecated public static Item battery_sc_americium; + + public static Item battery_sc; public static Item battery_potato; public static Item battery_potatos; @@ -3899,13 +3901,14 @@ public class ModItems { battery_creative = new ItemBatteryCreative().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); cube_power = new ItemBattery(1000000000000000000L, 1000000000000000L, 1000000000000000L).setUnlocalizedName("cube_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cube_power"); - battery_sc_uranium = new ItemSelfcharger(5).setUnlocalizedName("battery_sc_uranium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_uranium"); - battery_sc_technetium = new ItemSelfcharger(25).setUnlocalizedName("battery_sc_technetium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_technetium"); - battery_sc_plutonium = new ItemSelfcharger(100).setUnlocalizedName("battery_sc_plutonium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_plutonium"); - battery_sc_polonium = new ItemSelfcharger(500).setUnlocalizedName("battery_sc_polonium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_polonium"); - battery_sc_gold = new ItemSelfcharger(2500).setUnlocalizedName("battery_sc_gold").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_gold"); - battery_sc_lead = new ItemSelfcharger(5000).setUnlocalizedName("battery_sc_lead").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_lead"); - battery_sc_americium = new ItemSelfcharger(10000).setUnlocalizedName("battery_sc_americium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_americium"); + battery_sc_uranium = new ItemSelfcharger(5).setUnlocalizedName("battery_sc_uranium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_sc_uranium"); + battery_sc_technetium = new ItemSelfcharger(25).setUnlocalizedName("battery_sc_technetium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_sc_technetium"); + battery_sc_plutonium = new ItemSelfcharger(100).setUnlocalizedName("battery_sc_plutonium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_sc_plutonium"); + battery_sc_polonium = new ItemSelfcharger(500).setUnlocalizedName("battery_sc_polonium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_sc_polonium"); + battery_sc_gold = new ItemSelfcharger(2500).setUnlocalizedName("battery_sc_gold").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_sc_gold"); + battery_sc_lead = new ItemSelfcharger(5000).setUnlocalizedName("battery_sc_lead").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_sc_lead"); + battery_sc_americium = new ItemSelfcharger(10000).setUnlocalizedName("battery_sc_americium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_sc_americium"); + battery_sc = new ItemBatterySC().setUnlocalizedName("battery_sc").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc"); battery_potato = new ItemBattery(1000, 0, 100).setUnlocalizedName("battery_potato").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_potato"); battery_potatos = new ItemPotatos(500000, 0, 100).setUnlocalizedName("battery_potatos").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_potatos"); @@ -5704,6 +5707,7 @@ public class ModItems { GameRegistry.registerItem(battery_spark_cell_power, battery_spark_cell_power.getUnlocalizedName()); GameRegistry.registerItem(battery_pack, battery_pack.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc, battery_sc.getUnlocalizedName()); GameRegistry.registerItem(battery_creative, battery_creative.getUnlocalizedName()); GameRegistry.registerItem(cube_power, cube_power.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemBatterySC.java b/src/main/java/com/hbm/items/machine/ItemBatterySC.java new file mode 100644 index 000000000..691b60b1a --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBatterySC.java @@ -0,0 +1,62 @@ +package com.hbm.items.machine; + +import java.util.List; + +import com.hbm.items.ItemEnumMulti; +import com.hbm.main.MainRegistry; +import com.hbm.util.BobMathUtil; +import com.hbm.util.EnumUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ItemBatterySC extends ItemEnumMulti implements IBatteryItem { + + public ItemBatterySC() { + super(EnumBatterySC.class, true, true); + this.setMaxStackSize(1); + this.setCreativeTab(MainRegistry.controlTab); + } + + public static enum EnumBatterySC { + + EMPTY( 0), + WASTE( 150), + RA226( 200), + TC99( 500), + CO60( 750), + PU238( 1_000), + PO210( 1_250), + AU198( 1_500), + PB209( 2_000), + AM241( 2_500); + + public long power; + + private EnumBatterySC(long power) { + this.power = power; + } + } + + @Override public void chargeBattery(ItemStack stack, long i) { } + @Override public void setCharge(ItemStack stack, long i) { } + @Override public void dischargeBattery(ItemStack stack, long i) { } + @Override public long getChargeRate(ItemStack stack) { return 0; } + + @Override public long getCharge(ItemStack stack) { return getMaxCharge(stack); } + @Override public long getDischargeRate(ItemStack stack) { return getMaxCharge(stack); } + + @Override + public long getMaxCharge(ItemStack stack) { + EnumBatterySC pack = EnumUtil.grabEnumSafely(EnumBatterySC.class, stack.getItemDamage()); + return pack.power; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + EnumBatterySC pack = EnumUtil.grabEnumSafely(EnumBatterySC.class, stack.getItemDamage()); + if(pack.power > 0) list.add(EnumChatFormatting.YELLOW + "Discharge rate: " + BobMathUtil.getShortNumber(pack.power) + "HE/t"); + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 26e7fafe1..47e9829bb 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -31,6 +31,7 @@ import com.hbm.items.food.ItemConserve.EnumFoodType; import com.hbm.items.machine.ItemArcElectrode.EnumElectrodeType; import com.hbm.items.machine.ItemBattery; import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; +import com.hbm.items.machine.ItemBatterySC.EnumBatterySC; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemFluidIDMulti; import com.hbm.items.special.ItemCircuitStarComponent.CircuitComponentType; @@ -271,6 +272,17 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_REDSTONE.ordinal()), new Object[] { "IRI", "PRP", "IRI", 'I', IRON.plate(), 'R', REDSTONE.block(), 'P', ModItems.plate_polymer }); addRecipeAuto(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_COPPER.ordinal()), new Object[] { "IRI", "PRP", "IRI", 'I', STEEL.plate(), 'R', CU.block(), 'P', ModItems.plate_polymer }); + addRecipeAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.EMPTY.ordinal()), new Object[] { "PGP", "L L", "PGP", 'P', ANY_PLASTIC.ingot(), 'G', GOLD.wireFine(), 'L', PB.plate() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.WASTE.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), ModItems.billet_nuclear_waste, ModItems.billet_nuclear_waste }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.RA226.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), RA226.billet(), RA226.billet() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.TC99.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), TC99.billet(), TC99.billet() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.CO60.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), CO60.billet(), CO60.billet() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.PU238.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), PU238.billet(), PU238.billet() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.PO210.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), PO210.billet(), PO210.billet() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.AU198.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), AU198.billet(), AU198.billet() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.PB209.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), PB209.billet(), PB209.billet() }); + addShapelessAuto(new ItemStack(ModItems.battery_sc, 1, EnumBatterySC.AM241.ordinal()), new Object[] { DictFrame.fromOne(ModItems.battery_sc, EnumBatterySC.EMPTY), AM241.billet(), AM241.billet() }); + GameRegistry.addRecipe(new ContainerUpgradeCraftingHandler(new ItemStack(ModBlocks.crate_desh, 1), new Object[] { " D ", "DSD", " D ", 'D', ModItems.plate_desh, 'S', ModBlocks.crate_steel })); GameRegistry.addRecipe(new ContainerUpgradeCraftingHandler(new ItemStack(ModBlocks.crate_tungsten, 1), new Object[] { "BPB", "PCP", "BPB", 'B', W.block(), 'P', CU.plateCast(), 'C', ModBlocks.crate_steel })); // Note: voids the last few slots when placed, because a safe's inventory is smaller than a crate's one @@ -535,14 +547,6 @@ public class CraftingManager { addShapelessAuto(ItemBattery.getFullBattery(ModItems.battery_potato), new Object[] { Items.potato, AL.wireFine(), CU.wireFine() }); addShapelessAuto(ItemBattery.getFullBattery(ModItems.battery_potatos), new Object[] { ItemBattery.getFullBattery(ModItems.battery_potato), ModItems.turret_chip, REDSTONE.dust() }); - addRecipeAuto(new ItemStack(ModItems.battery_sc_uranium), new Object[] { "NBN", "PCP", "NBN", 'N', GOLD.nugget(), 'B', U238.billet(), 'P', PB.plate(), 'C', ModItems.thermo_element }); - addRecipeAuto(new ItemStack(ModItems.battery_sc_technetium), new Object[] { "NBN", "PCP", "NBN", 'N', GOLD.nugget(), 'B', TC99.billet(), 'P', PB.plate(), 'C', ModItems.battery_sc_uranium }); - addRecipeAuto(new ItemStack(ModItems.battery_sc_plutonium), new Object[] { "NBN", "PCP", "NBN", 'N', TC99.nugget(), 'B', PU238.billet(), 'P', PB.plate(), 'C', ModItems.battery_sc_technetium }); - addRecipeAuto(new ItemStack(ModItems.battery_sc_polonium), new Object[] { "NBN", "PCP", "NBN", 'N', TC99.nugget(), 'B', PO210.billet(), 'P', ANY_PLASTIC.ingot(), 'C', ModItems.battery_sc_plutonium }); - addRecipeAuto(new ItemStack(ModItems.battery_sc_gold), new Object[] { "NBN", "PCP", "NBN", 'N', TA.nugget(), 'B', AU198.billet(), 'P', ANY_PLASTIC.ingot(), 'C', ModItems.battery_sc_polonium }); - addRecipeAuto(new ItemStack(ModItems.battery_sc_lead), new Object[] { "NBN", "PCP", "NBN", 'N', TA.nugget(), 'B', PB209.billet(), 'P', ANY_PLASTIC.ingot(), 'C', ModItems.battery_sc_gold }); - addRecipeAuto(new ItemStack(ModItems.battery_sc_americium), new Object[] { "NBN", "PCP", "NBN", 'N', TA.nugget(), 'B', AM241.billet(), 'P', ANY_PLASTIC.ingot(), 'C', ModItems.battery_sc_lead }); - addRecipeAuto(new ItemStack(ModItems.wiring_red_copper, 1), new Object[] { "PPP", "PIP", "PPP", 'P', STEEL.plate(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.jetpack_tank, 1), new Object[] { " S ", "BKB", " S ", 'S', STEEL.plate(), 'B', STEEL.bolt(), 'K', Fluids.KEROSENE.getDict(1000) }); @@ -738,7 +742,7 @@ public class CraftingManager { 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_steel, 1), new Object[] { "IPI", "I I", "IPI", 'I', STEEL.plate(), 'P', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.barrel_tcalloy, 1), new Object[] { "IPI", "I I", "IPI", 'I', "ingotTcAlloy", 'P', TI.plate() }); - addRecipeAuto(new ItemStack(ModBlocks.barrel_antimatter, 1), new Object[] { "IPI", "IBI", "IPI", 'I', BIGMT.plate(), 'P', ModItems.coil_advanced_torus, 'B', ModItems.battery_sc_technetium }); + addRecipeAuto(new ItemStack(ModBlocks.barrel_antimatter, 1), new Object[] { "IPI", "I I", "IPI", 'I', BIGMT.plate(), 'P', ModItems.coil_advanced_torus }); addRecipeAuto(new ItemStack(ModBlocks.tesla, 1), new Object[] { "CCC", "PIP", "WTW", 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'P', ANY_PLASTIC.ingot(), 'T', ModBlocks.machine_transformer, 'W', KEY_PLANKS }); addRecipeAuto(new ItemStack(ModBlocks.struct_watz_core, 1), new Object[] { "CBC", "BHB", "CBC", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'B', ANY_RESISTANTALLOY.plateCast(), 'H', ModBlocks.watz_cooler }); addShapelessAuto(new ItemStack(ModItems.energy_core), new Object[] { ModItems.fusion_core, ModItems.fuse }); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index d3de4e543..5052dd575 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -741,6 +741,7 @@ public class ResourceManager { //FENSU public static final ResourceLocation battery_socket_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/battery_socket.png"); + public static final ResourceLocation battery_sc_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/battery_sc.png"); public static final ResourceLocation battery_redd_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu2.png"); public static final ResourceLocation fensu_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java index 6b4e8828e..7d3264202 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java @@ -1,12 +1,19 @@ package com.hbm.render.tileentity; +import java.util.Random; + import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; +import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; +import com.hbm.render.util.BeamPronter; +import com.hbm.render.util.HorsePronter; +import com.hbm.render.util.BeamPronter.EnumBeamType; +import com.hbm.render.util.BeamPronter.EnumWaveType; import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; import com.hbm.util.EnumUtil; @@ -14,10 +21,14 @@ import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; import net.minecraftforge.client.IItemRenderer; public class RenderBatterySocket extends TileEntitySpecialRenderer implements IItemRendererProvider { + private static ResourceLocation blorbo = new ResourceLocation(RefStrings.MODID, "textures/models/horse/sunburst.png"); + @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { GL11.glPushMatrix(); @@ -47,6 +58,29 @@ public class RenderBatterySocket extends TileEntitySpecialRenderer implements II EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, render.getItemDamage()); bindTexture(pack.texture); ResourceManager.battery_socket.renderPart(pack.isCapacitor() ? "Capacitor" : "Battery"); + } else if(render.getItem() == ModItems.battery_sc) { + bindTexture(ResourceManager.battery_sc_tex); + ResourceManager.battery_socket.renderPart("Battery"); + } else if(render.getItem() == ModItems.battery_creative) { + GL11.glPushMatrix(); + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glRotated((socket.getWorldObj().getTotalWorldTime() % 360 + interp) * 25D, 0, -1, 0); + this.bindTexture(blorbo); + HorsePronter.reset(); + HorsePronter.enableHorn(); + HorsePronter.pront(); + GL11.glPopMatrix(); + + Random rand = new Random(tile.getWorldObj().getTotalWorldTime() / 5); + rand.nextBoolean(); + + for(int i = -1; i <= 1; i += 2) for(int j = -1; j <= 1; j += 2) if(rand.nextInt(4) == 0) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.75, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(0.4375 * i, 1.1875, 0.4375 * j), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.0625F, 3, 0.025F); + BeamPronter.prontBeam(Vec3.createVectorHelper(0.4375 * i, 1.1875, 0.4375 * j), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.025F); + GL11.glPopMatrix(); + } } } diff --git a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java index 450fcd6cb..3bffbaf34 100644 --- a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java +++ b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java @@ -6,81 +6,30 @@ import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.render.util.HorsePronter; -import com.hbm.wiaj.WorldInAJar; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; public class RendererObjTester extends TileEntitySpecialRenderer { - private static RenderBlocks renderer; - private static WorldInAJar world; - private static ResourceLocation extra = new ResourceLocation(RefStrings.MODID, "textures/models/horse/dyx.png"); + private static ResourceLocation extra = new ResourceLocation(RefStrings.MODID, "textures/models/horse/sunburst.png"); @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5, y + 1, z + 0.5); + GL11.glTranslated(x + 0.5, y, z + 0.5); GL11.glDisable(GL11.GL_CULL_FACE); - - if(world == null) { - world = new WorldInAJar(5, 3, 5); - for(int i = 0; i < 25; i++) world.setBlock(i / 5, 1, i % 5, Blocks.brick_block, 0); - for(int i = 0; i < 9; i++) world.setBlock(1 + i / 3, 0, 1 + i % 3, Blocks.brick_block, 0); - } - - if(renderer == null) { - renderer = new RenderBlocks(world); - } - renderer.enableAO = true; - world.lightlevel = tileEntity.getWorldObj().getLightBrightnessForSkyBlocks(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, 0); - - RenderHelper.disableStandardItemLighting(); - - GL11.glPushMatrix(); - GL11.glRotated(15, 0, 0, 1); - GL11.glRotated(System.currentTimeMillis() / 5D % 360D, 0, -1, 0); - GL11.glTranslated(-2.5, 0, -2.5); - Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); - GL11.glShadeModel(GL11.GL_SMOOTH); - Tessellator.instance.startDrawingQuads(); - - for(int ix = 0; ix < world.sizeX; ix++) { - for(int iy = 0; iy < world.sizeY; iy++) { - for(int iz = 0; iz < world.sizeZ; iz++) { - try { renderer.renderBlockByRenderType(world.getBlock(ix, iy, iz), ix, iy, iz); } catch(Exception ex) { } - } - } - } - - Tessellator.instance.draw(); - GL11.glShadeModel(GL11.GL_FLAT); - GL11.glPopMatrix(); RenderHelper.enableStandardItemLighting(); - - GL11.glRotated(15, 0, 0, 1); - GL11.glRotated(System.currentTimeMillis() / 5D % 360D, 0, -1, 0); - - GL11.glTranslated(0, 2.1, 0.5); this.bindTexture(extra); HorsePronter.reset(); - double r = 60; + /*double r = 60; HorsePronter.pose(HorsePronter.id_body, 0, -r, 0); HorsePronter.pose(HorsePronter.id_tail, 0, 45, 90); HorsePronter.pose(HorsePronter.id_lbl, 0, -90 + r, 35); @@ -88,20 +37,10 @@ public class RendererObjTester extends TileEntitySpecialRenderer { HorsePronter.pose(HorsePronter.id_lfl, 0, r - 10, 5); HorsePronter.pose(HorsePronter.id_rfl, 0, r - 10, -5); HorsePronter.pose(HorsePronter.id_head, 0, r, 0); + HorsePronter.enableWings();*/ HorsePronter.enableHorn(); - HorsePronter.enableWings(); HorsePronter.pront(); - ItemStack stack = new ItemStack(ModItems.cigarette); - double scale = 0.25; - GL11.glTranslated(0.02, 1.13, -0.42); - GL11.glScaled(scale, scale, scale); - GL11.glRotated(90, 0, -1, 0); - GL11.glRotated(60, 0, 0, -1); - bindTexture(TextureMap.locationItemsTexture); - IIcon icon = stack.getIconIndex(); - ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F); - GL11.glPopMatrix(); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 772fd5ee0..6e3394ca5 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1308,16 +1308,16 @@ item.ballistite.name=Ballistit item.bandaid.name=Samtenes Pflaster item.bathwater.name=Toxisches Seifenwasser item.bathwater_mk2.name=Toxisches Seifenwasser (Pferdearoma) -item.battery_advanced.name=Fortgeschrittene Batterie -item.battery_advanced_cell.name=Fortgeschrittene Energiezelle -item.battery_advanced_cell_12.name=Zwölffache fortgeschrittene Energiezelle -item.battery_advanced_cell_4.name=Vierfache fortgeschrittene Energiezelle +item.battery_advanced.name=Fortgeschrittene Batterie (LEGACY) +item.battery_advanced_cell.name=Fortgeschrittene Energiezelle (LEGACY) +item.battery_advanced_cell_12.name=Zwölffache fortgeschrittene Energiezelle (LEGACY) +item.battery_advanced_cell_4.name=Vierfache fortgeschrittene Energiezelle (LEGACY) item.battery_creative.name=Unendliche Batterie -item.battery_generic.name=Batterie -item.battery_lithium.name=Lithium-Ionen-Batterie -item.battery_lithium_cell.name=Lithium-Ionen-Energiezelle -item.battery_lithium_cell_3.name=Dreifache Lithium-Ionen-Energiezelle -item.battery_lithium_cell_6.name=Sechsfache Lithium-Ionen-Energiezelle +item.battery_generic.name=Batterie (LEGACY) +item.battery_lithium.name=Lithium-Ionen-Batterie (LEGACY) +item.battery_lithium_cell.name=Lithium-Ionen-Energiezelle (LEGACY) +item.battery_lithium_cell_3.name=Dreifache Lithium-Ionen-Energiezelle (LEGACY) +item.battery_lithium_cell_6.name=Sechsfache Lithium-Ionen-Energiezelle (LEGACY) item.battery_pack.battery_lead.name=Bleisäure-Akku item.battery_pack.battery_lithium.name=Lithium-Ionen-Akku item.battery_pack.battery_quantum.name=Quantenakku @@ -1332,33 +1332,41 @@ item.battery_pack.capacitor_spark.name=Spark-Kondensator item.battery_pack.capacitor_tantalum.name=Tantalkondensator item.battery_potato.name=Katoffelbatterie item.battery_potatos.name=PotatOS -item.battery_red_cell.name=Redstone-Energiezelle -item.battery_red_cell_24.name=24-fache Redstone-Energiezelle -item.battery_red_cell_6.name=Sechsfache Redstone-Energiezelle -item.battery_sc_americium.name=Americium-241-Selbstlader -item.battery_sc_gold.name=Gold-198-Selbstlader -item.battery_sc_lead.name=Blei-209-Selbstlader -item.battery_sc_plutonium.name=Plutonium-238-Selbstlader -item.battery_sc_polonium.name=Polonium-210-Selbstlader -item.battery_sc_technetium.name=Technerium-99-Selbstlader -item.battery_sc_uranium.name=Uran-238-Selbstlader -item.battery_schrabidium.name=Schrabidiumbatterie -item.battery_schrabidium_cell.name=Schrabidium-Energiezelle -item.battery_schrabidium_cell_2.name=Doppelte Schrabidium-Energiezelle -item.battery_schrabidium_cell_4.name=Vierfache Schrabidium-Energiezelle +item.battery_red_cell.name=Redstone-Energiezelle (LEGACY) +item.battery_red_cell_24.name=24-fache Redstone-Energiezelle (LEGACY) +item.battery_red_cell_6.name=Sechsfache Redstone-Energiezelle (LEGACY) +item.battery_sc.am241.name=Americium-241-Selbstlader +item.battery_sc.au198.name=Gold-198-Selbstlader +item.battery_sc.co60.name=Kobalt-60-Selbstlader +item.battery_sc.empty.name=Leerer Selbstlader +item.battery_sc.pb209.name=Blei-209-Selbstlader +item.battery_sc.po210.name=Polonium-210-Selbstlader +item.battery_sc.pu238.name=Plutonium-238-Selbstlader +item.battery_sc.ra226.name=Radium-226-Selbstlader +item.battery_sc.tc99.name=Technetium-99-Selbstlader +item.battery_sc.waste.name=Atommüll-Selbstlader +item.battery_sc_americium.name=Americium-241-Selbstlader (LEGACY) +item.battery_sc_gold.name=Gold-198-Selbstlader (LEGACY) +item.battery_sc_lead.name=Blei-209-Selbstlader (LEGACY) +item.battery_sc_plutonium.name=Plutonium-238-Selbstlader (LEGACY) +item.battery_sc_polonium.name=Polonium-210-Selbstlader (LEGACY) +item.battery_sc_technetium.name=Technerium-99-Selbstlader (LEGACY) +item.battery_sc_uranium.name=Uran-238-Selbstlader (LEGACY) +item.battery_schrabidium.name=Schrabidiumbatterie (LEGACY) +item.battery_schrabidium_cell.name=Schrabidium-Energiezelle (LEGACY) +item.battery_schrabidium_cell_2.name=Doppelte Schrabidium-Energiezelle (LEGACY) +item.battery_schrabidium_cell_4.name=Vierfache Schrabidium-Energiezelle (LEGACY) item.battery_spark.name=Spark-Batterie -item.battery_spark_cell_100.name=Spark-Arkane Energiespeicher-Matrix -item.battery_spark_cell_1000.name=Spark-Arkane Massen-Energie Speicherleere -item.battery_spark_cell_10000.name=Spark Solider Raumzeit Kristall -item.battery_spark_cell_25.name=Spark-Arkane Autobatterie -item.battery_spark_cell_2500.name=Spark-Arkanes Dirac'sches Meer -item.battery_spark_cell_6.name=Spark-Energiezelle -item.battery_spark_cell_power.name=Spark Lächerliche Physik-missachtende Energiespeichereinheit -item.battery_steam.name=Dampfbetriebener Energiespeichertank -item.battery_steam_large.name=Großer dampfbetriebener Energiespeichertank -item.battery_su.name=Einwegbatterie -item.battery_su_l.name=Große Einwegbatterie -item.battery_trixite.name=Billige Spark-Batterie-Nachmache +item.battery_spark_cell_100.name=Spark-Arkane Energiespeicher-Matrix (LEGACY) +item.battery_spark_cell_1000.name=Spark-Arkane Massen-Energie Speicherleere (LEGACY) +item.battery_spark_cell_10000.name=Spark Solider Raumzeit Kristall (LEGACY) +item.battery_spark_cell_25.name=Spark-Arkane Autobatterie (LEGACY) +item.battery_spark_cell_2500.name=Spark-Arkanes Dirac'sches Meer (LEGACY) +item.battery_spark_cell_6.name=Spark-Energiezelle (LEGACY) +item.battery_spark_cell_power.name=Spark Lächerliche Physik-missachtende Energiespeichereinheit (LEGACY) +item.battery_steam.name=Dampfbetriebener Energiespeichertank (LEGACY) +item.battery_steam_large.name=Großer dampfbetriebener Energiespeichertank (LEGACY) +item.battery_trixite.name=Billiger Spark-Batterie Nachbau item.bdcl.name=BDCL item.bedrock_ore.grade.base.name=%s-Bedrockerz item.bedrock_ore.grade.base_roasted.name=Geröstetes %s-Bedrockerz @@ -4479,7 +4487,7 @@ tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Batteriesockel tile.machine_battery_socket.desc=Erlaubt es, Batterien direkt mit$dem Stromnetz zu verbinden.$Verhält sich wie ein Kabel, alle$Verbindungen sind im selben Netzwek. tile.machine_boiler.name=Boiler -tile.machine_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.01 TU/t +tile.machine_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.1 TU/t tile.machine_boiler_electric_off.name=Elektrischer Ölwärmer tile.machine_boiler_electric_on.name=Elektrischer Ölwärmer tile.machine_boiler_off.name=Alter Boiler @@ -4495,7 +4503,7 @@ tile.machine_chungus.desc=Effizienz: 85%% tile.machine_coal_off.name=Verbrennungsgenerator tile.machine_coal_on.name=Verbrennungsgenerator tile.machine_coker.name=Koker-Anlage -tile.machine_coker.desc=Verkokt Öl, erzeugt fluides Nebenprodukt.$Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.025 TU/t +tile.machine_coker.desc=Verkokt Öl, erzeugt fluides Nebenprodukt.$Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.25 TU/t tile.machine_combine_factory.name=CMB-Stahl Hochofen tile.machine_combustion_engine.name=Industrieller Verbrennungsmotor tile.machine_compressor.name=Kompressor @@ -4508,6 +4516,7 @@ tile.machine_converter_rf_he.name=RF zu HE Konverter tile.machine_conveyor_press.name=Förderband-Presse tile.machine_conveyor_press.desc=Band bewegt sich von links nach rechts$Rechtsclick um Stempel zu montieren$Stempel kann mit Schraubenzieher entfernt werden tile.machine_crucible.name=Schmelztiegel +tile.machine_crucible.desc=Wärmestransferrate: ΔT*0.25 TU/t tile.machine_crystallizer.name=Erzauflöser tile.machine_cyclotron.name=Zyklotron tile.machine_detector.name=Energiedetektor @@ -4543,7 +4552,7 @@ tile.machine_geo.name=Geothermiegenerator tile.machine_hephaestus.name=Geothermischer Wärmetauscher tile.machine_icf_press.name=ICF-Brennstoffpellet-Fabrikant tile.machine_industrial_boiler.name=Industrieller Boiler -tile.machine_industrial_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.01 TU/t$Überdrucksicher +tile.machine_industrial_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.1 TU/t$Überdrucksicher tile.machine_industrial_generator.name=Industrieller Generator tile.machine_intake.name=Lufteinlass tile.machine_keyforge.name=Schlossertisch diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 3fef4b463..32007905e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2066,16 +2066,16 @@ item.ballistite.name=Ballistite item.bandaid.name=Velvet Band-Aid item.bathwater.name=Toxic Soapy Water item.bathwater_mk2.name=Toxic Soapy Water (Horse Scented) -item.battery_advanced.name=Advanced Battery -item.battery_advanced_cell.name=Advanced Power Cell -item.battery_advanced_cell_12.name=Twelvefold Advanced Power Cell -item.battery_advanced_cell_4.name=Quadruple Advanced Power Cell +item.battery_advanced.name=Advanced Battery (LEGACY) +item.battery_advanced_cell.name=Advanced Power Cell (LEGACY) +item.battery_advanced_cell_12.name=Twelvefold Advanced Power Cell (LEGACY) +item.battery_advanced_cell_4.name=Quadruple Advanced Power Cell (LEGACY) item.battery_creative.name=Infinite Battery -item.battery_generic.name=Battery -item.battery_lithium.name=Lithium-Ion Battery -item.battery_lithium_cell.name=Lithium-Ion Power Cell -item.battery_lithium_cell_3.name=Triple Lithium-Ion Power Cell -item.battery_lithium_cell_6.name=Sixfold Lithium-Ion Power Cell +item.battery_generic.name=Battery (LEGACY) +item.battery_lithium.name=Lithium-Ion Battery (LEGACY) +item.battery_lithium_cell.name=Lithium-Ion Power Cell (LEGACY) +item.battery_lithium_cell_3.name=Triple Lithium-Ion Power Cell (LEGACY) +item.battery_lithium_cell_6.name=Sixfold Lithium-Ion Power Cell (LEGACY) item.battery_pack.battery_lead.name=Lead-Acid Battery item.battery_pack.battery_lithium.name=Lithium-Ion Battery item.battery_pack.battery_quantum.name=Quantum Battery @@ -2090,32 +2090,40 @@ item.battery_pack.capacitor_spark.name=Spark Capacitor item.battery_pack.capacitor_tantalum.name=Tantalum Capacitor item.battery_potato.name=Potato Battery item.battery_potatos.name=PotatOS -item.battery_red_cell.name=Redstone Power Cell -item.battery_red_cell_24.name=24-Fold Redstone Power Cell -item.battery_red_cell_6.name=Sixfold Redstone Power Cell -item.battery_sc_americium.name=Self-Charging Americium-241 Battery -item.battery_sc_gold.name=Self-Charging Gold-198 Battery -item.battery_sc_lead.name=Self-Charging Lead-209 Battery -item.battery_sc_plutonium.name=Self-Charging Plutonium-238 Battery -item.battery_sc_polonium.name=Self-Charging Polonium-210 Battery -item.battery_sc_technetium.name=Self-Charging Technetium-99 Battery -item.battery_sc_uranium.name=Self-Charging Uranium-238 Battery -item.battery_schrabidium.name=Schrabidium Battery -item.battery_schrabidium_cell.name=Schrabidium Power Cell -item.battery_schrabidium_cell_2.name=Double Schrabidium Power Cell -item.battery_schrabidium_cell_4.name=Quadruple Schrabidium Power Cell +item.battery_red_cell.name=Redstone Power Cell (LEGACY) +item.battery_red_cell_24.name=24-Fold Redstone Power Cell (LEGACY) +item.battery_red_cell_6.name=Sixfold Redstone Power Cell (LEGACY) +item.battery_sc.am241.name=Americium-241 Self-Charging Battery +item.battery_sc.au198.name=Gold-198 Self-Charging Battery +item.battery_sc.co60.name=Cobalt-60 Self-Charging Battery +item.battery_sc.empty.name=Empty Self-Charging Battery +item.battery_sc.pb209.name=Lead-209 Self-Charging Battery +item.battery_sc.po210.name=Polonium-210 Self-Charging Battery +item.battery_sc.pu238.name=Plutonium-238 Self-Charging Battery +item.battery_sc.ra226.name=Radium-226 Self-Charging Battery +item.battery_sc.tc99.name=Technetium-99 Self-Charging Battery +item.battery_sc.waste.name=Spent Fuel Self-Charging Battery +item.battery_sc_americium.name=Self-Charging Americium-241 Battery (LEGACY) +item.battery_sc_gold.name=Self-Charging Gold-198 Battery (LEGACY) +item.battery_sc_lead.name=Self-Charging Lead-209 Battery (LEGACY) +item.battery_sc_plutonium.name=Self-Charging Plutonium-238 Battery (LEGACY) +item.battery_sc_polonium.name=Self-Charging Polonium-210 Battery (LEGACY) +item.battery_sc_technetium.name=Self-Charging Technetium-99 Battery (LEGACY) +item.battery_sc_uranium.name=Self-Charging Uranium-238 Battery (LEGACY) +item.battery_schrabidium.name=Schrabidium Battery (LEGACY) +item.battery_schrabidium_cell.name=Schrabidium Power Cell (LEGACY) +item.battery_schrabidium_cell_2.name=Double Schrabidium Power Cell (LEGACY) +item.battery_schrabidium_cell_4.name=Quadruple Schrabidium Power Cell (LEGACY) item.battery_spark.name=Spark Battery -item.battery_spark_cell_100.name=Spark Arcane Energy Storage Array -item.battery_spark_cell_1000.name=Spark Arcane Mass-Energy Void -item.battery_spark_cell_10000.name=Spark Solid Space-Time Crystal -item.battery_spark_cell_25.name=Spark Arcane Car Battery -item.battery_spark_cell_2500.name=Spark Arcane Dirac Sea -item.battery_spark_cell_6.name=Spark Power Cell -item.battery_spark_cell_power.name=Spark Ludicrous Physics-Defying Energy Storage Unit -item.battery_steam.name=Steam Powered Energy Storage Tank -item.battery_steam_large.name=Large Steam Powered Energy Storage Tank -item.battery_su.name=SU-Battery -item.battery_su_l.name=Large SU-Battery +item.battery_spark_cell_100.name=Spark Arcane Energy Storage Array (LEGACY) +item.battery_spark_cell_1000.name=Spark Arcane Mass-Energy Void (LEGACY) +item.battery_spark_cell_10000.name=Spark Solid Space-Time Crystal (LEGACY) +item.battery_spark_cell_25.name=Spark Arcane Car Battery (LEGACY) +item.battery_spark_cell_2500.name=Spark Arcane Dirac Sea (LEGACY) +item.battery_spark_cell_6.name=Spark Power Cell (LEGACY) +item.battery_spark_cell_power.name=Spark Ludicrous Physics-Defying Energy Storage Unit (LEGACY) +item.battery_steam.name=Steam Powered Energy Storage Tank (LEGACY) +item.battery_steam_large.name=Large Steam Powered Energy Storage Tank (LEGACY) item.battery_trixite.name=Off-Brand Spark Battery item.bdcl.name=BDCL item.bedrock_ore.grade.base.name=%s Bedrock Ore @@ -5742,7 +5750,7 @@ tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Battery Socket tile.machine_battery_socket.desc=Allows battery items to be connected$to the power grid directly.$Acts as a cable, all ports are connected$to the same network. tile.machine_boiler.name=Boiler -tile.machine_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.01 TU/t +tile.machine_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.1 TU/t tile.machine_boiler_electric_off.name=Electric Oil Heater tile.machine_boiler_electric_on.name=Electric Oil Heater tile.machine_boiler_off.name=Old Boiler @@ -5759,7 +5767,7 @@ tile.machine_chungus.desc=Efficiency: 85%% tile.machine_coal_off.name=Combustion Generator tile.machine_coal_on.name=Combustion Generator tile.machine_coker.name=Coker Unit -tile.machine_coker.desc=Cokes oil, creating fluid byproducts.$Requires external heat source.$Heat transfer rate: ΔT*0.025 TU/t +tile.machine_coker.desc=Cokes oil, creating fluid byproducts.$Requires external heat source.$Heat transfer rate: ΔT*0.25 TU/t tile.machine_combine_factory.name=CMB Steel Furnace tile.machine_combustion_engine.name=Industrial Combustion Engine tile.machine_compressor.name=Compressor @@ -5772,6 +5780,7 @@ tile.machine_converter_rf_he.name=RF to HE Converter tile.machine_conveyor_press.name=Conveyor Press tile.machine_conveyor_press.desc=Conveyor moves left to right$Right click stamp to install$Use screwdriver to remove stamp tile.machine_crucible.name=Crucible +tile.machine_crucible.desc=Heat transfer rate: ΔT*0.25 TU/t tile.machine_crystallizer.name=Ore Acidizer tile.machine_cyclotron.name=Cyclotron tile.machine_detector.name=Power Detector @@ -5808,7 +5817,7 @@ tile.machine_hephaestus.name=Geothermal Heat Exchanger tile.machine_icf_press.name=ICF Fuel Pellet Maker tile.machine_icf_press.desc=Fills ICF Fuel pellets$Left fuel slot is accepted by top/bottom, right by the sides$Muons and pellets may be supplied from any side tile.machine_industrial_boiler.name=Industrial Boiler -tile.machine_industrial_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.01 TU/t$Cannot explode +tile.machine_industrial_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.1 TU/t$Cannot explode tile.machine_industrial_generator.name=Industrial Generator tile.machine_intake.name=Air Intake tile.machine_keyforge.name=Locksmith Table diff --git a/src/main/resources/assets/hbm/textures/items/battery_sc.am241.png b/src/main/resources/assets/hbm/textures/items/battery_sc.am241.png new file mode 100644 index 0000000000000000000000000000000000000000..2837a00e3e4bdad04ff2d6df0b3298361cc097a0 GIT binary patch literal 330 zcmV-Q0k!^#P)%dlPns4w;pRYWw3A^={VPx*e^aQ$=wKwa0tN+#ubt|FqtdZpG{wbtrKd8U9S zN#dJDa(>9%jo-lGUuE(p%(z)oMRY<$wKmW0ibCb z9&T=Vyt}8Wsvsa(0l;V1?YjOS&~3i<16*BR><2iECwS*tL^O`$*&K|m+`R|CA&g^8 cU=sm;00il6?pX}4+5i9m07*qoM6N<$f;V1Mo(oAPzW#zm04k-h9gLJpaV_07b zjZFj##lyl%#4<#XvAGKbH;P*M!@w{*d^5ZJJ7Yr5IRjX&R-4i+)VCEXiika29}z_n zs!G3{16Zi{6IDbkj$;6>F7|o5ec||g7l5W|CN~*W6orY1^~<@bs;R0yRfh&xnx?@m zMsm(sS(fIUv-LX|U|E)J@{x8zkgBT4^PH~hhVb482L=HE-h2AKA7V zr7<=s>`Y~m!fQip#>NW-cNMwH9|o4$pKoWEe>Vi=oHKx77!IwC&v)W$iio{FUlK(T zs>;0E0+`SHjVdA*$1wm;kLP^6ymNJX20+(!!ATaCWoaT}^KNUZYN~2)&4mG$Wtn%1 zm7H@{*R?t4?CTv2usqKX>y=J@kfv!Uih^mHma3}Cd!QEpP*oN4JTDbe5YYEM_t^sg zcQ@Cl>fZnW`~Ci>?cV|8I35Q`lH@qR|G0uT*CJwRnyzxtwr$Ywm53}cCh!vhJ^{T)LL`>kVefkGa{> zxes1qWnU(mPqiu z9COZko$cgAiHzIRN@KTo8SWC_#l~Rh7UUKE^n}!z&wpxLSFBoHeEo;?Ki+=_4xHWE s5fK`?Tc+pnjH|mlPKYHN*$X}pw(&~1F?(h~G|;OIp00i_>zopr0PyE{mH+?% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/battery_sc.pb209.png b/src/main/resources/assets/hbm/textures/items/battery_sc.pb209.png new file mode 100644 index 0000000000000000000000000000000000000000..00300e3bd231cdddf18a633662a9fc6886ec8a1f GIT binary patch literal 329 zcmV-P0k-~$P)RpuXI1R1wkTatXlQ%|7oB&s<#Z0Z`XxmBhD$l) z>hzqds)B%E1psfaFWZiP26SEbH^9;H$)|JsOThnlf_JV(MB_M~&B55p?R)SQ!Z^kR bHWAx(?2Mnd7kgj3!VBPbzM^w1;a4R=A82;^a22!bByCSTS(q60CZi)&2`M( z`huouf`DKJ0AHUUhpztyybrtM0GCN}9N>RE!8_L?qG_5g=3r{&;XU{XVH#rsn+Wg? X{Zef1A&8>000000NkvXXu0mjfwU>qW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/battery_sc.pu238.png b/src/main/resources/assets/hbm/textures/items/battery_sc.pu238.png new file mode 100644 index 0000000000000000000000000000000000000000..99e9098627d01df44da17e48690c2e80e69a3755 GIT binary patch literal 321 zcmV-H0lxl;P)((D(hZ6ovXuLPZg=?eisZ9HXj? zn-zeCdOuM`#F8Wd;OXI<_m?-WZ_fZ|+jeo2No84@h}gJUnW~zq+G~AbfMr=0++rr@ zoK;n2&N(~0g8`Q3`7xjAGz6*ZnxZHehG7cteQ;n90N}l69LFh^vqGMROTfRlLeSSDVriPre9$z_Vt-H~GTE4gp9t^)%MxmM TxU?y700000NkvXXu0mjfhm?+4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/battery_sc.ra226.png b/src/main/resources/assets/hbm/textures/items/battery_sc.ra226.png new file mode 100644 index 0000000000000000000000000000000000000000..7198a5319234999780610553c2b5888adc2d7001 GIT binary patch literal 320 zcmV-G0l)r2)U@5bGNHd-HOuj?PK;9r_lE<*VH0GLc zTxZ}83lZxOo3Zf%!CghJ@`r(C_UGH#<=+JXIp++Z@B340;qzVinj&J)+dHBtLRA?z zF@X8J->4#DtJMmCr^g#U_V3(3TmjIwZE%uFMNycD*tm&JRZUgxrM@-5(lqr>F_Ux7 zs;V;QoPE860hVRiX+6`W4^r1Pd7d*2!&GHidJpsh0Lrpt9LK3b3Ie*WW4GS{u)JQP zs(%9j9NrE;ZT}89z8=p5tmE~0fd6p?Z>~kek|desplO<*-zyQBVocyC0(=6owru1g Sp1Y6$0000SKy zoU^K`%sFRY?_hxCd45_ibQyxwbxlzejN>?$_da-F5CGu4XPTzD*0c&}+m^@O4uCu7 zP}RQy0ES`sY5R9T-}mPMk|a3~@IS5)%(aMEnx=~!91e$7e^4Sa$C#C$2=EEeT5RM_ SlEO3q0000C}{{4LK`uZAgm38Z@GYgr(i>4lBA& zA7;;Z=g!^vas9~$19R@3d*(a$oO|xMR{{s6Yd`}4IS|A~LB*5L9$@bCTl{ALfTqD# ztY=mL0QbNB+thdXix&X^;h{E=J^UV?abY7x>sejOGAm&rGarz1pL8j zG!3>Ia#77%zF~EGF+Q`hAZ!o$*GzKbwX|!)2|fULdd{ysJ?GcF4t9&aM7OQH9h93C zukf*k)B8>kWWh(1m+0ClL(9Qe)fff)09Jx*Xxp{fVWXfL58LJzd;$c_>z*)qwANE3 z%WDr(9MKlN!()OHt$AIa)yVA_4#2b{h>TA~6fHXKJ^=!NOkOAS5BFjuHfkZ+G}vlv zhrIVU3;D7?=pXL2XYkHN+iuq5KzZW#!Xyy7vkkn-7t|dQ$T^+IV-4cMUwJr*E zHV-%%mx?GFtB2J^H3HQdfM6T6!-2Oh007p1{m9EON0c+3+P!!*I-QqN5k(96*Nno- z4#GlcKOr(cIiJ>&^JybedASleMnIwEN4&fI7&l&h8S9&RTd-pSZ~l1?KZT!1;O@za z2sBx@K5knOfGwvVqDsv4uV+aEvP zsh>T-@JWyNx>v&iJ*p`4lN_DSOFkkZdRU@WjZr-OA%H(dYAnV(ji;kA3sIXBQV~V- zTIm7S3C$I&j5aAZeoW)f$)=B6FPP-|aH|9WeEksYn2-RVrsq?wFVT&W*r;h-|8OrZ z4UA*){Rz|AoWP#Z0c#~nh1qg^$`wDi5bgqWmZ!-GD!Q!Zw~K1Z;VpCV+20STdeS5|-mr2*-f4anBreqNN+EorZ85YfIl#DxftzC`z)cpm^{Q;Ex!lV0WRVxypz-3fM^pS)X&y~57pyUFi=y+B1tJ}?zH P00000NkvXXu0mjfp{JCw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/battery_sc.png b/src/main/resources/assets/hbm/textures/models/machines/battery_sc.png new file mode 100644 index 0000000000000000000000000000000000000000..554c4078592fac34dccfd76ee2331669231385b2 GIT binary patch literal 1008 zcmV4DQrUF{Pu&x?W830s1LAWXMqZ z0WxIj7x2`fQ*fci{sZM#Vx9{s6!(4e7e(%d#~dDOLV74x<@}hdUT4O ztASFl*Nf;r8JbKcH5KEi(iYuOuh(_>AwpyT)XKIyoler8&*wD&=yW9FFdBAx46V2!I1SkoXaa^jM0=Zl+^IbMmc`1ptpN5=>gi6?O+bNKv(I`3T zU@(xDF9(A`M32>MHnChTv0AM*&7pb6(EDjP8|x8ohfIhP$B3{FhIKn~_mdIGxWzO7 zrXmth1CbnyjLiQKE7}UTsfS9cop*dHB2_}vIi_fB^?JRiUauq0PfnYOnpj@AnHmsK(>5)OUNUBeE#OvbLMZ+K8mVEEWr>`dJCo{z^&rVeBw@~`4cwjHVsU=MjaHGe9wY#~dHV|h zaCdr(*|f0+aqoCXi4T96814br9z~G1^qs_$g(J~g~(b17^7fQ)kki+3nw+p3YEXXhn zb-PeX#(<>1ZFjp}t3J^(OIB2WXJ!=$R3ai(!sJz1Y;SL?7+#pTx3&tHS*0qrMP%+I zRaazMpCf7MDm*14((}AjA5Xe$b3y8=2a0oK7>3DvwD0@L1+k>lHW%b-waPP*qWG5& z!w|F2uK@t>K3--c$p%Yzv^>v1=3_Wkb-0^$jbabQny@03X%gUNDibR9UdO) zcA=Dv1$l6ApxcE~G8Safq9?cVOMu+UF9C8Zza+@5{1PCy@=KuH$}fR(E59nD%7An$ zzXZsw{1PBjR(>%jrzTYF=BeNBN95d)_fd+5C~HE_J*n=B-6ATxc1Gr+rOXrSETSr^ eqA+Ez{Q3)zPqq&~gwrJe0000