From 756e51f3e02086c6daf4110f3d541e58248f22dc Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 14 Apr 2026 22:21:05 +0200 Subject: [PATCH] big clicky guys --- changelog | 3 + src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../hbm/blocks/machine/rbmk/RBMKLever.java | 49 ++ .../hbm/inventory/gui/GUIScreenRBMKLever.java | 125 ++++ .../weapon/grenade/ItemGrenadeFilling.java | 4 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../render/tileentity/RenderRBMKLever.java | 73 ++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../rbmk/TileEntityRBMKControlManual.java | 4 +- .../machine/rbmk/TileEntityRBMKLever.java | 187 +++++ .../com/hbm/util/DamageResistanceHandler.java | 13 +- .../assets/hbm/models/rbmk/lever.obj | 647 ++++++++++++++++++ .../textures/gui/machine/gui_rbmk_lever.png | Bin 0 -> 2845 bytes .../hbm/textures/models/network/lever.png | Bin 0 -> 394 bytes 15 files changed, 1107 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/rbmk/RBMKLever.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderRBMKLever.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKLever.java create mode 100644 src/main/resources/assets/hbm/models/rbmk/lever.obj create mode 100644 src/main/resources/assets/hbm/textures/gui/machine/gui_rbmk_lever.png create mode 100644 src/main/resources/assets/hbm/textures/models/network/lever.png diff --git a/changelog b/changelog index c61f90c78..fc6ab30ae 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,8 @@ ## Changed * All RoR panels now have basic item descriptions informing about the screwdriver requirement for configuration +* EMP grenades now deal 5x damage against anything with powered armor + * Decreased base damage to compensate +* EMP grenades now destroy machines in a small radius like an EMP missile would ## Fixed * Fixed the grenade crafting handler not checking if a shell/filling combination is even valid, allowing weird combos diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index de693e8ec..4cd964c56 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1096,6 +1096,7 @@ public class ModBlocks { public static Block rbmk_gauge; public static Block rbmk_numitron; public static Block rbmk_graph; + public static Block rbmk_lever; public static Block rbmk_autoloader; public static Block rbmk_loader; public static Block rbmk_steam_inlet; @@ -2118,6 +2119,7 @@ public class ModBlocks { rbmk_gauge = new RBMKGauge().setBlockName("rbmk_gauge").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display"); rbmk_numitron = new RBMKNumitron().setBlockName("rbmk_numitron").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display"); rbmk_graph = new RBMKGraph().setBlockName("rbmk_graph").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display"); + rbmk_lever = new RBMKLever().setBlockName("rbmk_lever").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display"); rbmk_autoloader = new RBMKAutoloader().setBlockName("rbmk_autoloader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_autoloader"); rbmk_loader = new RBMKLoader(Material.iron).setBlockName("rbmk_loader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_loader"); rbmk_steam_inlet = new RBMKInlet(Material.iron).setBlockName("rbmk_steam_inlet").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_steam_inlet"); @@ -3107,6 +3109,7 @@ public class ModBlocks { register(rbmk_display_blank); register(rbmk_display); register(rbmk_key_pad); + register(rbmk_lever); register(rbmk_gauge); register(rbmk_numitron); register(rbmk_graph); diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKLever.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKLever.java new file mode 100644 index 000000000..92efd07d2 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKLever.java @@ -0,0 +1,49 @@ +package com.hbm.blocks.machine.rbmk; + +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKLever; + +import api.hbm.block.IToolable; +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class RBMKLever extends RBMKMiniPanelBase implements IToolable { + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityRBMKLever(); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if(tool != ToolType.SCREWDRIVER) return false; + if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) return true; + if(player.isSneaking()) return false; + + if(hitX != 0 && hitX != 1 && hitZ != 0 && hitZ != 1 && side != 0 && side != 1) { + + TileEntityRBMKLever tile = (TileEntityRBMKLever) world.getTileEntity(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + + int indexHit = 0; + + if(meta == 2 && hitX < 0.5) indexHit = 1; + if(meta == 3 && hitX > 0.5) indexHit = 1; + if(meta == 4 && hitZ > 0.5) indexHit = 1; + if(meta == 5 && hitZ < 0.5) indexHit = 1; + + if(!tile.levers[indexHit].active) return false; + tile.levers[indexHit].click(); + } + + return true; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java new file mode 100644 index 000000000..720eea3a7 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java @@ -0,0 +1,125 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKLever; +import com.hbm.util.i18n.I18nUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + +public class GUIScreenRBMKLever extends GuiScreen { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rbmk_lever.png"); + public TileEntityRBMKLever lever; + protected int xSize; + protected int ySize; + protected int guiLeft; + protected int guiTop; + + protected boolean[] active = new boolean[2]; + protected boolean[] polling = new boolean[2]; + + public GUIScreenRBMKLever(TileEntityRBMKLever lever) { + this.lever = lever; + + this.xSize = 256; + this.ySize = 150; + } + + @Override + public void initGui() { + super.initGui(); + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + + Keyboard.enableRepeatEvents(true); + + int oX = 4; + int oY = 4; + + for(int i = 0; i < 2; i++) { + + active[i] = lever.levers[i].active; + polling[i] = lever.levers[i].polling; + } + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + this.drawDefaultBackground(); + this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + GL11.glDisable(GL11.GL_LIGHTING); + this.drawGuiContainerForegroundLayer(mouseX, mouseY); + GL11.glEnable(GL11.GL_LIGHTING); + } + + private void drawGuiContainerForegroundLayer(int x, int y) { + String name = I18nUtil.resolveKey("container.rbmkLever"); + this.fontRendererObj.drawString(name, this.guiLeft + this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, this.guiTop + 6, 4210752); + } + + private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + for(int i = 0; i < 2; i++) { + if(this.active[i]) drawTexturedModalRect(guiLeft + 111, guiTop + i * 54 + 54, 18, 150, 16, 16); + if(this.polling[i]) drawTexturedModalRect(guiLeft + 128, guiTop + i * 54 + 53, 0, 150, 18, 18); + } + + for(int i = 0; i < 2; i++) { + } + } + + @Override + protected void mouseClicked(int x, int y, int b) { + super.mouseClicked(x, y, b); + + for(int i = 0; i < 2; i++) { + if(guiLeft + 111 <= x && guiLeft + 111 + 16 > x && guiTop + i * 54 + 54 < y && guiTop + i * 54 + 54 + 16 >= y) { + this.active[i] = !this.active[i]; + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F + (this.active[i] ? 0.25F : 0F))); + return; + } + + if(guiLeft + 128 <= x && guiLeft + 128 + 18 > x && guiTop + i * 54 + 53 < y && guiTop + i * 54 + 53 + 18 >= y) { + this.polling[i] = !this.polling[i]; + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F + (this.polling[i] ? 0.25F : 0F))); + return; + } + } + + if(guiLeft + 209 <= x && guiLeft + 209 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + byte active = 0; + byte polling = 0; + for(int i = 0; i < 2; i++) { + if(this.active[i]) active |= 1 << i; + if(this.polling[i]) polling |= 1 << i; + } + data.setByte("active", active); + data.setByte("polling", polling); + + for(int i = 0; i < 2; i++) { + /*data.setString("label" + i, this.label[i].getText()); + data.setString("rtty" + i, this.rtty[i].getText()); + data.setString("cmd" + i, this.cmd[i].getText());*/ + } + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, lever.xCoord, lever.yCoord, lever.zCoord)); + return; + } + } + + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } + @Override public boolean doesGuiPauseGame() { return false; } +} diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java index 6324eb4af..5a19dd860 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java @@ -13,6 +13,7 @@ import com.hbm.entity.grenade.EntityGrenadeUniversal; import com.hbm.entity.logic.EntityNukeExplosionMK3; import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.entity.projectile.EntityBulletBeamBase; +import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; import com.hbm.explosion.vanillant.standard.BlockMutatorFire; @@ -168,7 +169,8 @@ public class ItemGrenadeFilling extends ItemEnumMulti { }; public static Consumer EXPLODE_EMP = (grenade) -> { - explodeStandardEnergy(grenade, 30F, 3F, DamageClass.ELECTRIC, 0.5F, 0.5F, 1F, 3F); + explodeStandardEnergy(grenade, 15F, 3F, DamageClass.ELECTRIC, 0.5F, 0.5F, 1F, 3F); + ExplosionNukeGeneric.empBlast(grenade.worldObj, (int) Math.floor(grenade.posX), (int) Math.floor(grenade.posY), (int) Math.floor(grenade.posZ), 5); }; public static Consumer EXPLODE_PLASMA = (grenade) -> { diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 9b25470df..f1dd3c567 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -415,6 +415,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKGauge.class, new RenderRBMKGauge()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKNumitron.class, new RenderRBMKNumitron()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKGraph.class, new RenderRBMKGraph()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKLever.class, new RenderRBMKLever()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRod.class, new RenderRBMKFuelChannel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRodReaSim.class, new RenderRBMKFuelChannel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKAutoloader.class, new RenderRBMKAutoloader()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 46556d7c4..4f206fb95 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1643,6 +1643,7 @@ public class ResourceManager { public static final HFRWavefrontObjectVBO rbmk_button = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/button.obj")).asVBO(); public static final HFRWavefrontObjectVBO rbmk_gauge = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/gauge.obj")).asVBO(); public static final HFRWavefrontObjectVBO rbmk_numitron = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/numitron.obj")).asVBO(); + public static final HFRWavefrontObjectVBO rbmk_lever = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/lever.obj")).asVBO(); public static final HFRWavefrontObject rbmk_debris = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/debris.obj")).noSmooth(); public static final ResourceLocation rbmk_crane_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/crane_console.png"); public static final ResourceLocation rbmk_crane_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_crane.png"); @@ -1652,6 +1653,7 @@ public class ResourceManager { public static final ResourceLocation rbmk_gauge_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/gauge.png"); public static final ResourceLocation rbmk_numitron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/numitron.png"); public static final ResourceLocation rbmk_numitron_lights_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/numitron_lights.png"); + public static final ResourceLocation rbmk_lever_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/lever.png"); public static final HFRWavefrontObject hev_battery = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/battery.obj")).noSmooth(); public static final HFRWavefrontObject anvil = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/anvil.obj")).noSmooth(); public static final HFRWavefrontObject crystal_power = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_power.obj")).noSmooth(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKLever.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKLever.java new file mode 100644 index 000000000..c980ed5f5 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKLever.java @@ -0,0 +1,73 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKLever; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKLever.LeverUnit; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderRBMKLever extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + + switch(te.getBlockMetadata()) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + TileEntityRBMKLever keypad = (TileEntityRBMKLever) te; + + for(int i = 0; i < 2; i++) { + LeverUnit key = keypad.levers[i]; + if(!key.active) continue; + + GL11.glPushMatrix(); + GL11.glTranslated(0.25, 0, i * -0.5 + 0.25); + + GL11.glColor3f(1F, 1F, 1F); + this.bindTexture(ResourceManager.rbmk_lever_tex); + ResourceManager.rbmk_lever.renderPart("Base"); + + GL11.glPushMatrix(); + + GL11.glTranslated(0.125, 0.5625, 0); + GL11.glRotated(-180 * i, 0, 0, 1); + GL11.glTranslated(-0.125, -0.5625, 0); + ResourceManager.rbmk_lever.renderPart("Lever"); + + GL11.glPopMatrix(); + + FontRenderer font = Minecraft.getMinecraft().fontRenderer; + int height = font.FONT_HEIGHT; + if(key.label != null && !key.label.isEmpty()) { + + GL11.glTranslated(0.01, 0.3125, 0); + int width = font.getStringWidth(key.label); + float f3 = Math.min(0.0125F, 0.4F / Math.max(width, 1)); + GL11.glScalef(f3, -f3, f3); + GL11.glNormal3f(0.0F, 0.0F, -1.0F); + GL11.glRotatef(90, 0, 1, 0); + + RenderArcFurnace.fullbright(true); + font.drawString(key.label, - width / 2, - height / 2, 0x00ff00); + RenderArcFurnace.fullbright(false); + } + GL11.glPopMatrix(); + } + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index dde78ebc5..623dac412 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -407,6 +407,7 @@ public class TileMappings { put(TileEntityRBMKGauge.class, "tileentity_rbmk_gauge"); put(TileEntityRBMKNumitron.class, "tileentity_rbmk_numitron"); put(TileEntityRBMKGraph.class, "tileentity_rbmk_graph"); + put(TileEntityRBMKLever.class, "tileentity_rbmk_lever"); put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet"); put(TileEntityRBMKOutlet.class, "tileentity_rbmk_outlet"); put(TileEntityRBMKAutoloader.class, "tileentity_rbmk_autoloader"); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java index d448ac093..ceeb84275 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java @@ -209,14 +209,14 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement if((PREFIX_FUNCTION + "setrods").equals(name) && params.length > 0) { int percent = IRORInteractive.parseInt(params[0], 0, 100); - this.targetLevel = percent / 100D; + this.setTarget(percent / 100D); this.markDirty(); return null; } if((PREFIX_FUNCTION + "extendrods").equals(name) && params.length > 0) { int percent = IRORInteractive.parseInt(params[0], -100, 100); - this.targetLevel = MathHelper.clamp_double(this.targetLevel + percent / 100D, 0D, 1D); + this.setTarget(MathHelper.clamp_double(this.targetLevel + percent / 100D, 0D, 1D)); this.markDirty(); return null; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKLever.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKLever.java new file mode 100644 index 000000000..a04bbdeb3 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKLever.java @@ -0,0 +1,187 @@ +package com.hbm.tileentity.machine.rbmk; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.gui.GUIScreenRBMKLever; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.tileentity.network.RTTYSystem; +import com.hbm.util.BufferUtil; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class TileEntityRBMKLever extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver { + + /* __________ + * / /| + * /________ / | + * | __ __ | | + * ||/\| |/\|| | + * ||--| |--|| | + * ||__| |__|| / + * |_________|/ + */ + + public LeverUnit[] levers = new LeverUnit[2]; + + public TileEntityRBMKLever() { + for(int i = 0; i < 2; i++) this.levers[i] = new LeverUnit(i); + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + for(int i = 0; i < 2; i++) this.levers[i].update(); + + this.networkPackNT(50); + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(int i = 0; i < 2; i++) this.levers[i].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(int i = 0; i < 2; i++) this.levers[i].deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < 2; i++) this.levers[i].readFromNBT(nbt, i); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < 2; i++) this.levers[i].writeToNBT(nbt, i); + } + + public class LeverUnit { + + /** If the output should be per tick, allows the lever to lock in place */ + public boolean polling; + /** If the lever is flipped, assuming polling is enabled */ + public boolean isFlipped; + /** Label on the lever as rendered on the panel */ + public String label = ""; + /** What channel to send the command over */ + public String rtty = ""; + /** What to send when pressed */ + public String command = ""; + /** Whether this lever is enabled and can be pressed */ + public boolean active; + /** For non-polling levers, the time until the lever returns */ + public int holdTimer; + + public LeverUnit(int initialIndex) { + label = "Lever " + (initialIndex + 1); + } + + public void click() { + if(!active) return; + + if(!polling) { + if(canSend()) RTTYSystem.broadcast(worldObj, rtty, command); + this.isFlipped = true; + this.holdTimer = 10; + } else { + this.isFlipped = !this.isFlipped; + TileEntityRBMKLever.this.markDirty(); + } + + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "random.click", 1F, this.isFlipped ? 1F : 0.75F); + } + + public void update() { + if(!active) return; + + if(polling && isFlipped) { + if(canSend()) RTTYSystem.broadcast(worldObj, rtty, command); + } + + if(!polling && isFlipped) { + if(this.holdTimer-- <= 0) { + this.isFlipped = false; + } + } + } + + public boolean canSend() { + return rtty != null && !rtty.isEmpty() && command != null && !command.isEmpty(); + } + + public void serialize(ByteBuf buf) { + buf.writeBoolean(active); + buf.writeBoolean(polling); + buf.writeBoolean(isFlipped); + BufferUtil.writeString(buf, label); + BufferUtil.writeString(buf, rtty); + BufferUtil.writeString(buf, command); + } + + public void deserialize(ByteBuf buf) { + active = buf.readBoolean(); + polling = buf.readBoolean(); + isFlipped = buf.readBoolean(); + label = BufferUtil.readString(buf); + rtty = BufferUtil.readString(buf); + command = BufferUtil.readString(buf); + } + + public void readFromNBT(NBTTagCompound nbt, int index) { + this.active = nbt.getBoolean("active" + index); + this.polling = nbt.getBoolean("polling" + index); + this.isFlipped = nbt.getBoolean("isFlipped" + index); + this.label = nbt.getString("label" + index); + this.rtty = nbt.getString("rtty" + index); + this.command = nbt.getString("command" + index); + } + + public void writeToNBT(NBTTagCompound nbt, int index) { + nbt.setBoolean("active" + index, active); + nbt.setBoolean("polling" + index, polling); + nbt.setBoolean("isFlipped" + index, isFlipped); + nbt.setString("label" + index, label); + nbt.setString("rtty" + index, rtty); + nbt.setString("command" + index, command); + } + } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenRBMKLever(this); } + + @Override + public boolean hasPermission(EntityPlayer player) { + return player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 15 * 15; + } + + @Override + public void receiveControl(NBTTagCompound data) { + + int active = data.getByte("active"); + int polling = data.getByte("polling"); + for(int i = 0; i < 2; i++) { + this.levers[i].active = (active & (1 << i)) != 0; + this.levers[i].polling = (polling & (1 << i)) != 0; + } + + for(int i = 0; i < 2; i++) { + LeverUnit lever = this.levers[i]; + lever.label = data.getString("label" + i); + lever.rtty = data.getString("rtty" + i); + lever.command = data.getString("cmd" + i); + } + } +} diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index e6b482f0d..7ba9daa7b 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -18,6 +18,7 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.entity.mob.EntityCreeperNuclear; import com.hbm.items.ModItems; +import com.hbm.items.armor.ArmorFSBPowered; import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Quartet; import com.hbm.util.i18n.I18nUtil; @@ -446,10 +447,18 @@ public class DamageResistanceHandler { @SubscribeEvent public void onEntityDamaged(LivingHurtEvent event) { - event.ammount = calculateDamage(event.entityLiving, event.source, event.ammount, currentPDT, currentPDR); + DamageSource source = event.source; + if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.ELECTRIC.name().toLowerCase(Locale.US))) { + ItemStack chest = event.entityLiving.getEquipmentInSlot(3); + if(chest != null && chest.getItem() instanceof ArmorFSBPowered) { + event.ammount *= 5; + } + } + + event.ammount = calculateDamage(event.entityLiving, source, event.ammount, currentPDT, currentPDR); if(event.entityLiving instanceof IResistanceProvider) { IResistanceProvider irp = (IResistanceProvider) event.entityLiving; - irp.onDamageDealt(event.source, event.ammount); + irp.onDamageDealt(source, event.ammount); } } diff --git a/src/main/resources/assets/hbm/models/rbmk/lever.obj b/src/main/resources/assets/hbm/models/rbmk/lever.obj new file mode 100644 index 000000000..2385c9330 --- /dev/null +++ b/src/main/resources/assets/hbm/models/rbmk/lever.obj @@ -0,0 +1,647 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +o Lever +v 0.093750 0.812500 -0.062500 +v 0.093750 0.500000 -0.062500 +v 0.156250 0.812500 -0.062500 +v 0.156250 0.500000 -0.062500 +v 0.093750 0.500000 -0.125000 +v 0.093750 0.875000 -0.125000 +v 0.156250 0.500000 -0.125000 +v 0.156250 0.875000 -0.125000 +v 0.093750 0.875000 0.125000 +v 0.093750 0.500000 0.125000 +v 0.156250 0.875000 0.125000 +v 0.156250 0.500000 0.125000 +v 0.093750 0.500000 0.062500 +v 0.093750 0.812500 0.062500 +v 0.156250 0.500000 0.062500 +v 0.156250 0.812500 0.062500 +v 0.093750 0.875000 0.031250 +v 0.156250 0.875000 0.031250 +v 0.093750 0.875000 -0.031250 +v 0.156250 0.875000 -0.031250 +v 0.093750 1.062500 0.031250 +v 0.156250 1.062500 0.031250 +v 0.093750 1.062500 -0.031250 +v 0.156250 1.062500 -0.031250 +v 0.093750 0.593750 -0.156250 +v 0.093750 0.531250 -0.156250 +v 0.156250 0.593750 -0.156250 +v 0.156250 0.531250 -0.156250 +v 0.093750 0.531250 -0.187500 +v 0.093750 0.593750 -0.187500 +v 0.156250 0.531250 -0.187500 +v 0.156250 0.593750 -0.187500 +v 0.093750 0.593750 0.187500 +v 0.093750 0.531250 0.187500 +v 0.156250 0.593750 0.187500 +v 0.156250 0.531250 0.187500 +v 0.093750 0.531250 0.156250 +v 0.093750 0.593750 0.156250 +v 0.156250 0.531250 0.156250 +v 0.156250 0.593750 0.156250 +vt 0.600000 0.066667 +vt 0.550000 0.400000 +vt 0.550000 0.066667 +vt 0.700000 0.466667 +vt 0.650000 0.066667 +vt 0.700000 0.066667 +vt 0.500000 0.400000 +vt 0.650000 0.466667 +vt 0.450000 0.466667 +vt 0.450000 0.066667 +vt 0.500000 0.066667 +vt 0.600000 0.000000 +vt 0.600000 0.400000 +vt 0.650000 0.466667 +vt 0.450000 0.066667 +vt 0.400000 0.466667 +vt 0.400000 0.066667 +vt 0.550000 0.400000 +vt 0.500000 0.066667 +vt 0.550000 0.066667 +vt 0.500000 0.400000 +vt 0.600000 0.333333 +vt 0.650000 0.066667 +vt 0.600000 0.400000 +vt 0.600000 0.066667 +vt 0.450000 0.000000 +vt 0.450000 0.466667 +vt 0.650000 0.533333 +vt 0.900000 0.200000 +vt 0.850000 0.000000 +vt 0.900000 0.000000 +vt 0.850000 0.200000 +vt 0.800000 0.000000 +vt 0.750000 0.200000 +vt 0.700000 0.000000 +vt 0.750000 0.000000 +vt 0.800000 0.200000 +vt 0.750000 0.266667 +vt 0.800000 0.266667 +vt 0.400000 0.533333 +vt 0.450000 0.466667 +vt 0.450000 0.533333 +vt 0.450000 0.600000 +vt 0.400000 0.533333 +vt 0.450000 0.533333 +vt 0.450000 0.466667 +vt 0.400000 0.466667 +vt 0.350000 0.533333 +vt 0.400000 0.600000 +vt 0.350000 0.600000 +vt 0.400000 0.666667 +vt 0.450000 0.666667 +vt 0.500000 0.600000 +vt 0.500000 0.533333 +vt 0.500000 0.600000 +vt 0.450000 0.600000 +vt 0.400000 0.666667 +vt 0.400000 0.600000 +vt 0.350000 0.533333 +vt 0.650000 0.000000 +vt 0.500000 0.333333 +vt 0.500000 0.000000 +vt 0.450000 0.533333 +vt 0.700000 0.200000 +vt 0.400000 0.466667 +vt 0.500000 0.533333 +vt 0.450000 0.666667 +vt 0.350000 0.600000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 4/1/1 1/2/1 2/3/1 +f 6/4/2 7/5/2 5/6/2 +f 1/7/3 9/8/3 6/9/3 +f 1/7/3 5/10/3 2/11/3 +f 2/12/4 7/5/4 4/1/4 +f 3/13/5 7/5/5 8/14/5 +f 12/15/1 9/16/1 10/17/1 +f 14/18/2 15/19/2 13/20/2 +f 16/21/4 1/22/4 3/13/4 +f 10/23/3 14/24/3 13/25/3 +f 10/26/4 15/19/4 12/15/4 +f 12/15/5 16/21/5 11/27/5 +f 6/28/6 11/27/6 8/14/6 +f 8/14/5 16/21/5 3/13/5 +f 21/29/3 19/30/3 17/31/3 +f 23/32/2 20/33/2 19/30/2 +f 22/34/1 17/35/1 18/36/1 +f 24/37/5 18/36/5 20/33/5 +f 21/38/6 24/37/6 23/39/6 +f 34/40/4 39/41/4 36/42/4 +f 30/43/2 31/44/2 29/45/2 +f 26/46/4 31/44/4 28/47/4 +f 28/48/5 32/49/5 27/50/5 +f 27/51/6 30/43/6 25/52/6 +f 25/53/3 29/45/3 26/54/3 +f 36/42/5 40/55/5 35/56/5 +f 35/56/6 38/57/6 33/58/6 +f 33/58/3 37/59/3 34/40/3 +f 34/40/1 35/56/1 33/58/1 +f 4/1/1 3/13/1 1/2/1 +f 6/4/2 8/14/2 7/5/2 +f 1/7/3 14/24/3 9/8/3 +f 1/7/3 6/9/3 5/10/3 +f 2/12/4 5/60/4 7/5/4 +f 3/13/5 4/1/5 7/5/5 +f 12/15/1 11/27/1 9/16/1 +f 14/18/2 16/21/2 15/19/2 +f 16/21/4 14/61/4 1/22/4 +f 10/23/3 9/8/3 14/24/3 +f 10/26/4 13/62/4 15/19/4 +f 12/15/5 15/19/5 16/21/5 +f 6/28/6 9/63/6 11/27/6 +f 8/14/5 11/27/5 16/21/5 +f 21/29/3 23/32/3 19/30/3 +f 23/32/2 24/37/2 20/33/2 +f 22/34/1 21/64/1 17/35/1 +f 24/37/5 22/34/5 18/36/5 +f 21/38/6 22/34/6 24/37/6 +f 34/40/4 37/65/4 39/41/4 +f 30/43/2 32/49/2 31/44/2 +f 26/46/4 29/45/4 31/44/4 +f 28/48/5 31/44/5 32/49/5 +f 27/51/6 32/49/6 30/43/6 +f 25/53/3 30/43/3 29/45/3 +f 36/42/5 39/66/5 40/55/5 +f 35/56/6 40/67/6 38/57/6 +f 33/58/3 38/68/3 37/59/3 +f 34/40/1 36/42/1 35/56/1 +o Base +v 0.000000 0.968750 0.156250 +v 0.000000 0.156250 0.156250 +v 0.000000 0.968750 -0.156250 +v 0.000000 0.156250 -0.156250 +v 0.062500 0.968750 -0.156250 +v 0.062500 0.968750 0.156250 +v 0.062500 0.156250 0.156250 +v 0.062500 0.156250 -0.156250 +v 0.062500 0.625000 0.062500 +v 0.062500 0.500000 0.062500 +v 0.062500 0.625000 -0.062500 +v 0.062500 0.500000 -0.062500 +v 0.187500 0.625000 -0.062500 +v 0.187500 0.625000 0.062500 +v 0.187500 0.500000 0.062500 +v 0.187500 0.500000 -0.062500 +v 0.062500 0.437500 0.156250 +v 0.062500 0.375000 0.156250 +v 0.062500 0.437500 0.031250 +v 0.062500 0.375000 0.031250 +v 0.156250 0.437500 0.031250 +v 0.156250 0.437500 0.156250 +v 0.156250 0.375000 0.156250 +v 0.156250 0.375000 0.031250 +v 0.156250 0.437500 0.062500 +v 0.093750 0.437500 0.125000 +v 0.156250 0.437500 0.125000 +v 0.156250 0.375000 0.125000 +v 0.093750 0.437500 0.062500 +v 0.156250 0.375000 0.062500 +v 0.093750 0.375000 0.125000 +v 0.093750 0.375000 0.062500 +v 0.062500 0.625000 0.156250 +v 0.062500 0.500000 0.156250 +v 0.062500 0.625000 0.125000 +v 0.062500 0.500000 0.125000 +v 0.187500 0.625000 0.125000 +v 0.187500 0.625000 0.156250 +v 0.187500 0.500000 0.156250 +v 0.187500 0.500000 0.125000 +v 0.062500 0.625000 -0.125000 +v 0.062500 0.500000 -0.125000 +v 0.062500 0.625000 -0.156250 +v 0.062500 0.500000 -0.156250 +v 0.187500 0.625000 -0.156250 +v 0.187500 0.625000 -0.125000 +v 0.187500 0.500000 -0.125000 +v 0.187500 0.500000 -0.156250 +v 0.062500 0.437500 -0.031250 +v 0.062500 0.375000 -0.031250 +v 0.062500 0.437500 -0.156250 +v 0.062500 0.375000 -0.156250 +v 0.156250 0.437500 -0.156250 +v 0.156250 0.437500 -0.031250 +v 0.156250 0.375000 -0.031250 +v 0.156250 0.375000 -0.156250 +v 0.156250 0.437500 -0.125000 +v 0.093750 0.437500 -0.062500 +v 0.156250 0.437500 -0.062500 +v 0.156250 0.375000 -0.062500 +v 0.093750 0.437500 -0.125000 +v 0.156250 0.375000 -0.125000 +v 0.093750 0.375000 -0.062500 +v 0.093750 0.375000 -0.125000 +v 0.062500 0.750000 0.156250 +v 0.062500 0.687500 0.156250 +v 0.062500 0.750000 0.031250 +v 0.062500 0.687500 0.031250 +v 0.156250 0.750000 0.031250 +v 0.156250 0.750000 0.156250 +v 0.156250 0.687500 0.156250 +v 0.156250 0.687500 0.031250 +v 0.156250 0.750000 0.062500 +v 0.093750 0.750000 0.125000 +v 0.156250 0.750000 0.125000 +v 0.156250 0.687500 0.125000 +v 0.093750 0.750000 0.062500 +v 0.156250 0.687500 0.062500 +v 0.093750 0.687500 0.125000 +v 0.093750 0.687500 0.062500 +v 0.062500 0.750000 -0.031250 +v 0.062500 0.687500 -0.031250 +v 0.062500 0.750000 -0.156250 +v 0.062500 0.687500 -0.156250 +v 0.156250 0.750000 -0.156250 +v 0.156250 0.750000 -0.031250 +v 0.156250 0.687500 -0.031250 +v 0.156250 0.687500 -0.156250 +v 0.156250 0.750000 -0.125000 +v 0.093750 0.750000 -0.062500 +v 0.156250 0.750000 -0.062500 +v 0.156250 0.687500 -0.062500 +v 0.093750 0.750000 -0.125000 +v 0.156250 0.687500 -0.125000 +v 0.093750 0.687500 -0.062500 +v 0.093750 0.687500 -0.125000 +vt 0.050000 0.066667 +vt 0.300000 0.933333 +vt 0.050000 0.933333 +vt 0.300000 0.000000 +vt 0.050000 0.000000 +vt 0.050000 1.000000 +vt 0.300000 1.000000 +vt 0.350000 0.933333 +vt 0.300000 0.066667 +vt 0.350000 0.066667 +vt 0.000000 0.066667 +vt 0.000000 0.933333 +vt 0.450000 0.733333 +vt 0.550000 0.866667 +vt 0.450000 0.866667 +vt 0.650000 0.866667 +vt 0.550000 0.733333 +vt 0.650000 0.733333 +vt 0.350000 0.733333 +vt 0.350000 0.866667 +vt 0.550000 0.600000 +vt 0.450000 0.600000 +vt 0.450000 1.000000 +vt 0.550000 1.000000 +vt 0.875000 0.533333 +vt 0.900000 0.600000 +vt 0.875000 0.600000 +vt 1.000000 0.600000 +vt 0.925000 0.533333 +vt 1.000000 0.533333 +vt 0.700000 0.533333 +vt 0.775000 0.600000 +vt 0.700000 0.600000 +vt 0.975000 0.600000 +vt 0.925000 0.533333 +vt 0.975000 0.533333 +vt 0.825000 0.533333 +vt 0.875000 0.600000 +vt 0.825000 0.600000 +vt 0.800000 0.533333 +vt 0.825000 0.600000 +vt 0.800000 0.600000 +vt 0.825000 0.700000 +vt 0.900000 0.733333 +vt 0.800000 0.733333 +vt 0.725000 0.533333 +vt 0.775000 0.600000 +vt 0.725000 0.600000 +vt 0.800000 0.633333 +vt 0.825000 0.633333 +vt 0.875000 0.700000 +vt 0.900000 0.633333 +vt 0.875000 0.433333 +vt 0.900000 0.500000 +vt 0.875000 0.500000 +vt 0.800000 0.500000 +vt 0.825000 0.433333 +vt 0.825000 0.500000 +vt 0.800000 0.400000 +vt 0.900000 0.400000 +vt 0.750000 0.733333 +vt 0.800000 0.866667 +vt 0.750000 0.866667 +vt 0.900000 0.866667 +vt 0.800000 0.733333 +vt 0.900000 0.733333 +vt 0.650000 0.733333 +vt 0.650000 0.866667 +vt 0.800000 0.600000 +vt 0.750000 0.600000 +vt 0.750000 1.000000 +vt 0.800000 1.000000 +vt 0.750000 0.733333 +vt 0.800000 0.866667 +vt 0.750000 0.866667 +vt 0.900000 0.866667 +vt 0.800000 0.733333 +vt 0.900000 0.733333 +vt 0.650000 0.733333 +vt 0.650000 0.866667 +vt 0.800000 0.600000 +vt 0.750000 0.600000 +vt 0.750000 1.000000 +vt 0.800000 1.000000 +vt 0.875000 0.533333 +vt 0.900000 0.600000 +vt 0.875000 0.600000 +vt 1.000000 0.600000 +vt 0.925000 0.533333 +vt 1.000000 0.533333 +vt 0.700000 0.533333 +vt 0.775000 0.600000 +vt 0.700000 0.600000 +vt 0.975000 0.600000 +vt 0.925000 0.533333 +vt 0.975000 0.533333 +vt 0.825000 0.533333 +vt 0.875000 0.600000 +vt 0.825000 0.600000 +vt 0.800000 0.533333 +vt 0.825000 0.600000 +vt 0.800000 0.600000 +vt 0.825000 0.700000 +vt 0.900000 0.733333 +vt 0.800000 0.733333 +vt 0.725000 0.533333 +vt 0.775000 0.600000 +vt 0.725000 0.600000 +vt 0.800000 0.633333 +vt 0.825000 0.633333 +vt 0.875000 0.700000 +vt 0.900000 0.633333 +vt 0.875000 0.433333 +vt 0.900000 0.500000 +vt 0.875000 0.500000 +vt 0.800000 0.500000 +vt 0.825000 0.433333 +vt 0.825000 0.500000 +vt 0.800000 0.400000 +vt 0.900000 0.400000 +vt 0.875000 0.533333 +vt 0.900000 0.600000 +vt 0.875000 0.600000 +vt 1.000000 0.600000 +vt 0.925000 0.533333 +vt 1.000000 0.533333 +vt 0.700000 0.533333 +vt 0.775000 0.600000 +vt 0.700000 0.600000 +vt 0.975000 0.600000 +vt 0.925000 0.533333 +vt 0.975000 0.533333 +vt 0.825000 0.533333 +vt 0.875000 0.600000 +vt 0.825000 0.600000 +vt 0.800000 0.533333 +vt 0.825000 0.600000 +vt 0.800000 0.600000 +vt 0.825000 0.700000 +vt 0.900000 0.733333 +vt 0.800000 0.733333 +vt 0.725000 0.533333 +vt 0.775000 0.600000 +vt 0.725000 0.600000 +vt 0.800000 0.633333 +vt 0.825000 0.633333 +vt 0.875000 0.700000 +vt 0.900000 0.633333 +vt 0.875000 0.433333 +vt 0.900000 0.500000 +vt 0.875000 0.500000 +vt 0.800000 0.500000 +vt 0.825000 0.433333 +vt 0.825000 0.500000 +vt 0.800000 0.400000 +vt 0.900000 0.400000 +vt 0.875000 0.533333 +vt 0.900000 0.600000 +vt 0.875000 0.600000 +vt 1.000000 0.600000 +vt 0.925000 0.533333 +vt 1.000000 0.533333 +vt 0.700000 0.533333 +vt 0.775000 0.600000 +vt 0.700000 0.600000 +vt 0.975000 0.600000 +vt 0.925000 0.533333 +vt 0.975000 0.533333 +vt 0.825000 0.533333 +vt 0.875000 0.600000 +vt 0.825000 0.600000 +vt 0.800000 0.533333 +vt 0.825000 0.600000 +vt 0.800000 0.600000 +vt 0.825000 0.700000 +vt 0.900000 0.733333 +vt 0.800000 0.733333 +vt 0.725000 0.533333 +vt 0.775000 0.600000 +vt 0.725000 0.600000 +vt 0.800000 0.633333 +vt 0.825000 0.633333 +vt 0.875000 0.700000 +vt 0.900000 0.633333 +vt 0.875000 0.433333 +vt 0.900000 0.500000 +vt 0.875000 0.500000 +vt 0.800000 0.500000 +vt 0.825000 0.433333 +vt 0.825000 0.500000 +vt 0.800000 0.400000 +vt 0.900000 0.400000 +vt 0.900000 0.533333 +vt 0.925000 0.600000 +vt 0.775000 0.533333 +vt 0.925000 0.600000 +vt 0.875000 0.533333 +vt 0.825000 0.533333 +vt 0.775000 0.533333 +vt 0.875000 0.633333 +vt 0.900000 0.533333 +vt 0.925000 0.600000 +vt 0.775000 0.533333 +vt 0.925000 0.600000 +vt 0.875000 0.533333 +vt 0.825000 0.533333 +vt 0.775000 0.533333 +vt 0.875000 0.633333 +vt 0.900000 0.533333 +vt 0.925000 0.600000 +vt 0.775000 0.533333 +vt 0.925000 0.600000 +vt 0.875000 0.533333 +vt 0.825000 0.533333 +vt 0.775000 0.533333 +vt 0.875000 0.633333 +vt 0.900000 0.533333 +vt 0.925000 0.600000 +vt 0.775000 0.533333 +vt 0.925000 0.600000 +vt 0.875000 0.533333 +vt 0.825000 0.533333 +vt 0.775000 0.533333 +vt 0.875000 0.633333 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +s off +f 47/69/7 45/70/7 46/71/7 +f 44/72/8 47/69/8 42/73/8 +f 41/74/9 45/70/9 43/75/9 +f 43/76/10 48/77/10 44/78/10 +f 42/79/11 46/71/11 41/80/11 +f 55/81/7 53/82/7 54/83/7 +f 51/84/10 56/85/10 52/86/10 +f 50/87/11 54/83/11 49/88/11 +f 52/89/8 55/81/8 50/90/8 +f 49/91/9 53/82/9 51/92/9 +f 70/93/7 61/94/7 65/95/7 +f 59/96/10 64/97/10 60/98/10 +f 58/99/11 62/100/11 57/101/11 +f 65/102/11 72/103/11 70/104/11 +f 71/105/7 69/106/7 66/107/7 +f 63/108/7 67/109/7 62/110/7 +f 66/111/9 59/112/9 57/113/9 +f 68/114/10 66/115/10 67/116/10 +f 66/111/9 62/117/9 67/118/9 +f 69/119/9 61/120/9 59/112/9 +f 72/121/8 64/122/8 70/123/8 +f 63/124/8 71/125/8 68/126/8 +f 72/121/8 58/127/8 60/128/8 +f 79/129/7 77/130/7 78/131/7 +f 75/132/10 80/133/10 76/134/10 +f 74/135/11 78/131/11 73/136/11 +f 76/137/8 79/129/8 74/138/8 +f 73/139/9 77/130/9 75/140/9 +f 87/141/7 85/142/7 86/143/7 +f 83/144/10 88/145/10 84/146/10 +f 82/147/11 86/143/11 81/148/11 +f 84/149/8 87/141/8 82/150/8 +f 81/151/9 85/142/9 83/152/9 +f 102/153/7 93/154/7 97/155/7 +f 91/156/10 96/157/10 92/158/10 +f 90/159/11 94/160/11 89/161/11 +f 97/162/11 104/163/11 102/164/11 +f 103/165/7 101/166/7 98/167/7 +f 95/168/7 99/169/7 94/170/7 +f 98/171/9 91/172/9 89/173/9 +f 100/174/10 98/175/10 99/176/10 +f 98/171/9 94/177/9 99/178/9 +f 101/179/9 93/180/9 91/172/9 +f 104/181/8 96/182/8 102/183/8 +f 95/184/8 103/185/8 100/186/8 +f 104/181/8 90/187/8 92/188/8 +f 118/189/7 109/190/7 113/191/7 +f 107/192/10 112/193/10 108/194/10 +f 106/195/11 110/196/11 105/197/11 +f 113/198/11 120/199/11 118/200/11 +f 119/201/7 117/202/7 114/203/7 +f 111/204/7 115/205/7 110/206/7 +f 114/207/9 107/208/9 105/209/9 +f 116/210/10 114/211/10 115/212/10 +f 114/207/9 110/213/9 115/214/9 +f 117/215/9 109/216/9 107/208/9 +f 120/217/8 112/218/8 118/219/8 +f 111/220/8 119/221/8 116/222/8 +f 120/217/8 106/223/8 108/224/8 +f 134/225/7 125/226/7 129/227/7 +f 123/228/10 128/229/10 124/230/10 +f 122/231/11 126/232/11 121/233/11 +f 129/234/11 136/235/11 134/236/11 +f 135/237/7 133/238/7 130/239/7 +f 127/240/7 131/241/7 126/242/7 +f 130/243/9 123/244/9 121/245/9 +f 132/246/10 130/247/10 131/248/10 +f 130/243/9 126/249/9 131/250/9 +f 133/251/9 125/252/9 123/244/9 +f 136/253/8 128/254/8 134/255/8 +f 127/256/8 135/257/8 132/258/8 +f 136/253/8 122/259/8 124/260/8 +f 47/69/7 48/77/7 45/70/7 +f 44/72/8 48/77/8 47/69/8 +f 41/74/9 46/71/9 45/70/9 +f 43/76/10 45/70/10 48/77/10 +f 42/79/11 47/69/11 46/71/11 +f 55/81/7 56/85/7 53/82/7 +f 51/84/10 53/82/10 56/85/10 +f 50/87/11 55/81/11 54/83/11 +f 52/89/8 56/85/8 55/81/8 +f 49/91/9 54/83/9 53/82/9 +f 70/93/7 64/261/7 61/94/7 +f 59/96/10 61/262/10 64/97/10 +f 58/99/11 63/263/11 62/100/11 +f 65/102/11 69/264/11 72/103/11 +f 71/105/7 72/265/7 69/106/7 +f 63/108/7 68/266/7 67/109/7 +f 66/111/9 69/119/9 59/112/9 +f 68/114/10 71/267/10 66/115/10 +f 66/111/9 57/113/9 62/117/9 +f 69/119/9 65/268/9 61/120/9 +f 72/121/8 60/128/8 64/122/8 +f 63/124/8 58/127/8 71/125/8 +f 72/121/8 71/125/8 58/127/8 +f 79/129/7 80/133/7 77/130/7 +f 75/132/10 77/130/10 80/133/10 +f 74/135/11 79/129/11 78/131/11 +f 76/137/8 80/133/8 79/129/8 +f 73/139/9 78/131/9 77/130/9 +f 87/141/7 88/145/7 85/142/7 +f 83/144/10 85/142/10 88/145/10 +f 82/147/11 87/141/11 86/143/11 +f 84/149/8 88/145/8 87/141/8 +f 81/151/9 86/143/9 85/142/9 +f 102/153/7 96/269/7 93/154/7 +f 91/156/10 93/270/10 96/157/10 +f 90/159/11 95/271/11 94/160/11 +f 97/162/11 101/272/11 104/163/11 +f 103/165/7 104/273/7 101/166/7 +f 95/168/7 100/274/7 99/169/7 +f 98/171/9 101/179/9 91/172/9 +f 100/174/10 103/275/10 98/175/10 +f 98/171/9 89/173/9 94/177/9 +f 101/179/9 97/276/9 93/180/9 +f 104/181/8 92/188/8 96/182/8 +f 95/184/8 90/187/8 103/185/8 +f 104/181/8 103/185/8 90/187/8 +f 118/189/7 112/277/7 109/190/7 +f 107/192/10 109/278/10 112/193/10 +f 106/195/11 111/279/11 110/196/11 +f 113/198/11 117/280/11 120/199/11 +f 119/201/7 120/281/7 117/202/7 +f 111/204/7 116/282/7 115/205/7 +f 114/207/9 117/215/9 107/208/9 +f 116/210/10 119/283/10 114/211/10 +f 114/207/9 105/209/9 110/213/9 +f 117/215/9 113/284/9 109/216/9 +f 120/217/8 108/224/8 112/218/8 +f 111/220/8 106/223/8 119/221/8 +f 120/217/8 119/221/8 106/223/8 +f 134/225/7 128/285/7 125/226/7 +f 123/228/10 125/286/10 128/229/10 +f 122/231/11 127/287/11 126/232/11 +f 129/234/11 133/288/11 136/235/11 +f 135/237/7 136/289/7 133/238/7 +f 127/240/7 132/290/7 131/241/7 +f 130/243/9 133/251/9 123/244/9 +f 132/246/10 135/291/10 130/247/10 +f 130/243/9 121/245/9 126/249/9 +f 133/251/9 129/292/9 125/252/9 +f 136/253/8 124/260/8 128/254/8 +f 127/256/8 122/259/8 135/257/8 +f 136/253/8 135/257/8 122/259/8 diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_rbmk_lever.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_rbmk_lever.png new file mode 100644 index 0000000000000000000000000000000000000000..d360460c6a760ca5ddef49877720672f519e79df GIT binary patch literal 2845 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 literal 0 HcmV?d00001