fixes, RBMK console screen functionality, schmalz
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.blocks.IBlockMulti;
|
||||
import com.hbm.blocks.ILookOverlay;
|
||||
import com.hbm.blocks.ITooltipProvider;
|
||||
import com.hbm.items.ModItems;
|
||||
@ -23,7 +24,7 @@ import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class MachineStirling extends BlockDummyable implements ILookOverlay, ITooltipProvider {
|
||||
public class MachineStirling extends BlockDummyable implements ILookOverlay, ITooltipProvider, IBlockMulti {
|
||||
|
||||
public MachineStirling() {
|
||||
super(Material.iron);
|
||||
@ -182,4 +183,9 @@ public class MachineStirling extends BlockDummyable implements ILookOverlay, ITo
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
|
||||
this.addStandardInfo(stack, player, list, ext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSubCount() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,12 +170,14 @@ public class EntityFalloutRain extends Entity {
|
||||
}
|
||||
}
|
||||
|
||||
if(dist < 65 && b.getBlockHardness(worldObj, x, y, z) <= Blocks.stonebrick.getExplosionResistance(null)) {
|
||||
float hardness = b.getBlockHardness(worldObj, x, y, z);
|
||||
if(dist < 65 && hardness <= Blocks.stonebrick.getExplosionResistance(null) && hardness >= 0) {
|
||||
|
||||
Block bl = worldObj.getBlock(x, y - 1, z);
|
||||
if(bl == Blocks.air) {
|
||||
for(int i = 0; i <= depth; i++) {
|
||||
if(worldObj.getBlock(x, y + i, z).getBlockHardness(worldObj, x, y + i, z) <= Blocks.stonebrick.getExplosionResistance(null)) {
|
||||
hardness = worldObj.getBlock(x, y + i, z).getBlockHardness(worldObj, x, y + i, z);
|
||||
if(hardness <= Blocks.stonebrick.getExplosionResistance(null) && hardness >= 0) {
|
||||
EntityFallingBlock entityfallingblock = new EntityFallingBlock(worldObj, x + 0.5D, y + 0.5D + i, z + 0.5D, worldObj.getBlock(x, y + i, z), worldObj.getBlockMetadata(x, y + i, z));
|
||||
worldObj.spawnEntityInWorld(entityfallingblock);
|
||||
}
|
||||
|
||||
@ -67,6 +67,9 @@ public class EntityEffectHandler {
|
||||
pprps.shield += Math.min(pprps.maxShield - pprps.shield, 0.005F * tsd);
|
||||
}
|
||||
|
||||
if(pprps.shield > pprps.maxShield)
|
||||
pprps.shield = pprps.maxShield;
|
||||
|
||||
props.saveNBTData(data);
|
||||
pprps.saveNBTData(data);
|
||||
PacketDispatcher.wrapper.sendTo(new ExtPropPacket(data), (EntityPlayerMP) entity);
|
||||
|
||||
@ -86,14 +86,6 @@ public class AnvilRecipeHandler extends TemplateRecipeHandler {
|
||||
}
|
||||
|
||||
for(int i = 0; i < in.size(); i++) {
|
||||
|
||||
if(in.get(i) instanceof List) {
|
||||
List<ItemStack> array = (List<ItemStack>) in.get(i);
|
||||
|
||||
for(ItemStack stack : array)
|
||||
System.out.println(stack);
|
||||
}
|
||||
|
||||
this.input.add(new PositionedStack(in.get(i), inOX + 18 * (i % inLine), inOY + 18 * (i / inLine)));
|
||||
}
|
||||
|
||||
|
||||
@ -467,8 +467,8 @@ public class HazardRegistry {
|
||||
/*
|
||||
* Blacklist
|
||||
*/
|
||||
HazardSystem.blacklist(TH232.ore());
|
||||
HazardSystem.blacklist(U.ore());
|
||||
for(String ore : TH232.ores()) HazardSystem.blacklist(ore);
|
||||
for(String ore : U.ores()) HazardSystem.blacklist(ore);
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@ -685,6 +685,7 @@ public class OreDictManager {
|
||||
|
||||
public void registerStack(String tag, ItemStack stack) {
|
||||
for(String mat : mats) {
|
||||
|
||||
OreDictionary.registerOre(tag + mat, stack);
|
||||
|
||||
if(!hazards.isEmpty() && hazMult > 0F) {
|
||||
@ -697,6 +698,16 @@ public class OreDictManager {
|
||||
HazardSystem.register(tag + mat, data);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Fix for a small oddity in nuclearcraft: many radioactive elements do not have an ore prefix and the sizes
|
||||
* seem generally inconsistent (TH and U are 20 "tiny"s per ingot while boron is 12), so we assume those to be ingots.
|
||||
* Therefore we register all ingots a second time but without prefix. TODO: add a config option to disable this compat.
|
||||
* I'd imagine greg's OD system might not like things without prefixes.
|
||||
*/
|
||||
if("ingot".equals(tag)) {
|
||||
registerStack("", stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -15,6 +15,7 @@ import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn;
|
||||
import com.hbm.util.I18nUtil;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
@ -22,6 +23,7 @@ import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
@ -90,7 +92,14 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
|
||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 61, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select all control rods" } );
|
||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 72, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Deselect all" } );
|
||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6, guiTop + 8, 76, 60, mouseX, mouseY, new String[]{ "ignore all this for now" } );
|
||||
|
||||
for(int i = 0; i < 3; i++) {
|
||||
for(int j = 0; j < 2; j++) {
|
||||
int id = i * 2 + j + 1;
|
||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6 + 40 * j, guiTop + 8 + 21 * i, 18, 18, mouseX, mouseY, new String[]{ EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.console." + console.screens[id - 1].type.name().toLowerCase(), id) } );
|
||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 24 + 40 * j, guiTop + 8 + 21 * i, 18, 18, mouseX, mouseY, new String[]{ I18nUtil.resolveKey("rbmk.console.assign", id) } );
|
||||
}
|
||||
}
|
||||
|
||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select red group" } );
|
||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 17, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select yellow group" } );
|
||||
@ -114,6 +123,7 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
int bY = 11;
|
||||
int size = 10;
|
||||
|
||||
//toggle column selection
|
||||
if(guiLeft + 86 <= mouseX && guiLeft + 86 + 150 > mouseX && guiTop + 11 < mouseY && guiTop + 11 + 150 >= mouseY) {
|
||||
|
||||
int index = ((mouseX - bX - guiLeft) / size + (mouseY - bY - guiTop) / size * 15);
|
||||
@ -126,12 +136,14 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
}
|
||||
}
|
||||
|
||||
//clear selection
|
||||
if(guiLeft + 72 <= mouseX && guiLeft + 72 + 10 > mouseX && guiTop + 70 < mouseY && guiTop + 70 + 10 >= mouseY) {
|
||||
this.selection = new boolean[15 * 15];
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F));
|
||||
return;
|
||||
}
|
||||
|
||||
//select all control rods
|
||||
if(guiLeft + 61 <= mouseX && guiLeft + 61 + 10 > mouseX && guiTop + 70 < mouseY && guiTop + 70 + 10 >= mouseY) {
|
||||
this.selection = new boolean[15 * 15];
|
||||
|
||||
@ -145,6 +157,7 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
return;
|
||||
}
|
||||
|
||||
//select color groups
|
||||
for(int k = 0; k < 5; k++) {
|
||||
|
||||
if(guiLeft + 6 + k * 11 <= mouseX && guiLeft + 6 + k * 11 + 10 > mouseX && guiTop + 70 < mouseY && guiTop + 70 + 10 >= mouseY) {
|
||||
@ -162,6 +175,7 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
}
|
||||
}
|
||||
|
||||
//AZ-5
|
||||
if(guiLeft + 30 <= mouseX && guiLeft + 30 + 28 > mouseX && guiTop + 138 < mouseY && guiTop + 138 + 28 >= mouseY) {
|
||||
|
||||
if(az5Lid) {
|
||||
@ -185,6 +199,7 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
return;
|
||||
}
|
||||
|
||||
//save control rod setting
|
||||
if(guiLeft + 48 <= mouseX && guiLeft + 48 + 12 > mouseX && guiTop + 82 < mouseY && guiTop + 82 + 12 >= mouseY) {
|
||||
|
||||
double level;
|
||||
@ -208,6 +223,39 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(control, console.xCoord, console.yCoord, console.zCoord));
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1F));
|
||||
}
|
||||
|
||||
//submit selection for status screen
|
||||
|
||||
for(int j = 0; j < 3; j++) {
|
||||
for(int k = 0; k < 2; k++) {
|
||||
|
||||
int id = j * 2 + k;
|
||||
|
||||
if(guiLeft + 6 + 40 * k <= mouseX && guiLeft + 6 + 40 * k + 18 > mouseX && guiTop + 8 + 21 * j < mouseY && guiTop + 8 + 21 * j + 18 >= mouseY) {
|
||||
NBTTagCompound control = new NBTTagCompound();
|
||||
control.setByte("toggle", (byte) id);
|
||||
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(control, console.xCoord, console.yCoord, console.zCoord));
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F));
|
||||
return;
|
||||
}
|
||||
|
||||
if(guiLeft + 24 + 40 * k <= mouseX && guiLeft + 24 + 40 * k + 18 > mouseX && guiTop + 8 + 21 * j < mouseY && guiTop + 8 + 21 * j + 18 >= mouseY) {
|
||||
|
||||
NBTTagCompound control = new NBTTagCompound();
|
||||
control.setByte("id", (byte) id);
|
||||
|
||||
for(int s = 0; s < selection.length; s++) {
|
||||
if(selection[s]) {
|
||||
control.setBoolean("s" + s, true);
|
||||
}
|
||||
}
|
||||
|
||||
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(control, console.xCoord, console.yCoord, console.zCoord));
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.75F));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("incomplete-switch") //shut up
|
||||
@ -220,6 +268,13 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
drawTexturedModalRect(guiLeft + 30, guiTop + 138, 228, 172, 28, 28);
|
||||
}
|
||||
|
||||
for(int j = 0; j < 3; j++) {
|
||||
for(int k = 0; k < 2; k++) {
|
||||
int id = j * 2 + k;
|
||||
drawTexturedModalRect(guiLeft + 6 + 40 * k, guiTop + 8 + 21 * j, this.console.screens[id].type.offset, 238, 18, 18);
|
||||
}
|
||||
}
|
||||
|
||||
int bX = 86;
|
||||
int bY = 11;
|
||||
int size = 10;
|
||||
|
||||
@ -65,7 +65,7 @@ public class AnvilRecipes {
|
||||
smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.meteorite_sword_reforged, 1), new ComparableStack(ModItems.meteorite_sword_seared), new ComparableStack(ModItems.ingot_meteorite_forged)));
|
||||
smithingRecipes.add(new AnvilSmithingRecipe(1, new ItemStack(ModItems.gun_ar15, 1), new ComparableStack(ModItems.gun_thompson), new ComparableStack(ModItems.pipe_lead)));
|
||||
smithingRecipes.add(new AnvilSmithingRecipe(1916169, new ItemStack(ModItems.wings_murk, 1), new ComparableStack(ModItems.wings_limp), new ComparableStack(ModItems.particle_tachyon)));
|
||||
smithingRecipes.add(new AnvilSmithingRecipe(4, new ItemStack(ModItems.flask_infusion, EnumInfusion.SHIELD.ordinal()), new ComparableStack(ModItems.gem_alexandrite), new ComparableStack(ModItems.bottle_nuka)));
|
||||
smithingRecipes.add(new AnvilSmithingRecipe(4, new ItemStack(ModItems.flask_infusion, 1, EnumInfusion.SHIELD.ordinal()), new ComparableStack(ModItems.gem_alexandrite), new ComparableStack(ModItems.bottle_nuka)));
|
||||
|
||||
smithingRecipes.add(new AnvilSmithingCyanideRecipe());
|
||||
smithingRecipes.add(new AnvilSmithingRenameRecipe());
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
package com.hbm.render.tileentity;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn;
|
||||
import com.hbm.tileentity.machine.storage.TileEntityMachineFENSU;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKScreen;
|
||||
import com.hbm.util.I18nUtil;
|
||||
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
@ -72,6 +75,47 @@ public class RenderRBMKConsole extends TileEntitySpecialRenderer {
|
||||
tess.draw();
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
|
||||
FontRenderer font = Minecraft.getMinecraft().fontRenderer;
|
||||
GL11.glTranslatef(-0.42F, 3.5F, 1.75F);
|
||||
GL11.glDepthMask(false);
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
|
||||
for(int i = 0; i < console.screens.length; i++) {
|
||||
|
||||
GL11.glPushMatrix();
|
||||
|
||||
if(i % 2 == 1)
|
||||
GL11.glTranslatef(0, 0, 1.75F * -2);
|
||||
|
||||
GL11.glTranslatef(0, -0.75F * (i / 2), 0);
|
||||
|
||||
RBMKScreen screen = console.screens[i];
|
||||
String text = screen.display;
|
||||
|
||||
if(text != null && ! text.isEmpty()) {
|
||||
|
||||
String[] parts = text.split("=");
|
||||
|
||||
if(parts.length == 2) {
|
||||
text = I18nUtil.resolveKey(parts[0], parts[1]);
|
||||
}
|
||||
|
||||
int width = font.getStringWidth(text);
|
||||
int height = font.FONT_HEIGHT;
|
||||
|
||||
float f3 = Math.min(0.03F, 0.8F / Math.max(width, 1));
|
||||
GL11.glScalef(f3, -f3, f3);
|
||||
GL11.glNormal3f(0.0F, 0.0F, -1.0F);
|
||||
GL11.glRotatef(90, 0, 1, 0);
|
||||
|
||||
font.drawString(text, - width / 2, - height / 2, 0x00ff00);
|
||||
}
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
GL11.glDepthMask(true);
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,11 @@
|
||||
package com.hbm.render.tileentity;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.main.ResourceManager;
|
||||
@ -11,6 +16,7 @@ import com.hbm.render.util.BeamPronter.EnumWaveType;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
@ -168,23 +174,64 @@ public class RendererObjTester extends TileEntitySpecialRenderer {
|
||||
GL11.glDepthMask(true);
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);*/
|
||||
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
|
||||
bindTexture(ResourceManager.soyuz_module_dome_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Dome");
|
||||
bindTexture(ResourceManager.soyuz_module_lander_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Capsule");
|
||||
bindTexture(ResourceManager.soyuz_module_propulsion_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Propulsion");
|
||||
bindTexture(ResourceManager.soyuz_module_solar_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Solar");
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
|
||||
GL11.glTranslated(0D, 4D, 0D);
|
||||
GL11.glRotated(System.currentTimeMillis() % 3600 / 10D, 0, 0, 1);
|
||||
GL11.glTranslated(0D, -4D, 0D);
|
||||
GL11.glRotated(System.currentTimeMillis() % 3600 / 10D, 0, 1, 0);
|
||||
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
|
||||
//GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
GL11.glColor4d(1, 1, 1, 1);
|
||||
GL11.glClearColor(0, 0, 0, 0);
|
||||
|
||||
float amb = 2F;
|
||||
float dif = 2F;
|
||||
float spe = 2F;
|
||||
float shi = 1F;
|
||||
FloatBuffer iamb = (FloatBuffer) BufferUtils.createFloatBuffer(8).put(new float[] { amb, amb, amb, 1F }).flip();
|
||||
FloatBuffer idif = (FloatBuffer) BufferUtils.createFloatBuffer(8).put(new float[] { dif, dif, dif, 1F }).flip();
|
||||
FloatBuffer ispe = (FloatBuffer) BufferUtils.createFloatBuffer(8).put(new float[] { spe, spe, spe, 1F }).flip();
|
||||
FloatBuffer mamb = (FloatBuffer) BufferUtils.createFloatBuffer(8).put(new float[] { amb, amb, amb, 1F }).flip();
|
||||
FloatBuffer mdif = (FloatBuffer) BufferUtils.createFloatBuffer(8).put(new float[] { dif, dif, dif, 1F }).flip();
|
||||
FloatBuffer mspe = (FloatBuffer) BufferUtils.createFloatBuffer(8).put(new float[] { spe, spe, spe, 1F }).flip();
|
||||
float msh = 128F * shi;
|
||||
FloatBuffer mem = (FloatBuffer) BufferUtils.createFloatBuffer(8).put(new float[] { 1F, 1F, 1F, 1F }).flip();
|
||||
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_AMBIENT, iamb);
|
||||
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, idif);
|
||||
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_SPECULAR, ispe);
|
||||
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, iamb);
|
||||
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, idif);
|
||||
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR, ispe);
|
||||
GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT, mamb);
|
||||
GL11.glMaterial(GL11.GL_FRONT, GL11.GL_DIFFUSE, mdif);
|
||||
GL11.glMaterial(GL11.GL_FRONT, GL11.GL_SPECULAR, mspe);
|
||||
GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_SHININESS, msh);
|
||||
GL11.glMaterial(GL11.GL_FRONT, GL11.GL_EMISSION, mem);
|
||||
GL11.glLightModeli(GL12.GL_LIGHT_MODEL_COLOR_CONTROL, GL12.GL_SEPARATE_SPECULAR_COLOR);
|
||||
|
||||
|
||||
bindTexture(ResourceManager.soyuz_module_dome_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Dome");
|
||||
bindTexture(ResourceManager.soyuz_module_lander_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Capsule");
|
||||
bindTexture(ResourceManager.soyuz_module_propulsion_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Propulsion");
|
||||
bindTexture(ResourceManager.soyuz_module_solar_tex);
|
||||
ResourceManager.soyuz_module.renderPart("Solar");
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
GL11.glColor3f(1F, 1F, 1F);
|
||||
|
||||
/*GL11.glDisable(GL11.GL_CULL_FACE);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
|
||||
@ -282,6 +329,7 @@ public class RendererObjTester extends TileEntitySpecialRenderer {
|
||||
}*/
|
||||
|
||||
GL11.glPopMatrix();
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
}
|
||||
|
||||
}
|
||||
@ -198,13 +198,13 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
|
||||
public long transferPower(long power) {
|
||||
|
||||
if(!this.power)
|
||||
return 0;
|
||||
return power;
|
||||
|
||||
if(getTile() instanceof IEnergyConnector) {
|
||||
return ((IEnergyConnector)getTile()).transferPower(power);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return power;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -160,7 +160,9 @@ public class TileEntityStirling extends TileEntityLoadedBase implements INBTPack
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPower(long power) { }
|
||||
public void setPower(long power) {
|
||||
this.powerBuffer = power;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getPower() {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.hbm.tileentity.machine.rbmk;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@ -9,6 +10,7 @@ import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor;
|
||||
import com.hbm.util.I18nUtil;
|
||||
import com.hbm.util.Tuple.Triplet;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
@ -30,9 +32,15 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
|
||||
//made this one-dimensional because it's a lot easier to serialize
|
||||
public RBMKColumn[] columns = new RBMKColumn[15 * 15];
|
||||
|
||||
public RBMKScreen[] screens = new RBMKScreen[6];
|
||||
|
||||
public TileEntityRBMKConsole() {
|
||||
super(0);
|
||||
|
||||
for(int i = 0; i < screens.length; i++) {
|
||||
screens[i] = new RBMKScreen();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -50,9 +58,10 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
this.worldObj.theProfiler.startSection("rbmkConsole_rescan");
|
||||
rescan();
|
||||
this.worldObj.theProfiler.endSection();
|
||||
|
||||
prepareNetworkPack();
|
||||
prepareScreenInfo();
|
||||
}
|
||||
|
||||
prepareNetworkPack();
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,19 +102,103 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
this.fluxBuffer[19] = (int) flux;
|
||||
}
|
||||
|
||||
private void prepareScreenInfo() {
|
||||
|
||||
for(RBMKScreen screen : this.screens) {
|
||||
|
||||
if(screen.type == ScreenType.NONE) {
|
||||
screen.display = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
double value = 0;
|
||||
int count = 0;
|
||||
|
||||
for(Integer i : screen.columns) {
|
||||
|
||||
RBMKColumn col = this.columns[i];
|
||||
|
||||
if(col == null)
|
||||
continue;
|
||||
|
||||
switch(screen.type) {
|
||||
case COL_TEMP:
|
||||
count++;
|
||||
value += col.data.getDouble("heat");
|
||||
break;
|
||||
case FUEL_DEPLETION:
|
||||
if(col.data.hasKey("enrichment")) {
|
||||
count++;
|
||||
value += (100D - (col.data.getDouble("enrichment") * 100D));
|
||||
}
|
||||
break;
|
||||
case FUEL_POISON:
|
||||
if(col.data.hasKey("xenon")) {
|
||||
count++;
|
||||
value += col.data.getDouble("xenon") * 100D;
|
||||
}
|
||||
break;
|
||||
case FUEL_TEMP:
|
||||
if(col.data.hasKey("c_heat")) {
|
||||
count++;
|
||||
value += col.data.getDouble("c_heat");
|
||||
}
|
||||
break;
|
||||
case ROD_EXTRACTION:
|
||||
if(col.data.hasKey("level")) {
|
||||
count++;
|
||||
value += col.data.getDouble("level") * 100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
double result = value / (double) count;
|
||||
String text = ((int)(result * 10)) / 10D + "";
|
||||
|
||||
switch(screen.type) {
|
||||
case COL_TEMP: text = "rbmk.screen.temp=" + text + "°C"; break;
|
||||
case FUEL_DEPLETION: text = "rbmk.screen.depletion=" + text + "%"; break;
|
||||
case FUEL_POISON: text = "rbmk.screen.xenon=" + text + "%"; break;
|
||||
case FUEL_TEMP: text = "rbmk.screen.core=" + text + "°C"; break;
|
||||
case ROD_EXTRACTION: text = "rbmk.screen.rod=" + text + "%"; break;
|
||||
}
|
||||
|
||||
screen.display = text;
|
||||
}
|
||||
}
|
||||
|
||||
private void prepareNetworkPack() {
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
|
||||
|
||||
for(int i = 0; i < columns.length; i++) {
|
||||
if(this.worldObj.getTotalWorldTime() % 10 == 0) {
|
||||
|
||||
if(this.columns[i] != null) {
|
||||
data.setTag("column_" + i, this.columns[i].data);
|
||||
data.setShort("type_" + i, (short)this.columns[i].type.ordinal());
|
||||
data.setBoolean("full", true);
|
||||
|
||||
for(int i = 0; i < columns.length; i++) {
|
||||
|
||||
if(this.columns[i] != null) {
|
||||
data.setTag("column_" + i, this.columns[i].data);
|
||||
data.setShort("type_" + i, (short)this.columns[i].type.ordinal());
|
||||
}
|
||||
}
|
||||
|
||||
data.setIntArray("flux", this.fluxBuffer);
|
||||
|
||||
for(int i = 0; i < this.screens.length; i++) {
|
||||
RBMKScreen screen = screens[i];
|
||||
if(screen.display != null) {
|
||||
data.setString("t" + i, screen.display);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data.setIntArray("flux", this.fluxBuffer);
|
||||
for(int i = 0; i < this.screens.length; i++) {
|
||||
RBMKScreen screen = screens[i];
|
||||
data.setByte("s" + i, (byte) screen.type.ordinal());
|
||||
}
|
||||
|
||||
this.networkPack(data, 50);
|
||||
}
|
||||
@ -113,16 +206,28 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
@Override
|
||||
public void networkUnpack(NBTTagCompound data) {
|
||||
|
||||
this.columns = new RBMKColumn[15 * 15];
|
||||
|
||||
for(int i = 0; i < columns.length; i++) {
|
||||
if(data.getBoolean("full")) {
|
||||
this.columns = new RBMKColumn[15 * 15];
|
||||
|
||||
if(data.hasKey("type_" + i)) {
|
||||
this.columns[i] = new RBMKColumn(ColumnType.values()[data.getShort("type_" + i)], (NBTTagCompound)data.getTag("column_" + i));
|
||||
for(int i = 0; i < columns.length; i++) {
|
||||
|
||||
if(data.hasKey("type_" + i)) {
|
||||
this.columns[i] = new RBMKColumn(ColumnType.values()[data.getShort("type_" + i)], (NBTTagCompound)data.getTag("column_" + i));
|
||||
}
|
||||
}
|
||||
|
||||
this.fluxBuffer = data.getIntArray("flux");
|
||||
|
||||
for(int i = 0; i < this.screens.length; i++) {
|
||||
RBMKScreen screen = screens[i];
|
||||
screen.display = data.getString("t" + i);
|
||||
}
|
||||
}
|
||||
|
||||
this.fluxBuffer = data.getIntArray("flux");
|
||||
for(int i = 0; i < this.screens.length; i++) {
|
||||
RBMKScreen screen = screens[i];
|
||||
screen.type = ScreenType.values()[data.getByte("s" + i)];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -155,6 +260,27 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(data.hasKey("toggle")) {
|
||||
int slot = data.getByte("toggle");
|
||||
int next = this.screens[slot].type.ordinal() + 1;
|
||||
ScreenType type = ScreenType.values()[next % ScreenType.values().length];
|
||||
this.screens[slot].type = type;
|
||||
}
|
||||
|
||||
if(data.hasKey("id")) {
|
||||
int slot = data.getByte("id");
|
||||
List<Integer> list = new ArrayList();
|
||||
|
||||
for(int i = 0; i < 15 * 15; i++) {
|
||||
if(data.getBoolean("s" + i)) {
|
||||
list.add(i);
|
||||
}
|
||||
}
|
||||
|
||||
Integer[] cols = list.toArray(new Integer[0]);
|
||||
this.screens[slot].columns = cols;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -182,6 +308,11 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
this.targetX = nbt.getInteger("tX");
|
||||
this.targetY = nbt.getInteger("tY");
|
||||
this.targetZ = nbt.getInteger("tZ");
|
||||
|
||||
for(int i = 0; i < this.screens.length; i++) {
|
||||
this.screens[i].type = ScreenType.values()[nbt.getByte("t" + i)];
|
||||
this.screens[i].columns = Arrays.stream(nbt.getIntArray("s" + i)).boxed().toArray(Integer[]::new);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -191,6 +322,11 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
nbt.setInteger("tX", this.targetX);
|
||||
nbt.setInteger("tY", this.targetY);
|
||||
nbt.setInteger("tZ", this.targetZ);
|
||||
|
||||
for(int i = 0; i < this.screens.length; i++) {
|
||||
nbt.setByte("t" + i, (byte) this.screens[i].type.ordinal());
|
||||
nbt.setIntArray("s" + i, Arrays.stream(this.screens[i].columns).mapToInt(Integer::intValue).toArray());
|
||||
}
|
||||
}
|
||||
|
||||
public static class RBMKColumn {
|
||||
@ -292,4 +428,32 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
|
||||
this.offset = offset;
|
||||
}
|
||||
}
|
||||
|
||||
public class RBMKScreen {
|
||||
public ScreenType type = ScreenType.NONE;
|
||||
public Integer[] columns = new Integer[0];
|
||||
public String display = null;
|
||||
|
||||
public RBMKScreen() { }
|
||||
public RBMKScreen(ScreenType type, Integer[] columns, String display) {
|
||||
this.type = type;
|
||||
this.columns = columns;
|
||||
this.display = display;
|
||||
}
|
||||
}
|
||||
|
||||
public static enum ScreenType {
|
||||
NONE(0 * 18),
|
||||
COL_TEMP(1 * 18),
|
||||
ROD_EXTRACTION(2 * 18),
|
||||
FUEL_DEPLETION(3 * 18),
|
||||
FUEL_POISON(4 * 18),
|
||||
FUEL_TEMP(5 * 18);
|
||||
|
||||
public int offset;
|
||||
|
||||
private ScreenType(int offset) {
|
||||
this.offset = offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement
|
||||
recipes.put(new ComparableStack(Items.mushroom_stew), new ItemStack(ModItems.glowing_stew));
|
||||
}
|
||||
|
||||
private boolean canProcess() {
|
||||
public boolean canProcess() {
|
||||
|
||||
if(slots[0] == null)
|
||||
return false;
|
||||
|
||||
@ -175,6 +175,15 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(te instanceof TileEntityRBMKOutgasser) {
|
||||
TileEntityRBMKOutgasser rod = (TileEntityRBMKOutgasser)te;
|
||||
|
||||
if(!rod.canProcess()) {
|
||||
return flux;
|
||||
}
|
||||
}
|
||||
|
||||
if(te instanceof IRBMKFluxReceiver) {
|
||||
IRBMKFluxReceiver rod = (IRBMKFluxReceiver)te;
|
||||
rod.receiveFlux(stream, flux);
|
||||
|
||||
@ -3349,6 +3349,13 @@ rbmk.heat=Column temperature: %s
|
||||
rbmk.boiler.water=Feedwater: %s / %s
|
||||
rbmk.boiler.steam=Steam: %s / %s
|
||||
rbmk.boiler.type=Compressor: %s
|
||||
rbmk.console.assign=Assign selected columns to screen #%s
|
||||
rbmk.console.none=Off
|
||||
rbmk.console.col_temp=Monitor average column temperature
|
||||
rbmk.console.rod_extraction=Monitor average control rod extraction
|
||||
rbmk.console.fuel_depletion=Monitor average fuel depletion
|
||||
rbmk.console.fuel_poison=Monitor average xenon poisoning
|
||||
rbmk.console.fuel_temp=Monitor average fuel temperature
|
||||
rbmk.control.level=%s
|
||||
rbmk.control.red=§cRed Group
|
||||
rbmk.control.yellow=§eYellow Group
|
||||
@ -3360,6 +3367,11 @@ rbmk.rod.depletion=Depletion: %s
|
||||
rbmk.rod.xenon=Xenon poison: %s
|
||||
rbmk.rod.coreTemp=Core temperature: %s
|
||||
rbmk.rod.skinTemp=Skin temperature: %s / %s
|
||||
rbmk.screen.core=Core: %s
|
||||
rbmk.screen.depletion=Depl: %s
|
||||
rbmk.screen.rod=Control: %s
|
||||
rbmk.screen.temp=Temp: %s
|
||||
rbmk.screen.xenon=Xenon: %s
|
||||
|
||||
soundCategory.ntmMachines=NTM Machines
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.4 KiB |
BIN
src/main/resources/assets/hbm/textures/models/machines/mixer.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 924 B |
|
After Width: | Height: | Size: 543 B |
BIN
src/main/resources/assets/hbm/textures/models/turrets/himars.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |