RoR gauges

This commit is contained in:
Boblet 2026-03-13 13:45:06 +01:00
parent 2e27763092
commit e8bbc53e36
21 changed files with 958 additions and 1727 deletions

View File

@ -1,26 +1,35 @@
## Added ## Added
* Key pad * Key pad
* Fits visually with the RBMK display block * Fits visually with the RBMK display block
* Allows up to four buttons to be configured with a screwdriver (shhift click!) * Allows up to four buttons to be configured with a screwdriver (shift click!)
* Buttons will send RoR signals when pressed, with a configured value on the configured frequencies * Buttons will send RoR signals when pressed, with a configured value on the configured frequencies
* Can be set to polling, which will resend the command until the button is pressed again * Can be set to polling, which will re-send the command until the button is pressed again
* Single push buttons and buttons set to polling which are enabled will glow in the dark * Single push buttons and buttons set to polling which are enabled will glow in the dark
* Each button can be assigned a label with glow in the dark paint * Each button can be assigned a label with glow in the dark paint
* Allows RBMK control rods to be fully remote controllable with no console * Allows RBMK control rods to be fully remote controllable with no console
* Gauge
* Allows up to four gauges to be configured with a screwdriver
* Gauges can read RoR signals and display numeric values on a specified range
* Minimum and maximum values can be defined, the gauge also has a red area for when the value exceeds the maximum
* If the minimum value is larger than the maximum, the needle will start at the top and run backwards
* Also has glow in the dark paint labels
## Changed ## Changed
* Updated chinese and ukrainian localization
* Updated textures for some nuclear bomb GUIs * Updated textures for some nuclear bomb GUIs
* Updated textures for steel tools
* RBMK fuel rods too hot to be taken out manually can now be removed by players in creative mode * RBMK fuel rods too hot to be taken out manually can now be removed by players in creative mode
* Updated the SILEX recycling recipe for MOX fuel to reflect the recent recipe change * Updated the SILEX recycling recipe for MOX fuel to reflect the recent recipe change
* High-xenon MOX pellets now yield xenon-135 again * High-xenon MOX pellets now yield xenon-135 again
* Improved logging for incorrectly configured machine recipes * Improved logging for incorrectly configured machine recipes
* Removed the legacy toolbox item * Removed the legacy toolbox item
* Due to complaints, the MOX recipe was now made more expensive * Due to complaints, the MOX recipe was now made more expensive
* Manual control rods now have the `extendrods` command, which allows the target setting to be adjusted without using an abolute value * Manual control rods now have the `extendrods` command, which allows the target setting to be adjusted without using an absolute value
* Removed the legacy relay structure
## Fixed ## Fixed
* Fixed some damage categories not applying correctly, causing things like general energy resistance to not work against lasers * Fixed some damage categories not applying correctly, causing things like general energy resistance to not work against lasers
* Fixed RoR components not being able to be attached to the top of reasim fuel rods * Fixed RoR components not being able to be attached to the top of reasim fuel rods
* Fixed a crash in multiplayer regarding RBMK control rods * Fixed a crash in multiplayer regarding RBMK control rods
* Fixed incorrect QMAW description of the autoloader, talking about fuel depletion instead of fuel enrichment * Fixed outdated QMAW description of some RBMK parts
* Fixed log spam when placing down a RoR controller * Fixed log spam when placing down a RoR controller

View File

@ -1098,6 +1098,7 @@ public class ModBlocks {
public static Block rbmk_crane_console; public static Block rbmk_crane_console;
public static Block rbmk_display; public static Block rbmk_display;
public static Block rbmk_key_pad; public static Block rbmk_key_pad;
public static Block rbmk_gauge;
public static Block rbmk_autoloader; public static Block rbmk_autoloader;
public static Block rbmk_loader; public static Block rbmk_loader;
public static Block rbmk_steam_inlet; public static Block rbmk_steam_inlet;
@ -2119,6 +2120,7 @@ public class ModBlocks {
rbmk_crane_console = new RBMKCraneConsole().setBlockName("rbmk_crane_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_crane_console"); rbmk_crane_console = new RBMKCraneConsole().setBlockName("rbmk_crane_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_crane_console");
rbmk_display = new RBMKDisplay().setBlockName("rbmk_display").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display"); rbmk_display = new RBMKDisplay().setBlockName("rbmk_display").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display");
rbmk_key_pad = new RBMKKeyPad().setBlockName("rbmk_key_pad").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display"); rbmk_key_pad = new RBMKKeyPad().setBlockName("rbmk_key_pad").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display");
rbmk_gauge = new RBMKGauge().setBlockName("rbmk_gauge").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_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_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"); 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");
@ -3112,6 +3114,7 @@ public class ModBlocks {
GameRegistry.registerBlock(rbmk_crane_console, rbmk_crane_console.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_crane_console, rbmk_crane_console.getUnlocalizedName());
register(rbmk_display); register(rbmk_display);
register(rbmk_key_pad); register(rbmk_key_pad);
register(rbmk_gauge);
register(rbmk_autoloader); register(rbmk_autoloader);
register(rbmk_loader); register(rbmk_loader);
register(rbmk_steam_inlet); register(rbmk_steam_inlet);

View File

@ -0,0 +1,25 @@
package com.hbm.blocks.machine.rbmk;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKGauge;
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 RBMKGauge extends RBMKMiniPanelBase implements IToolable {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityRBMKGauge();
}
@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;
}
}

View File

@ -81,19 +81,16 @@ public class WorldConfig {
public static boolean enableSulfurCave = true; public static boolean enableSulfurCave = true;
public static boolean enableAsbestosCave = true; public static boolean enableAsbestosCave = true;
// public static int radioStructure = 500;
public static int antennaStructure = 250; public static int antennaStructure = 250;
public static int atomStructure = 500; public static int atomStructure = 500;
public static int dungeonStructure = 64; public static int dungeonStructure = 64;
public static int relayStructure = 500;
public static int satelliteStructure = 500; public static int satelliteStructure = 500;
// public static int factoryStructure = 1000;
public static int dudStructure = 500; public static int dudStructure = 500;
public static int spaceshipStructure = 1000; public static int spaceshipStructure = 1000;
public static int barrelStructure = 5000; public static int barrelStructure = 5000;
public static int geyserWater = 3000; public static int geyserWater = 3000;
public static int geyserChlorine = 3000; public static int geyserChlorine = 3000;
public static int geyserVapor = 500; public static int geyserVapor = 250;
public static int capsuleStructure = 100; public static int capsuleStructure = 100;
public static int arcticStructure = 500; public static int arcticStructure = 500;
public static int jungleStructure = 2000; public static int jungleStructure = 2000;
@ -204,13 +201,10 @@ public class WorldConfig {
enableAsbestosCave = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.C01_enableAsbestosCave", "Toggles asbestos caves", true); enableAsbestosCave = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.C01_enableAsbestosCave", "Toggles asbestos caves", true);
final String CATEGORY_DUNGEON = CommonConfig.CATEGORY_DUNGEONS; final String CATEGORY_DUNGEON = CommonConfig.CATEGORY_DUNGEONS;
// radioStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.00_radioSpawn", "Spawn radio station on every nTH chunk", 500);
antennaStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.01_antennaSpawn", "Spawn antenna on every nTH chunk", 250); antennaStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.01_antennaSpawn", "Spawn antenna on every nTH chunk", 250);
atomStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.02_atomSpawn", "Spawn power plant on every nTH chunk", 500); atomStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.02_atomSpawn", "Spawn power plant on every nTH chunk", 500);
dungeonStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.04_dungeonSpawn", "Spawn library dungeon on every nTH chunk", 64); dungeonStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.04_dungeonSpawn", "Spawn library dungeon on every nTH chunk", 64);
relayStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.05_relaySpawn", "Spawn relay on every nTH chunk", 500);
satelliteStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.06_satelliteSpawn", "Spawn satellite dish on every nTH chunk", 500); satelliteStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.06_satelliteSpawn", "Spawn satellite dish on every nTH chunk", 500);
// factoryStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.09_factorySpawn", "Spawn factory on every nTH chunk", 1000);
dudStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.10_dudSpawn", "Spawn dud on every nTH chunk", 500); dudStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.10_dudSpawn", "Spawn dud on every nTH chunk", 500);
spaceshipStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.11_spaceshipSpawn", "Spawn spaceship on every nTH chunk", 1000); spaceshipStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.11_spaceshipSpawn", "Spawn spaceship on every nTH chunk", 1000);
barrelStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.12_barrelSpawn", "Spawn waste tank on every nTH chunk", 5000); barrelStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.12_barrelSpawn", "Spawn waste tank on every nTH chunk", 5000);
@ -220,7 +214,7 @@ public class WorldConfig {
vaultfreq = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.16_vaultSpawn", "Spawn locked safe on every nTH chunk", 2500); vaultfreq = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.16_vaultSpawn", "Spawn locked safe on every nTH chunk", 2500);
geyserWater = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.17_geyserWaterSpawn", "Spawn water geyser on every nTH chunk", 3000); geyserWater = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.17_geyserWaterSpawn", "Spawn water geyser on every nTH chunk", 3000);
geyserChlorine = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.18_geyserChlorineSpawn", "Spawn poison geyser on every nTH chunk", 3000); geyserChlorine = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.18_geyserChlorineSpawn", "Spawn poison geyser on every nTH chunk", 3000);
geyserVapor = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.19_geyserVaporSpawn", "Spawn vapor geyser on every nTH chunk", 500); geyserVapor = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.19_geyserVaporSpawn", "Spawn vapor geyser on every nTH chunk", 250);
capsuleStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.21_capsuleSpawn", "Spawn landing capsule on every nTH chunk", 100); capsuleStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.21_capsuleSpawn", "Spawn landing capsule on every nTH chunk", 100);
arcticStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.22_arcticVaultSpawn", "Spawn arctic code vault on every nTH chunk", 500); arcticStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.22_arcticVaultSpawn", "Spawn arctic code vault on every nTH chunk", 500);
jungleStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.23_jungleDungeonSpawn", "Spawn jungle dungeon on every nTH chunk", 2000); jungleStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.23_jungleDungeonSpawn", "Spawn jungle dungeon on every nTH chunk", 2000);
@ -245,13 +239,10 @@ public class WorldConfig {
craterBiomeOuterRad = (float) CommonConfig.createConfigDouble(config, CATEGORY_BIOMES, "17.R02_craterBiomeOuterRad", "RAD/s for the outer crater biome", 0.5D); craterBiomeOuterRad = (float) CommonConfig.createConfigDouble(config, CATEGORY_BIOMES, "17.R02_craterBiomeOuterRad", "RAD/s for the outer crater biome", 0.5D);
craterBiomeWaterMult = (float) CommonConfig.createConfigDouble(config, CATEGORY_BIOMES, "17.R03_craterBiomeWaterMult", "Multiplier for RAD/s in crater biomes when in water", 5D); craterBiomeWaterMult = (float) CommonConfig.createConfigDouble(config, CATEGORY_BIOMES, "17.R03_craterBiomeWaterMult", "Multiplier for RAD/s in crater biomes when in water", 5D);
// radioStructure = CommonConfig.setDefZero(radioStructure, 1000);
antennaStructure = CommonConfig.setDefZero(antennaStructure, 1000); antennaStructure = CommonConfig.setDefZero(antennaStructure, 1000);
atomStructure = CommonConfig.setDefZero(atomStructure, 1000); atomStructure = CommonConfig.setDefZero(atomStructure, 1000);
dungeonStructure = CommonConfig.setDefZero(dungeonStructure, 1000); dungeonStructure = CommonConfig.setDefZero(dungeonStructure, 1000);
relayStructure = CommonConfig.setDefZero(relayStructure, 1000);
satelliteStructure = CommonConfig.setDefZero(satelliteStructure, 1000); satelliteStructure = CommonConfig.setDefZero(satelliteStructure, 1000);
// factoryStructure = CommonConfig.setDefZero(factoryStructure, 1000);
dudStructure = CommonConfig.setDefZero(dudStructure, 1000); dudStructure = CommonConfig.setDefZero(dudStructure, 1000);
spaceshipStructure = CommonConfig.setDefZero(spaceshipStructure, 1000); spaceshipStructure = CommonConfig.setDefZero(spaceshipStructure, 1000);
barrelStructure = CommonConfig.setDefZero(barrelStructure, 1000); barrelStructure = CommonConfig.setDefZero(barrelStructure, 1000);

View File

@ -0,0 +1,175 @@
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.TileEntityRBMKGauge;
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.client.gui.GuiTextField;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
public class GUIScreenRBMKGauge extends GuiScreen {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rbmk_gauge.png");
public TileEntityRBMKGauge keypad;
protected int xSize = 256;
protected int ySize = 204;
protected int guiLeft;
protected int guiTop;
protected GuiTextField[] color = new GuiTextField[4];
protected GuiTextField[] label = new GuiTextField[4];
protected GuiTextField[] rtty = new GuiTextField[4];
protected GuiTextField[] min = new GuiTextField[4];
protected GuiTextField[] max = new GuiTextField[4];
protected boolean[] active = new boolean[4];
protected boolean[] polling = new boolean[4];
public GUIScreenRBMKGauge(TileEntityRBMKGauge keypad) {
this.keypad = keypad;
this.xSize = 256;
this.ySize = 204;
}
@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 < 4; i++) {
String col = Integer.toHexString(keypad.gauges[i].color);
while(col.length() < 6) col = "0" + col;
color[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(color[i], 6, col);
label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(label[i], 15, keypad.gauges[i].label);
rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 73 + oY + i * 36, 72 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], 10, keypad.gauges[i].rtty);
min[i] = new GuiTextField(this.fontRendererObj, guiLeft + 121 + oX, guiTop + 73 + oY + i * 36, 52 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(min[i], 32, keypad.gauges[i].min + "");
max[i] = new GuiTextField(this.fontRendererObj, guiLeft + 195 + oX, guiTop + 73 + oY + i * 36, 52 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(max[i], 32, keypad.gauges[i].max + "");
active[i] = keypad.gauges[i].active;
polling[i] = keypad.gauges[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.rbmkGauge");
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 < 4; i++) {
if(this.active[i]) drawTexturedModalRect(guiLeft + 111, guiTop + i * 36 + 54, 18, 204, 16, 16);
if(this.polling[i]) drawTexturedModalRect(guiLeft + 128, guiTop + i * 36 + 53, 0, 204, 18, 18);
}
for(int i = 0; i < 4; i++) {
this.color[i].drawTextBox();
this.label[i].drawTextBox();
this.rtty[i].drawTextBox();
this.min[i].drawTextBox();
this.max[i].drawTextBox();
}
}
@Override
protected void mouseClicked(int x, int y, int b) {
super.mouseClicked(x, y, b);
for(int i = 0; i < 4; i++) {
if(guiLeft + 111 <= x && guiLeft + 111 + 16 > x && guiTop + i * 36 + 54 < y && guiTop + i * 36 + 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 * 36 + 53 < y && guiTop + i * 36 + 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 < 4; 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 < 4; i++) {
try { data.setInteger("color" + i, Integer.parseInt(this.color[i].getText(), 16)); } catch(Exception ex) { }
data.setString("label" + i, this.label[i].getText());
data.setString("rtty" + i, this.rtty[i].getText());
try { data.setInteger("min" + i, Integer.parseInt(this.min[i].getText())); } catch(Exception ex) { }
try { data.setInteger("max" + i, Integer.parseInt(this.max[i].getText())); } catch(Exception ex) { }
}
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, keypad.xCoord, keypad.yCoord, keypad.zCoord));
return;
}
for(int i = 0; i < 4; i++) {
this.color[i].mouseClicked(x, y, b);
this.label[i].mouseClicked(x, y, b);
this.rtty[i].mouseClicked(x, y, b);
this.min[i].mouseClicked(x, y, b);
this.max[i].mouseClicked(x, y, b);
}
}
@Override
protected void keyTyped(char c, int b) {
for(int i = 0; i < 4; i++) {
if(this.color[i].textboxKeyTyped(c, b)) return;
if(this.label[i].textboxKeyTyped(c, b)) return;
if(this.rtty[i].textboxKeyTyped(c, b)) return;
if(this.min[i].textboxKeyTyped(c, b)) return;
if(this.max[i].textboxKeyTyped(c, b)) return;
}
if(b == 1 || b == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.thePlayer.closeScreen();
this.mc.setIngameFocus();
}
}
@Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); }
@Override public boolean doesGuiPauseGame() { return false; }
}

View File

@ -114,11 +114,13 @@ public class GUIScreenRBMKKeyPad extends GuiScreen {
for(int i = 0; i < 4; i++) { for(int i = 0; i < 4; i++) {
if(guiLeft + 111 <= x && guiLeft + 111 + 16 > x && guiTop + i * 36 + 54 < y && guiTop + i * 36 + 54 + 16 >= y) { if(guiLeft + 111 <= x && guiLeft + 111 + 16 > x && guiTop + i * 36 + 54 < y && guiTop + i * 36 + 54 + 16 >= y) {
this.active[i] = !this.active[i]; 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; return;
} }
if(guiLeft + 128 <= x && guiLeft + 128 + 18 > x && guiTop + i * 36 + 53 < y && guiTop + i * 36 + 53 + 18 >= y) { if(guiLeft + 128 <= x && guiLeft + 128 + 18 > x && guiTop + i * 36 + 53 < y && guiTop + i * 36 + 53 + 18 >= y) {
this.polling[i] = !this.polling[i]; 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; return;
} }
} }

View File

@ -247,18 +247,6 @@ public class HbmWorldGen implements IWorldGenerator {
new LibraryDungeon().generate(world, rand, x, y, z); new LibraryDungeon().generate(world, rand, x, y, z);
} }
if(biome.temperature == 0.5F || biome.temperature == 2.0F) {
if(WorldConfig.relayStructure > 0 && rand.nextInt(WorldConfig.relayStructure) == 0) {
for(int a = 0; a < 1; a++) {
int x = i + rand.nextInt(16);
int z = j + rand.nextInt(16);
int y = world.getHeightValue(x, z);
new Relay().generate(world, rand, x, y, z);
}
}
}
if(WorldConfig.dudStructure > 0 && rand.nextInt(WorldConfig.dudStructure) == 0) { if(WorldConfig.dudStructure > 0 && rand.nextInt(WorldConfig.dudStructure) == 0) {
int x = i + 8 + rand.nextInt(16); int x = i + 8 + rand.nextInt(16);
int z = j + 8 + rand.nextInt(16); int z = j + 8 + rand.nextInt(16);
@ -399,10 +387,13 @@ public class HbmWorldGen implements IWorldGenerator {
int z = j + rand.nextInt(16); int z = j + rand.nextInt(16);
int y = world.getHeightValue(x, z); int y = world.getHeightValue(x, z);
if(world.getBlock(x, y, z) == Blocks.stone) for(int k = 1; k >= -1; k--) {
world.setBlock(x, y, z, ModBlocks.geysir_vapor); if(world.getBlock(x, y + k, z) == Blocks.stone) {
else if(world.getBlock(x, y - 1, z) == Blocks.stone) world.setBlock(x, y + k, z, ModBlocks.geysir_vapor);
world.setBlock(x, y - 1, z, ModBlocks.geysir_vapor); MainRegistry.logger.info("[Debug] Successfully spawned vapor geyser at " + x + " " + z);
break;
}
}
} }
if (rand.nextInt(1000) == 0) { if (rand.nextInt(1000) == 0) {

View File

@ -412,6 +412,7 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKConsole.class, new RenderRBMKConsole()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKConsole.class, new RenderRBMKConsole());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKDisplay.class, new RenderRBMKDisplay()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKDisplay.class, new RenderRBMKDisplay());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKKeyPad.class, new RenderRBMKKeyPad()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKKeyPad.class, new RenderRBMKKeyPad());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKGauge.class, new RenderRBMKGauge());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRod.class, new RenderRBMKFuelChannel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRod.class, new RenderRBMKFuelChannel());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRodReaSim.class, new RenderRBMKFuelChannel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRodReaSim.class, new RenderRBMKFuelChannel());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKAutoloader.class, new RenderRBMKAutoloader()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKAutoloader.class, new RenderRBMKAutoloader());

View File

@ -793,6 +793,7 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.rbmk_steam_outlet, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', CU.plate(), 'B', ModItems.tank_steel }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_steam_outlet, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', CU.plate(), 'B', ModItems.tank_steel });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_display, 1), new Object[] { "B", "C", "D", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_display, 1), new Object[] { "B", "C", "D", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_key_pad, 1), new Object[] { "B", "C", "D", 'B', ModBlocks.radio_torch_sender, 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_key_pad, 1), new Object[] { "B", "C", "D", 'B', ModBlocks.radio_torch_sender, 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_gauge, 1), new Object[] { "B", "C", "D", 'B', ModBlocks.radio_torch_receiver, 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
addRecipeAuto(new ItemStack(ModBlocks.deco_rbmk, 8), new Object[] { "R", 'R', ModBlocks.rbmk_blank }); addRecipeAuto(new ItemStack(ModBlocks.deco_rbmk, 8), new Object[] { "R", 'R', ModBlocks.rbmk_blank });
addRecipeAuto(new ItemStack(ModBlocks.deco_rbmk_smooth, 1), new Object[] { "R", 'R', ModBlocks.deco_rbmk }); addRecipeAuto(new ItemStack(ModBlocks.deco_rbmk_smooth, 1), new Object[] { "R", 'R', ModBlocks.deco_rbmk });

View File

@ -1619,12 +1619,14 @@ public class ResourceManager {
public static final HFRWavefrontObjectVBO rbmk_autoloader = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/autoloader.obj")).asVBO(); public static final HFRWavefrontObjectVBO rbmk_autoloader = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/autoloader.obj")).asVBO();
public static final HFRWavefrontObjectVBO rbmk_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_console.obj")).asVBO(); public static final HFRWavefrontObjectVBO rbmk_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_console.obj")).asVBO();
public static final HFRWavefrontObjectVBO rbmk_button = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/button.obj")).asVBO(); 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 HFRWavefrontObject rbmk_debris = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/debris.obj")).noSmooth(); 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_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"); public static final ResourceLocation rbmk_crane_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_crane.png");
public static final ResourceLocation rbmk_autoloader_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_autoloader.png"); public static final ResourceLocation rbmk_autoloader_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_autoloader.png");
public static final ResourceLocation rbmk_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_control.png"); public static final ResourceLocation rbmk_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_control.png");
public static final ResourceLocation rbmk_keypad_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/keypad.png"); public static final ResourceLocation rbmk_keypad_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/keypad.png");
public static final ResourceLocation rbmk_gauge_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/gauge.png");
public static final HFRWavefrontObject hev_battery = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/battery.obj")).noSmooth(); 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 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(); public static final HFRWavefrontObject crystal_power = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_power.obj")).noSmooth();

View File

@ -0,0 +1,92 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKGauge;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKGauge.GaugeUnit;
import com.hbm.util.ColorUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
public class RenderRBMKGauge 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;
}
TileEntityRBMKGauge gauge = (TileEntityRBMKGauge) te;
for(int i = 0; i < 4; i++) {
GaugeUnit unit = gauge.gauges[i];
if(!unit.active) continue;
GL11.glPushMatrix();
GL11.glTranslated(0.25, (i / 2) * -0.5 + 0.25, (i % 2) * -0.5 + 0.25);
GL11.glColor3f(1F, 1F, 1F);
this.bindTexture(ResourceManager.rbmk_gauge_tex);
ResourceManager.rbmk_gauge.renderPart("Gauge");
GL11.glPushMatrix();
GL11.glColor3f(ColorUtil.fr(unit.color), ColorUtil.fg(unit.color), ColorUtil.fb(unit.color));
int lower = Math.min(unit.min, unit.max);
int upper = Math.max(unit.min, unit.max);
if(lower == upper) upper += 1;
int range = upper - lower;
double angle = (double) (unit.value - lower) / (double) range * 50D;
if(unit.min > unit.max) angle = 50 - angle;
angle = MathHelper.clamp_double(angle, 0, 80);
GL11.glTranslated(0, 0.4375, -0.125);
GL11.glRotated(angle - 85, -1, 0, 0);
GL11.glTranslated(0, -0.4375, 0.125);
GL11.glDisable(GL11.GL_TEXTURE_2D);
RenderArcFurnace.fullbright(true);
GL11.glEnable(GL11.GL_LIGHTING);
ResourceManager.rbmk_gauge.renderPart("Needle");
RenderArcFurnace.fullbright(false);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
FontRenderer font = Minecraft.getMinecraft().fontRenderer;
int height = font.FONT_HEIGHT;
if(unit.label != null && !unit.label.isEmpty()) {
GL11.glTranslated(0.01, 0.3125, 0);
int width = font.getStringWidth(unit.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(unit.label, - width / 2, - height / 2, 0x00ff00);
RenderArcFurnace.fullbright(false);
}
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
}

View File

@ -404,6 +404,7 @@ public class TileMappings {
put(TileEntityRBMKConsole.class, "tileentity_rbmk_console"); put(TileEntityRBMKConsole.class, "tileentity_rbmk_console");
put(TileEntityRBMKDisplay.class, "tileentity_rbmk_display"); put(TileEntityRBMKDisplay.class, "tileentity_rbmk_display");
put(TileEntityRBMKKeyPad.class, "tileentity_rbmk_keypad"); put(TileEntityRBMKKeyPad.class, "tileentity_rbmk_keypad");
put(TileEntityRBMKGauge.class, "tileentity_rbmk_gauge");
put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet"); put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet");
put(TileEntityRBMKOutlet.class, "tileentity_rbmk_outlet"); put(TileEntityRBMKOutlet.class, "tileentity_rbmk_outlet");
put(TileEntityRBMKAutoloader.class, "tileentity_rbmk_autoloader"); put(TileEntityRBMKAutoloader.class, "tileentity_rbmk_autoloader");

View File

@ -0,0 +1,191 @@
package com.hbm.tileentity.machine.rbmk;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.GUIScreenRBMKGauge;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.tileentity.network.RTTYSystem;
import com.hbm.tileentity.network.RTTYSystem.RTTYChannel;
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.util.MathHelper;
import net.minecraft.world.World;
public class TileEntityRBMKGauge extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver {
/* __________
* / /|
* /________ / |
* | __ __ | |
* |(_\) (_\)| |
* | __ __ | |
* |(_\) (_\)| /
* |_________|/
*/
public GaugeUnit[] gauges = new GaugeUnit[4];
public TileEntityRBMKGauge() {
for(int i = 0; i < 4; i++) this.gauges[i] = new GaugeUnit(i);
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
for(int i = 0; i < 4; i++) this.gauges[i].update();
this.networkPackNT(50);
}
}
@Override
public void serialize(ByteBuf buf) {
super.serialize(buf);
for(int i = 0; i < 4; i++) this.gauges[i].serialize(buf);
}
@Override
public void deserialize(ByteBuf buf) {
super.deserialize(buf);
for(int i = 0; i < 4; i++) this.gauges[i].deserialize(buf);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
for(int i = 0; i < 4; i++) this.gauges[i].readFromNBT(nbt, i);
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
for(int i = 0; i < 4; i++) this.gauges[i].writeToNBT(nbt, i);
}
public class GaugeUnit {
/** If the value should be pulled from the RTTY system every tick, otherwise only on state change */
public boolean polling;
/** Color of the gauge needle */
public int color;
/** Label on the gauge as rendered on the panel */
public String label = "";
/** What channel to read values from */
public String rtty = "";
/** The minium value handled by the gauge */
public int min = 0;
/** The maximum value of the gauge, i.e. where the red area begins */
public int max = 100;
/** The current read value of the gauge, i.e. the needle position */
public int value;
/** Whether this gauge is visible on the panel */
public boolean active;
public GaugeUnit(int initialIndex) {
if(initialIndex == 0) color = 0x800000;
if(initialIndex == 1) color = 0x804000;
if(initialIndex == 2) color = 0x808000;
if(initialIndex == 3) color = 0x000080;
label = "Gauge " + (initialIndex + 1);
}
public void update() {
if(!active) return;
if(rtty == null || rtty.isEmpty()) return;
RTTYChannel chan = RTTYSystem.listen(worldObj, rtty);
int sigVal = 0;
if(chan != null && chan.timeStamp < worldObj.getTotalWorldTime() - 1) chan = null;
// always accept new signals
if(chan != null && chan.signal != null) {
try { sigVal = Integer.parseInt(chan.signal.toString()); } catch(Exception ex) { }
this.value = sigVal;
} else {
// if there's no new signal and we're polling, set to 0
if(polling) this.value = 0;
}
}
public void serialize(ByteBuf buf) {
buf.writeBoolean(active);
buf.writeBoolean(polling);
buf.writeInt(color);
BufferUtil.writeString(buf, label);
BufferUtil.writeString(buf, rtty);
buf.writeInt(min);
buf.writeInt(max);
buf.writeInt(value);
}
public void deserialize(ByteBuf buf) {
active = buf.readBoolean();
polling = buf.readBoolean();
color = buf.readInt();
label = BufferUtil.readString(buf);
rtty = BufferUtil.readString(buf);
min = buf.readInt();
max = buf.readInt();
value = buf.readInt();
}
public void readFromNBT(NBTTagCompound nbt, int index) {
this.active = nbt.getBoolean("active" + index);
this.polling = nbt.getBoolean("polling" + index);
this.color = nbt.getInteger("color" + index);
this.label = nbt.getString("label" + index);
this.rtty = nbt.getString("rtty" + index);
this.min = nbt.getInteger("min" + index);
this.max = nbt.getInteger("max" + index);
this.value = nbt.getInteger("value" + index);
}
public void writeToNBT(NBTTagCompound nbt, int index) {
nbt.setBoolean("active" + index, active);
nbt.setBoolean("polling" + index, polling);
nbt.setInteger("color" + index, color);
nbt.setString("label" + index, label);
nbt.setString("rtty" + index, rtty);
nbt.setInteger("min" + index, min);
nbt.setInteger("max" + index, max);
nbt.setInteger("value" + index, value);
}
}
@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 GUIScreenRBMKGauge(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 < 4; i++) {
this.gauges[i].active = (active & (1 << i)) != 0;
this.gauges[i].polling = (polling & (1 << i)) != 0;
}
for(int i = 0; i < 4; i++) {
GaugeUnit gauge = this.gauges[i];
gauge.color = MathHelper.clamp_int(data.getInteger("color" + i), 0, 0xffffff);
gauge.label = data.getString("label" + i);
gauge.rtty = data.getString("rtty" + i);
gauge.min = data.getInteger("min" + i);
gauge.max = data.getInteger("max" + i);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -4889,6 +4889,7 @@ tile.rbmk_control_reasim.name=RBMK Steuerstäbe (ReaSim)
tile.rbmk_control_reasim_auto.name=RBMK Automatische Steuerstäbe (ReaSim) tile.rbmk_control_reasim_auto.name=RBMK Automatische Steuerstäbe (ReaSim)
tile.rbmk_crane_console.name=RBMK Kransteuerung tile.rbmk_crane_console.name=RBMK Kransteuerung
tile.rbmk_display.name=RBMK Anzeigepanel tile.rbmk_display.name=RBMK Anzeigepanel
tile.rbmk_gauge.name=Redstone-over-Radio Meter
tile.rbmk_heater.name=RBMK-Heizer tile.rbmk_heater.name=RBMK-Heizer
tile.rbmk_key_pad.name=Redstone-over-Radio Tastenfeld tile.rbmk_key_pad.name=Redstone-over-Radio Tastenfeld
tile.rbmk_loader.name=RBMK-Dampfadapter tile.rbmk_loader.name=RBMK-Dampfadapter

View File

@ -6168,6 +6168,7 @@ tile.rbmk_control_reasim.name=RBMK Control Rods (ReaSim)
tile.rbmk_control_reasim_auto.name=RBMK Automatic Control Rods (ReaSim) tile.rbmk_control_reasim_auto.name=RBMK Automatic Control Rods (ReaSim)
tile.rbmk_crane_console.name=RBMK Crane Console tile.rbmk_crane_console.name=RBMK Crane Console
tile.rbmk_display.name=RBMK Display Panel tile.rbmk_display.name=RBMK Display Panel
tile.rbmk_gauge.name=Redstone-over-Radio Gauge
tile.rbmk_heater.name=RBMK Fluid Heater tile.rbmk_heater.name=RBMK Fluid Heater
tile.rbmk_key_pad.name=Redstone-over-Radio Keypad tile.rbmk_key_pad.name=Redstone-over-Radio Keypad
tile.rbmk_loader.name=RBMK Steam Connector tile.rbmk_loader.name=RBMK Steam Connector

View File

@ -0,0 +1,440 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
o Needle
v 0.031250 0.562500 -0.109375
v 0.031250 0.437500 -0.109375
v 0.031250 0.562500 -0.140625
v 0.031250 0.437500 -0.140625
v 0.031250 0.656250 -0.125000
v 0.046875 0.656250 -0.125000
v 0.046875 0.562500 -0.109375
v 0.046875 0.437500 -0.109375
v 0.046875 0.437500 -0.140625
v 0.046875 0.562500 -0.140625
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vt -0.002146 -0.002232
vn 1.0000 0.0000 0.0000
vn 0.0000 0.1644 -0.9864
vn 0.0000 0.1644 0.9864
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
s off
f 8/1/1 9/2/1 10/3/1
f 5/4/2 10/3/2 3/5/2
f 1/6/3 6/7/3 5/4/3
f 3/5/4 9/2/4 4/8/4
f 2/9/5 7/10/5 1/6/5
f 6/7/1 7/10/1 10/3/1
f 7/10/1 8/1/1 10/3/1
f 5/4/2 6/7/2 10/3/2
f 1/6/3 7/10/3 6/7/3
f 3/5/4 10/3/4 9/2/4
f 2/9/5 8/1/5 7/10/5
o Gauge
v 0.062500 0.687500 0.125000
v 0.000000 0.718750 -0.156250
v 0.000000 0.718750 0.156250
v 0.062500 0.437500 -0.125000
v 0.062500 0.687500 -0.125000
v 0.000000 0.406250 -0.156250
v 0.000000 0.406250 0.156250
v 0.062500 0.437500 0.125000
v 0.062500 0.718750 0.156250
v 0.062500 0.718750 -0.156250
v 0.062500 0.406250 -0.156250
v 0.062500 0.406250 0.156250
v 0.031250 0.687500 0.125000
v 0.031250 0.687500 -0.125000
v 0.031250 0.437500 -0.125000
v 0.031250 0.437500 0.125000
v 0.031250 0.463180 0.123708
v 0.031250 0.455398 0.124389
v 0.031250 0.457733 0.061446
v 0.031250 0.449950 0.062127
v 0.036250 0.463180 0.123708
v 0.036250 0.455398 0.124389
v 0.036250 0.457733 0.061446
v 0.036250 0.449950 0.062127
v 0.031250 0.687500 0.050000
v 0.031250 0.505978 0.115470
v 0.031250 0.498432 0.117492
v 0.031250 0.489802 0.055100
v 0.031250 0.482255 0.057122
v 0.036250 0.505978 0.115470
v 0.036250 0.498432 0.117492
v 0.036250 0.489802 0.055100
v 0.036250 0.482255 0.057122
v 0.031250 0.546695 0.099926
v 0.031250 0.539614 0.103228
v 0.031250 0.520281 0.043282
v 0.031250 0.513201 0.046584
v 0.036250 0.546695 0.099926
v 0.036250 0.539614 0.103228
v 0.036250 0.520281 0.043282
v 0.036250 0.513201 0.046584
v 0.031250 0.584094 0.077548
v 0.031250 0.577694 0.082029
v 0.031250 0.548245 0.026350
v 0.031250 0.541846 0.030832
v 0.036250 0.584094 0.077548
v 0.036250 0.577694 0.082029
v 0.036250 0.548245 0.026350
v 0.036250 0.541846 0.030832
v 0.031250 0.617039 0.049015
v 0.031250 0.611515 0.054539
v 0.031250 0.572845 0.004820
v 0.031250 0.567320 0.010345
v 0.036250 0.617039 0.049015
v 0.036250 0.611515 0.054539
v 0.036250 0.572845 0.004820
v 0.036250 0.567320 0.010345
v 0.031250 0.644529 0.015194
v 0.031250 0.640047 0.021594
v 0.031250 0.593332 -0.020654
v 0.031250 0.588850 -0.014255
v 0.036250 0.644529 0.015194
v 0.036250 0.640047 0.021594
v 0.036250 0.593332 -0.020654
v 0.036250 0.588850 -0.014255
v 0.031250 0.665728 -0.022886
v 0.031250 0.662426 -0.015805
v 0.031250 0.609084 -0.049299
v 0.031250 0.605782 -0.042219
v 0.036250 0.665728 -0.022886
v 0.036250 0.662426 -0.015805
v 0.036250 0.609084 -0.049299
v 0.036250 0.605782 -0.042219
v 0.031250 0.679992 -0.064068
v 0.031250 0.677970 -0.056522
v 0.031250 0.619622 -0.080245
v 0.031250 0.617600 -0.072698
v 0.036250 0.679992 -0.064068
v 0.036250 0.677970 -0.056522
v 0.036250 0.619622 -0.080245
v 0.036250 0.617600 -0.072698
v 0.031250 0.686889 -0.107102
v 0.031250 0.686208 -0.099320
v 0.031250 0.624627 -0.112550
v 0.031250 0.623946 -0.104767
v 0.036250 0.686889 -0.107102
v 0.036250 0.686208 -0.099320
v 0.036250 0.624627 -0.112550
v 0.036250 0.623946 -0.104767
vt 0.428571 0.142857
vt 0.500000 0.857143
vt 0.428571 0.857143
vt 0.071429 1.000000
vt 0.071429 0.857143
vt -0.000000 0.142857
vt 0.071429 0.142857
vt 0.142857 0.214286
vt 0.071429 0.785714
vt 0.142857 0.785714
vt 0.428571 -0.000000
vt 0.392857 0.785714
vt 0.107143 0.785714
vt 0.107143 0.214286
vt 0.392857 0.214286
vt 1.000000 1.000000
vt 0.785714 1.000000
vt 1.000000 0.428571
vt 0.392857 0.285714
vt 0.107143 0.142857
vt 0.107143 0.285714
vt 0.357143 0.785714
vt 0.428571 0.214286
vt 0.357143 0.214286
vt 0.107143 0.714286
vt 0.107143 0.857143
vt 0.193750 0.857143
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.642857 1.000000
vt 0.500000 0.428571
vt 0.785714 0.428571
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.571429 0.285714
vt 0.642857 0.142857
vt 0.642857 0.285714
vt 0.500000 0.142857
vt 0.500000 0.285714
vt 0.642857 0.000000
vt 0.571429 0.142857
vt 0.571429 0.000000
vt 0.571429 0.428571
vt 0.642857 0.428571
vt 0.714286 0.285714
vt 0.714286 0.142857
vt 0.500000 0.142857
vt 0.428571 1.000000
vt -0.000000 0.857143
vt 0.071429 0.214286
vt 0.071429 -0.000000
vt 0.392857 0.142857
vt 0.428571 0.785714
vt 0.392857 0.857143
vt 0.392857 0.714286
vt 0.500000 1.000000
vn 0.0000 0.0000 -1.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -0.9962 0.0872
vn 0.0000 -0.0872 -0.9962
vn 0.0000 0.0872 0.9962
vn 0.0000 0.9962 -0.0872
vn 0.0000 -0.9659 0.2588
vn 0.0000 -0.2588 -0.9659
vn 0.0000 0.2588 0.9659
vn 0.0000 0.9659 -0.2588
vn 0.0000 -0.9063 0.4226
vn 0.0000 -0.4226 -0.9063
vn 0.0000 0.4226 0.9063
vn 0.0000 0.9063 -0.4226
vn 0.0000 -0.8192 0.5736
vn 0.0000 -0.5736 -0.8192
vn 0.0000 0.5736 0.8192
vn 0.0000 0.8192 -0.5736
vn 0.0000 -0.7071 0.7071
vn 0.0000 -0.7071 -0.7071
vn 0.0000 0.7071 0.7071
vn 0.0000 0.7071 -0.7071
vn 0.0000 -0.5736 0.8192
vn 0.0000 -0.8192 -0.5736
vn 0.0000 0.8191 0.5736
vn 0.0000 0.5736 -0.8192
vn 0.0000 -0.4226 0.9063
vn 0.0000 -0.9063 -0.4226
vn 0.0000 0.9063 0.4226
vn 0.0000 0.4226 -0.9063
vn 0.0000 -0.2588 0.9659
vn 0.0000 -0.9659 -0.2588
vn 0.0000 0.9659 0.2588
vn 0.0000 0.2588 -0.9659
vn 0.0000 -0.0872 0.9962
vn 0.0000 -0.9962 -0.0872
vn 0.0000 0.9962 0.0872
vn 0.0000 0.0872 -0.9962
vn 0.0000 0.8192 0.5736
vn 0.0000 -0.9962 -0.0871
s off
f 21/11/6 12/12/6 20/13/6
f 20/13/7 13/14/7 19/15/7
f 19/15/8 17/16/8 22/17/8
f 18/18/6 23/19/6 11/20/6
f 22/17/9 16/21/9 21/11/9
f 15/22/10 19/15/10 11/23/10
f 18/24/10 21/11/10 14/25/10
f 14/25/10 20/13/10 15/22/10
f 11/23/10 22/17/10 18/24/10
f 24/26/10 35/27/10 25/28/10
f 14/29/7 26/30/7 18/31/7
f 15/32/8 25/33/8 14/34/8
f 11/35/9 23/36/9 35/37/9
f 32/38/10 33/39/10 31/40/10
f 30/41/11 32/38/11 28/42/11
f 29/43/12 34/44/12 30/45/12
f 28/46/13 31/40/13 27/47/13
f 27/48/14 33/39/14 29/49/14
f 35/50/10 26/51/10 25/52/10
f 41/53/10 42/54/10 40/55/10
f 39/56/15 41/53/15 37/57/15
f 38/58/16 43/59/16 39/60/16
f 37/61/17 40/55/17 36/62/17
f 36/63/18 42/54/18 38/64/18
f 49/65/10 50/66/10 48/67/10
f 47/68/19 49/65/19 45/69/19
f 46/70/20 51/71/20 47/72/20
f 45/73/21 48/67/21 44/74/21
f 44/75/22 50/66/22 46/76/22
f 57/77/10 58/78/10 56/79/10
f 55/80/23 57/77/23 53/81/23
f 54/82/24 59/83/24 55/84/24
f 53/85/25 56/79/25 52/86/25
f 52/87/26 58/78/26 54/88/26
f 65/89/10 66/90/10 64/91/10
f 63/92/27 65/89/27 61/93/27
f 62/94/28 67/95/28 63/96/28
f 61/97/29 64/91/29 60/98/29
f 60/99/30 66/90/30 62/100/30
f 73/101/10 74/102/10 72/103/10
f 71/104/31 73/101/31 69/105/31
f 70/106/32 75/107/32 71/108/32
f 69/109/33 72/103/33 68/110/33
f 68/111/34 74/102/34 70/112/34
f 81/113/10 82/114/10 80/115/10
f 79/116/35 81/113/35 77/117/35
f 78/118/36 83/119/36 79/120/36
f 77/121/37 80/115/37 76/122/37
f 76/123/38 82/114/38 78/124/38
f 89/125/10 90/126/10 88/127/10
f 87/128/39 89/125/39 85/129/39
f 86/130/40 91/131/40 87/132/40
f 85/133/41 88/127/41 84/134/41
f 84/135/42 90/126/42 86/136/42
f 97/137/10 98/138/10 96/139/10
f 95/140/43 97/137/43 93/141/43
f 94/142/44 99/143/44 95/144/44
f 93/145/45 96/139/45 92/146/45
f 92/147/46 98/138/46 94/148/46
f 21/11/6 16/149/6 12/12/6
f 20/13/7 12/150/7 13/14/7
f 19/15/8 13/151/8 17/16/8
f 18/18/6 26/152/6 23/19/6
f 22/17/9 17/153/9 16/21/9
f 15/22/10 20/13/10 19/15/10
f 18/24/10 22/17/10 21/11/10
f 14/25/10 21/11/10 20/13/10
f 11/23/10 19/15/10 22/17/10
f 14/29/7 25/154/7 26/30/7
f 15/32/8 24/155/8 25/33/8
f 24/156/9 15/157/9 35/37/9
f 15/157/9 11/35/9 35/37/9
f 32/38/10 34/44/10 33/39/10
f 30/41/11 34/44/11 32/38/11
f 29/43/12 33/39/12 34/44/12
f 28/46/13 32/38/13 31/40/13
f 27/48/14 31/40/14 33/39/14
f 35/50/10 23/158/10 26/51/10
f 41/53/10 43/59/10 42/54/10
f 39/56/15 43/59/15 41/53/15
f 38/58/16 42/54/16 43/59/16
f 37/61/17 41/53/17 40/55/17
f 36/63/18 40/55/18 42/54/18
f 49/65/10 51/71/10 50/66/10
f 47/68/19 51/71/19 49/65/19
f 46/70/20 50/66/20 51/71/20
f 45/73/21 49/65/21 48/67/21
f 44/75/22 48/67/22 50/66/22
f 57/77/10 59/83/10 58/78/10
f 55/80/23 59/83/23 57/77/23
f 54/82/24 58/78/24 59/83/24
f 53/85/25 57/77/25 56/79/25
f 52/87/26 56/79/26 58/78/26
f 65/89/10 67/95/10 66/90/10
f 63/92/27 67/95/27 65/89/27
f 62/94/28 66/90/28 67/95/28
f 61/97/29 65/89/29 64/91/29
f 60/99/30 64/91/30 66/90/30
f 73/101/10 75/107/10 74/102/10
f 71/104/31 75/107/31 73/101/31
f 70/106/32 74/102/32 75/107/32
f 69/109/47 73/101/47 72/103/47
f 68/111/34 72/103/34 74/102/34
f 81/113/10 83/119/10 82/114/10
f 79/116/35 83/119/35 81/113/35
f 78/118/36 82/114/36 83/119/36
f 77/121/37 81/113/37 80/115/37
f 76/123/38 80/115/38 82/114/38
f 89/125/10 91/131/10 90/126/10
f 87/128/39 91/131/39 89/125/39
f 86/130/40 90/126/40 91/131/40
f 85/133/41 89/125/41 88/127/41
f 84/135/42 88/127/42 90/126/42
f 97/137/10 99/143/10 98/138/10
f 95/140/43 99/143/43 97/137/43
f 94/142/48 98/138/48 99/143/48
f 93/145/45 97/137/45 96/139/45
f 92/147/46 96/139/46 98/138/46

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B