Merge branch 'master' into inventory-pronter

This commit is contained in:
George Paton 2025-08-28 22:23:10 +10:00 committed by GitHub
commit 45aab4617a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
113 changed files with 2129 additions and 1077 deletions

View File

@ -1,6 +1,14 @@
## Changed ## Changed
* Blueprint folders can now be bought on bobmazon (64 for blue recipes, 256 for beige ones) * Updated ukrainian and chinese localization, including QMAW
* Due to severe issues with ticking order as well as a crash caused by certain tiles that uses threaded packets, Torcherino accelerator torches no longer affect NTM machines
* RBMK control rod colors and auto control rod settings are now copiable
* Murky wings no longer have slowfall, and using shift+space cancels the momentum
* Murky wings are now slow by default and speed up when sprinting
* The arc furnace can now be used with AE2 buses, which was previously not possible due to the unique stacksize limitations
## Fixed ## Fixed
* Fixed the QMAW loader crashing servers * Fixed conveyor grabber dropping items off at an offset when placing them on a conveyor belt due to a client desync
* Oops * Fixed occasional crash caused by using the settings tool on the autoloader
* Fixed QMAW not correctly working with other languages
* Fixed QMAW loading breaking entirely due to file encoding
* Fixed PWR fuel rod textures being 18x18 instead of 16x16

View File

@ -565,6 +565,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl
@Override @Override
public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) {
int[] pos = findCore(world, x, y, z); int[] pos = findCore(world, x, y, z);
if(pos == null) return;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if (tile instanceof ICopiable) if (tile instanceof ICopiable)
((ICopiable) tile).pasteSettings(nbt, index, world, player, pos[0], pos[1], pos[2]); ((ICopiable) tile).pasteSettings(nbt, index, world, player, pos[0], pos[1], pos[2]);

View File

@ -0,0 +1,51 @@
package com.hbm.commands;
import com.hbm.items.ICustomizable;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
public class CommandCustomize extends CommandBase {
@Override
public String getCommandName() {
return "ntmcustomize";
}
@Override
public String getCommandUsage(ICommandSender sender) {
return "/ntmcustomize";
}
@Override
public int getRequiredPermissionLevel() {
return 0;
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
return true;
}
@Override
public void processCommand(ICommandSender sender, String[] args) {
if(!(sender instanceof EntityPlayer)) {
sender.addChatMessage(new ChatComponentText("Customization is only available to players!").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
return;
}
EntityPlayer player = (EntityPlayer) sender;
if(player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ICustomizable)) {
sender.addChatMessage(new ChatComponentText("You have to hold a customizable item to use this command!").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
return;
}
ICustomizable item = (ICustomizable) player.getHeldItem().getItem();
item.customize(player, player.getHeldItem(), args);
}
}

View File

@ -1,9 +1,8 @@
package com.hbm.config; package com.hbm.config;
import java.io.File; import java.io.*;
import java.io.FileReader; import java.nio.charset.StandardCharsets;
import java.io.FileWriter; import java.nio.file.Files;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -148,7 +147,7 @@ public class CustomMachineConfigJSON {
public static void readConfig(File config) { public static void readConfig(File config) {
try { try {
JsonObject json = gson.fromJson(new FileReader(config), JsonObject.class); JsonObject json = gson.fromJson(new InputStreamReader(Files.newInputStream(config.toPath()), StandardCharsets.UTF_8), JsonObject.class);
JsonArray machines = json.get("machines").getAsJsonArray(); JsonArray machines = json.get("machines").getAsJsonArray();
for(int i = 0; i < machines.size(); i++) { for(int i = 0; i < machines.size(); i++) {
@ -182,32 +181,32 @@ public class CustomMachineConfigJSON {
try { try {
JsonArray recipeShape = machineObject.get("recipeShape").getAsJsonArray(); JsonArray recipeShape = machineObject.get("recipeShape").getAsJsonArray();
JsonArray recipeParts = machineObject.get("recipeParts").getAsJsonArray(); JsonArray recipeParts = machineObject.get("recipeParts").getAsJsonArray();
Object[] parts = new Object[recipeShape.size() + recipeParts.size()]; Object[] parts = new Object[recipeShape.size() + recipeParts.size()];
for(int j = 0; j < recipeShape.size(); j++) { for(int j = 0; j < recipeShape.size(); j++) {
parts[j] = recipeShape.get(j).getAsString(); parts[j] = recipeShape.get(j).getAsString();
} }
for(int j = 0; j < recipeParts.size(); j++) { for(int j = 0; j < recipeParts.size(); j++) {
Object o = null; Object o = null;
if(j % 2 == 0) { if(j % 2 == 0) {
o = recipeParts.get(j).getAsString().charAt(0); //god is dead and we killed him o = recipeParts.get(j).getAsString().charAt(0); //god is dead and we killed him
} else { } else {
AStack a = SerializableRecipe.readAStack(recipeParts.get(j).getAsJsonArray()); AStack a = SerializableRecipe.readAStack(recipeParts.get(j).getAsJsonArray());
if(a instanceof ComparableStack) o = ((ComparableStack) a).toStack(); if(a instanceof ComparableStack) o = ((ComparableStack) a).toStack();
if(a instanceof OreDictStack) o = ((OreDictStack) a).name; if(a instanceof OreDictStack) o = ((OreDictStack) a).name;
} }
parts[j + recipeShape.size()] = o; parts[j + recipeShape.size()] = o;
} }
ItemStack stack = new ItemStack(ModBlocks.custom_machine, 1, i + 100); ItemStack stack = new ItemStack(ModBlocks.custom_machine, 1, i + 100);
stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound = new NBTTagCompound();
stack.stackTagCompound.setString("machineType", configuration.unlocalizedName); stack.stackTagCompound.setString("machineType", configuration.unlocalizedName);
CraftingManager.addRecipeAuto(stack, parts); CraftingManager.addRecipeAuto(stack, parts);
} catch(Exception ex) { } catch(Exception ex) {
MainRegistry.logger.error("Caught exception trying to parse core recipe for custom machine " + configuration.unlocalizedName); MainRegistry.logger.error("Caught exception trying to parse core recipe for custom machine " + configuration.unlocalizedName);

View File

@ -5,6 +5,7 @@ import java.util.Map.Entry;
import com.hbm.handler.guncfg.*; import com.hbm.handler.guncfg.*;
@Deprecated
public class BulletConfigSyncingUtil { public class BulletConfigSyncingUtil {
private static HashMap<Integer, BulletConfiguration> configSet = new HashMap<Integer, BulletConfiguration>(); private static HashMap<Integer, BulletConfiguration> configSet = new HashMap<Integer, BulletConfiguration>();

View File

@ -14,5 +14,6 @@ public class AE2CompatHandler {
@Optional.Method(modid = "appliedenergistics2") @Optional.Method(modid = "appliedenergistics2")
private static void registerHandler() { private static void registerHandler() {
AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler());
AEApi.instance().registries().externalStorage().addExternalStorageInterface(new AFLExternalStorageHandler());
} }
} }

View File

@ -0,0 +1,34 @@
package com.hbm.handler.ae2;
import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge;
import com.hbm.tileentity.TileEntityProxyCombo;
import cpw.mods.fml.common.Optional;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.storage.IExternalStorageHandler;
import appeng.api.storage.IMEInventory;
import appeng.api.storage.StorageChannel;
import appeng.me.storage.MEMonitorIInventory;
import appeng.util.inv.IMEAdaptor;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2")})
public class AFLExternalStorageHandler implements IExternalStorageHandler {
public AFLExternalStorageHandler() {}
@Override
public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) {
boolean coreProxy = te instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) te).getTile() instanceof TileEntityMachineArcFurnaceLarge;
return channel == StorageChannel.ITEMS && (te instanceof TileEntityMachineArcFurnaceLarge || coreProxy);
}
@Override
public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource src) {
if (!canHandle(te, d, channel, src)) return null;
if (te instanceof TileEntityProxyCombo) return new MEMonitorIInventory(new IMEAdaptor(new ArcFurnaceLargeMEInventory((TileEntityMachineArcFurnaceLarge) ((TileEntityProxyCombo)te).getTile()), src)) {};
return new MEMonitorIInventory(new IMEAdaptor(new ArcFurnaceLargeMEInventory((TileEntityMachineArcFurnaceLarge) te), src)) {};
}
}

View File

@ -0,0 +1,60 @@
package com.hbm.handler.ae2;
import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge;
import com.hbm.tileentity.TileEntityProxyCombo;
import cpw.mods.fml.common.Optional;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.storage.IMEInventory;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import net.minecraft.item.ItemStack;
@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2")})
public class ArcFurnaceLargeMEInventory implements IMEInventory<IAEItemStack> {
private TileEntityMachineArcFurnaceLarge afl;
public ArcFurnaceLargeMEInventory(TileEntityMachineArcFurnaceLarge afl) {
this.afl = afl;
}
@Override
public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) {
ItemStack is = input.getItemStack();
is = afl.distributeInput(is, type == Actionable.MODULATE);
if(is == null) return null;
return AEApi.instance().storage().createItemStack(is);
}
@Override
public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) {
ItemStack is = request.getItemStack();
is = afl.collectRequested(is, mode == Actionable.MODULATE);
if(is == null) return null;
return AEApi.instance().storage().createItemStack(is);
}
@Override
public IItemList<IAEItemStack> getAvailableItems(IItemList<IAEItemStack> out) {
ItemStack is;
for(int i = 0; i < 25; i++) {
is = afl.getAvailableItemFromSlot(i);
if(is != null) out.add(AEApi.instance().storage().createItemStack(is));
}
return out;
}
@Override
public StorageChannel getChannel() {
return StorageChannel.ITEMS;
}
}

View File

@ -4,6 +4,7 @@ import com.hbm.handler.BulletConfiguration;
import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
@Deprecated
public class GunEnergyFactory { public class GunEnergyFactory {
public static BulletConfiguration getTurbineConfig() { public static BulletConfiguration getTurbineConfig() {

View File

@ -23,6 +23,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3; import net.minecraft.util.Vec3;
@Deprecated
public class GunNPCFactory { public class GunNPCFactory {
public static BulletConfiguration getMaskmanOrb() { public static BulletConfiguration getMaskmanOrb() {

View File

@ -14,6 +14,7 @@ import net.minecraft.nbt.NBTTagList;
* @author UFFR * @author UFFR
*/ */
@Deprecated
public class IMCBlastFurnace extends IMCHandler { public class IMCBlastFurnace extends IMCHandler {
public static final ArrayList<Triplet<Object, Object, ItemStack>> buffer = new ArrayList<>(); public static final ArrayList<Triplet<Object, Object, ItemStack>> buffer = new ArrayList<>();

View File

@ -10,6 +10,7 @@ import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
@Deprecated
public class IMCCentrifuge extends IMCHandler { public class IMCCentrifuge extends IMCHandler {
public static HashMap<AStack, ItemStack[]> buffer = new HashMap(); public static HashMap<AStack, ItemStack[]> buffer = new HashMap();

View File

@ -13,6 +13,7 @@ import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
@Deprecated
public class IMCCrystallizer extends IMCHandler { public class IMCCrystallizer extends IMCHandler {
public static HashMap<Pair<Object, FluidType>, CrystallizerRecipe> buffer = new HashMap(); public static HashMap<Pair<Object, FluidType>, CrystallizerRecipe> buffer = new HashMap();

View File

@ -6,6 +6,13 @@ import com.hbm.main.MainRegistry;
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
/**
* I'm not aware of anyone even using these, and for proper addon mods it's way easier to use direct calls instead of messages.
* Too cumbersome to implement and maintain, especially since the recipe register listeners exist now. Current implementation will break on recipe reload anyway.
*
* @author hbm
*/
@Deprecated
public abstract class IMCHandler { public abstract class IMCHandler {
private static final HashMap<String, IMCHandler> handlers = new HashMap(); private static final HashMap<String, IMCHandler> handlers = new HashMap();

View File

@ -65,11 +65,12 @@ public class ContainerMachineArcFurnaceLarge extends Container {
} else if(rStack.getItem() instanceof ItemMachineUpgrade) { } else if(rStack.getItem() instanceof ItemMachineUpgrade) {
if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null; if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null;
} else { } else {
if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 5, 25, false)) return null; stack = furnace.distributeInput(stack, true);
if(stack != null && stack.stackSize == rStack.stackSize) return null;
} }
} }
if(stack.stackSize == 0) { if(stack == null || stack.stackSize == 0) {
slot.putStack((ItemStack) null); slot.putStack((ItemStack) null);
} else { } else {
slot.onSlotChanged(); slot.onSlotChanged();

View File

@ -1,9 +1,8 @@
package com.hbm.inventory.fluid; package com.hbm.inventory.fluid;
import java.io.File; import java.io.*;
import java.io.FileReader; import java.nio.charset.StandardCharsets;
import java.io.FileWriter; import java.nio.file.Files;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -35,7 +34,7 @@ import net.minecraft.potion.PotionEffect;
public class Fluids { public class Fluids {
public static final Gson gson = new Gson(); public static final Gson gson = new Gson();
public static List<IFluidRegisterListener> additionalListeners = new ArrayList(); public static List<IFluidRegisterListener> additionalListeners = new ArrayList();
public static FluidType NONE; public static FluidType NONE;
@ -797,7 +796,7 @@ public class Fluids {
private static void readCustomFluids(File file) { private static void readCustomFluids(File file) {
try { try {
JsonObject json = gson.fromJson(new FileReader(file), JsonObject.class); JsonObject json = gson.fromJson(new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8), JsonObject.class);
for(Entry<String, JsonElement> entry : json.entrySet()) { for(Entry<String, JsonElement> entry : json.entrySet()) {
@ -879,12 +878,12 @@ public class Fluids {
ex.printStackTrace(); ex.printStackTrace();
} }
} }
public static void reloadFluids(){ public static void reloadFluids(){
File folder = MainRegistry.configHbmDir; File folder = MainRegistry.configHbmDir;
File customTypes = new File(folder.getAbsolutePath() + File.separatorChar + "hbmFluidTypes.json"); File customTypes = new File(folder.getAbsolutePath() + File.separatorChar + "hbmFluidTypes.json");
if(!customTypes.exists()) initDefaultFluids(customTypes); if(!customTypes.exists()) initDefaultFluids(customTypes);
for(FluidType type : customFluids){ for(FluidType type : customFluids){
idMapping.remove(type.getID()); idMapping.remove(type.getID());
registerOrder.remove(type); registerOrder.remove(type);
@ -892,7 +891,7 @@ public class Fluids {
metaOrder.remove(type); metaOrder.remove(type);
} }
customFluids.clear(); customFluids.clear();
for(FluidType type : foreignFluids){ for(FluidType type : foreignFluids){
idMapping.remove(type.getID()); idMapping.remove(type.getID());
registerOrder.remove(type); registerOrder.remove(type);
@ -900,7 +899,7 @@ public class Fluids {
metaOrder.remove(type); metaOrder.remove(type);
} }
foreignFluids.clear(); foreignFluids.clear();
readCustomFluids(customTypes); readCustomFluids(customTypes);
for(FluidType custom : customFluids) metaOrder.add(custom); for(FluidType custom : customFluids) metaOrder.add(custom);
File config = new File(MainRegistry.configHbmDir.getAbsolutePath() + File.separatorChar + "hbmFluidTraits.json"); File config = new File(MainRegistry.configHbmDir.getAbsolutePath() + File.separatorChar + "hbmFluidTraits.json");
@ -911,7 +910,7 @@ public class Fluids {
} else { } else {
readTraits(config); readTraits(config);
} }
for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad(); for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad();
} }
private static void registerCalculatedFuel(FluidType type, double base, double combustMult, FuelGrade grade) { private static void registerCalculatedFuel(FluidType type, double base, double combustMult, FuelGrade grade) {

View File

@ -8,6 +8,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.items.machine.ItemBlueprints; import com.hbm.items.machine.ItemBlueprints;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.OpenGlHelper;
@ -21,22 +22,22 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_assembler.png"); private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_assembler.png");
private TileEntityMachineAssemblyMachine assembler; private TileEntityMachineAssemblyMachine assembler;
public GUIMachineAssemblyMachine(InventoryPlayer invPlayer, TileEntityMachineAssemblyMachine tedf) { public GUIMachineAssemblyMachine(InventoryPlayer invPlayer, TileEntityMachineAssemblyMachine tedf) {
super(new ContainerMachineAssemblyMachine(invPlayer, tedf)); super(new ContainerMachineAssemblyMachine(invPlayer, tedf));
assembler = tedf; assembler = tedf;
this.xSize = 176; this.xSize = 176;
this.ySize = 256; this.ySize = 256;
} }
@Override @Override
public void drawScreen(int mouseX, int mouseY, float f) { public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f); super.drawScreen(mouseX, mouseY, f);
assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 99, 52, 16); assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 99, 52, 16);
assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 99, 52, 16); assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 99, 52, 16);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower);
if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) {
@ -44,32 +45,32 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer {
GenericRecipe recipe = (GenericRecipe) AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule.recipe); GenericRecipe recipe = (GenericRecipe) AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule.recipe);
this.func_146283_a(recipe.print(), mouseX, mouseY); this.func_146283_a(recipe.print(), mouseX, mouseY);
} else { } else {
this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY);
} }
} }
} }
@Override @Override
protected void mouseClicked(int x, int y, int button) { protected void mouseClicked(int x, int y, int button) {
super.mouseClicked(x, y, button); super.mouseClicked(x, y, button);
if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this); if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this);
} }
@Override @Override
protected void drawGuiContainerForegroundLayer(int i, int j) { protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.assembler.hasCustomInventoryName() ? this.assembler.getInventoryName() : I18n.format(this.assembler.getInventoryName()); String name = this.assembler.hasCustomInventoryName() ? this.assembler.getInventoryName() : I18n.format(this.assembler.getInventoryName());
this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
} }
@Override @Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture); Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int p = (int) (assembler.power * 61 / assembler.maxPower); int p = (int) (assembler.power * 61 / assembler.maxPower);
drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p);
@ -77,25 +78,25 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer {
int j = (int) Math.ceil(70 * assembler.assemblerModule.progress); int j = (int) Math.ceil(70 * assembler.assemblerModule.progress);
drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16);
} }
GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe);
/// LEFT LED /// LEFT LED
if(assembler.didProcess) { if(assembler.didProcess) {
drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6);
} else if(recipe != null) { } else if(recipe != null) {
drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6);
} }
/// RIGHT LED /// RIGHT LED
if(assembler.didProcess) { if(assembler.didProcess) {
drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6);
} else if(recipe != null && assembler.power >= recipe.power) { } else if(recipe != null && assembler.power >= recipe.power) {
drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6);
} }
this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126);
if(recipe != null && recipe.inputItem != null) { if(recipe != null && recipe.inputItem != null) {
for(int i = 0; i < recipe.inputItem.length; i++) { for(int i = 0; i < recipe.inputItem.length; i++) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.assemblerModule.inputSlots[i]); Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.assemblerModule.inputSlots[i]);
@ -115,7 +116,7 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer {
GL11.glColor4f(1F, 1F, 1F, 1F); GL11.glColor4f(1F, 1F, 1F, 1F);
GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_BLEND);
} }
assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 52, 16, 1); assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 52, 16, 1);
assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 52, 16, 1); assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 52, 16, 1);
} }

View File

@ -8,6 +8,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.items.machine.ItemBlueprints; import com.hbm.items.machine.ItemBlueprints;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.OpenGlHelper;
@ -21,15 +22,15 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_chemplant.png"); private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_chemplant.png");
private TileEntityMachineChemicalPlant chemplant; private TileEntityMachineChemicalPlant chemplant;
public GUIMachineChemicalPlant(InventoryPlayer invPlayer, TileEntityMachineChemicalPlant tedf) { public GUIMachineChemicalPlant(InventoryPlayer invPlayer, TileEntityMachineChemicalPlant tedf) {
super(new ContainerMachineChemicalPlant(invPlayer, tedf)); super(new ContainerMachineChemicalPlant(invPlayer, tedf));
chemplant = tedf; chemplant = tedf;
this.xSize = 176; this.xSize = 176;
this.ySize = 256; this.ySize = 256;
} }
@Override @Override
public void drawScreen(int mouseX, int mouseY, float f) { public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f); super.drawScreen(mouseX, mouseY, f);
@ -38,7 +39,7 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer {
chemplant.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 34); chemplant.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 34);
chemplant.outputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 80 + i * 18, guiTop + 18, 16, 34); chemplant.outputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 80 + i * 18, guiTop + 18, 16, 34);
} }
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower);
if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) {
@ -46,32 +47,32 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer {
GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule.recipe); GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule.recipe);
this.func_146283_a(recipe.print(), mouseX, mouseY); this.func_146283_a(recipe.print(), mouseX, mouseY);
} else { } else {
this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY);
} }
} }
} }
@Override @Override
protected void mouseClicked(int x, int y, int button) { protected void mouseClicked(int x, int y, int button) {
super.mouseClicked(x, y, button); super.mouseClicked(x, y, button);
if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, ItemBlueprints.grabPool(chemplant.slots[1]), this); if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, ItemBlueprints.grabPool(chemplant.slots[1]), this);
} }
@Override @Override
protected void drawGuiContainerForegroundLayer(int i, int j) { protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.chemplant.hasCustomInventoryName() ? this.chemplant.getInventoryName() : I18n.format(this.chemplant.getInventoryName()); String name = this.chemplant.hasCustomInventoryName() ? this.chemplant.getInventoryName() : I18nUtil.resolveKey(this.chemplant.getInventoryName());
this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); this.fontRendererObj.drawString(I18nUtil.resolveKey("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
} }
@Override @Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture); Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int p = (int) (chemplant.power * 61 / chemplant.maxPower); int p = (int) (chemplant.power * 61 / chemplant.maxPower);
drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p);
@ -79,25 +80,25 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer {
int j = (int) Math.ceil(70 * chemplant.chemplantModule.progress); int j = (int) Math.ceil(70 * chemplant.chemplantModule.progress);
drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16);
} }
GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe);
/// LEFT LED /// LEFT LED
if(chemplant.didProcess) { if(chemplant.didProcess) {
drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6);
} else if(recipe != null) { } else if(recipe != null) {
drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6);
} }
/// RIGHT LED /// RIGHT LED
if(chemplant.didProcess) { if(chemplant.didProcess) {
drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6);
} else if(recipe != null && chemplant.power >= recipe.power) { } else if(recipe != null && chemplant.power >= recipe.power) {
drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6);
} }
this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126);
if(recipe != null && recipe.inputItem != null) { if(recipe != null && recipe.inputItem != null) {
for(int i = 0; i < recipe.inputItem.length; i++) { for(int i = 0; i < recipe.inputItem.length; i++) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(chemplant.chemplantModule.inputSlots[i]); Slot slot = (Slot) this.inventorySlots.inventorySlots.get(chemplant.chemplantModule.inputSlots[i]);

View File

@ -8,6 +8,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.items.machine.ItemBlueprints; import com.hbm.items.machine.ItemBlueprints;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachinePUREX; import com.hbm.tileentity.machine.TileEntityMachinePUREX;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.OpenGlHelper;
@ -21,15 +22,15 @@ public class GUIMachinePUREX extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_purex.png"); private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_purex.png");
private TileEntityMachinePUREX purex; private TileEntityMachinePUREX purex;
public GUIMachinePUREX(InventoryPlayer invPlayer, TileEntityMachinePUREX tedf) { public GUIMachinePUREX(InventoryPlayer invPlayer, TileEntityMachinePUREX tedf) {
super(new ContainerMachinePUREX(invPlayer, tedf)); super(new ContainerMachinePUREX(invPlayer, tedf));
purex = tedf; purex = tedf;
this.xSize = 176; this.xSize = 176;
this.ySize = 256; this.ySize = 256;
} }
@Override @Override
public void drawScreen(int mouseX, int mouseY, float f) { public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f); super.drawScreen(mouseX, mouseY, f);
@ -38,7 +39,7 @@ public class GUIMachinePUREX extends GuiInfoContainer {
purex.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 52); purex.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 52);
} }
purex.outputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 36, 16, 52); purex.outputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 36, 16, 52);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, purex.power, purex.maxPower); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, purex.power, purex.maxPower);
if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) {
@ -46,32 +47,32 @@ public class GUIMachinePUREX extends GuiInfoContainer {
GenericRecipe recipe = (GenericRecipe) PUREXRecipes.INSTANCE.recipeNameMap.get(this.purex.purexModule.recipe); GenericRecipe recipe = (GenericRecipe) PUREXRecipes.INSTANCE.recipeNameMap.get(this.purex.purexModule.recipe);
this.func_146283_a(recipe.print(), mouseX, mouseY); this.func_146283_a(recipe.print(), mouseX, mouseY);
} else { } else {
this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY);
} }
} }
} }
@Override @Override
protected void mouseClicked(int x, int y, int button) { protected void mouseClicked(int x, int y, int button) {
super.mouseClicked(x, y, button); super.mouseClicked(x, y, button);
if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PUREXRecipes.INSTANCE, purex, purex.purexModule.recipe, 0, ItemBlueprints.grabPool(purex.slots[1]), this); if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PUREXRecipes.INSTANCE, purex, purex.purexModule.recipe, 0, ItemBlueprints.grabPool(purex.slots[1]), this);
} }
@Override @Override
protected void drawGuiContainerForegroundLayer(int i, int j) { protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.purex.hasCustomInventoryName() ? this.purex.getInventoryName() : I18n.format(this.purex.getInventoryName()); String name = this.purex.hasCustomInventoryName() ? this.purex.getInventoryName() : I18n.format(this.purex.getInventoryName());
this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
} }
@Override @Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture); Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int p = (int) (purex.power * 61 / purex.maxPower); int p = (int) (purex.power * 61 / purex.maxPower);
drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p);
@ -79,25 +80,25 @@ public class GUIMachinePUREX extends GuiInfoContainer {
int j = (int) Math.ceil(70 * purex.purexModule.progress); int j = (int) Math.ceil(70 * purex.purexModule.progress);
drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16);
} }
GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purex.purexModule.recipe); GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purex.purexModule.recipe);
/// LEFT LED /// LEFT LED
if(purex.didProcess) { if(purex.didProcess) {
drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6);
} else if(recipe != null) { } else if(recipe != null) {
drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6);
} }
/// RIGHT LED /// RIGHT LED
if(purex.didProcess) { if(purex.didProcess) {
drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6);
} else if(recipe != null && purex.power >= recipe.power) { } else if(recipe != null && purex.power >= recipe.power) {
drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6);
} }
this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126);
if(recipe != null && recipe.inputItem != null) { if(recipe != null && recipe.inputItem != null) {
for(int i = 0; i < recipe.inputItem.length; i++) { for(int i = 0; i < recipe.inputItem.length; i++) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(purex.purexModule.inputSlots[i]); Slot slot = (Slot) this.inventorySlots.inventorySlots.get(purex.purexModule.inputSlots[i]);

View File

@ -35,20 +35,20 @@ public class GenericRecipe {
public boolean customLocalization = false; public boolean customLocalization = false;
protected String[] blueprintPools = null; protected String[] blueprintPools = null;
public String autoSwitchGroup = null; public String autoSwitchGroup = null;
public GenericRecipe(String name) { public GenericRecipe(String name) {
this.name = name; this.name = name;
} }
public boolean isPooled() { return blueprintPools != null; } public boolean isPooled() { return blueprintPools != null; }
public String[] getPools() { return this.blueprintPools; } public String[] getPools() { return this.blueprintPools; }
public boolean isPartOfPool(String lookingFor) { public boolean isPartOfPool(String lookingFor) {
if(!isPooled()) return false; if(!isPooled()) return false;
for(String pool : blueprintPools) if (pool.equals(lookingFor)) return true; for(String pool : blueprintPools) if (pool.equals(lookingFor)) return true;
return false; return false;
} }
public GenericRecipe setDuration(int duration) { this.duration = duration; return this; } public GenericRecipe setDuration(int duration) { this.duration = duration; return this; }
public GenericRecipe setPower(long power) { this.power = power; return this; } public GenericRecipe setPower(long power) { this.power = power; return this; }
public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); }
@ -68,13 +68,13 @@ public class GenericRecipe {
public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; } public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; }
public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; }
public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; } public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; }
public GenericRecipe outputItems(ItemStack... output) { public GenericRecipe outputItems(ItemStack... output) {
this.outputItem = new IOutput[output.length]; this.outputItem = new IOutput[output.length];
for(int i = 0; i < outputItem.length; i++) this.outputItem[i] = new ChanceOutput(output[i]); for(int i = 0; i < outputItem.length; i++) this.outputItem[i] = new ChanceOutput(output[i]);
return this; return this;
} }
public GenericRecipe setIconToFirstIngredient() { public GenericRecipe setIconToFirstIngredient() {
if(this.inputItem != null) { if(this.inputItem != null) {
List<ItemStack> stacks = this.inputItem[0].extractForNEI(); List<ItemStack> stacks = this.inputItem[0].extractForNEI();
@ -82,9 +82,9 @@ public class GenericRecipe {
} }
return this; return this;
} }
public ItemStack getIcon() { public ItemStack getIcon() {
if(icon == null) { if(icon == null) {
if(outputItem != null) { if(outputItem != null) {
if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy();
@ -95,15 +95,15 @@ public class GenericRecipe {
icon = ItemFluidIcon.make(outputFluid[0]); icon = ItemFluidIcon.make(outputFluid[0]);
} }
} }
if(icon == null) icon = new ItemStack(ModItems.nothing); if(icon == null) icon = new ItemStack(ModItems.nothing);
return icon; return icon;
} }
public String getInternalName() { public String getInternalName() {
return this.name; return this.name;
} }
public String getLocalizedName() { public String getLocalizedName() {
String name = null; String name = null;
if(customLocalization) name = I18nUtil.resolveKey(this.name); if(customLocalization) name = I18nUtil.resolveKey(this.name);
@ -111,28 +111,51 @@ public class GenericRecipe {
if(this.nameWrapper != null) name = I18nUtil.resolveKey(this.nameWrapper, name); if(this.nameWrapper != null) name = I18nUtil.resolveKey(this.nameWrapper, name);
return name; return name;
} }
public List<String> print() { public List<String> print() {
List<String> list = new ArrayList(); List<String> list = new ArrayList();
list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); list.add(EnumChatFormatting.YELLOW + this.getLocalizedName());
// autoswitch group (two lines: label + "Enabled for")
if(this.autoSwitchGroup != null) { if(this.autoSwitchGroup != null) {
String[] lines = I18nUtil.resolveKeyArray("autoswitch", I18nUtil.resolveKey(this.autoSwitchGroup)); String[] lines = I18nUtil.resolveKeyArray("autoswitch", I18nUtil.resolveKey(this.autoSwitchGroup));
for(String line : lines) list.add(EnumChatFormatting.GOLD + line); for(String line : lines) list.add(EnumChatFormatting.GOLD + line);
} }
if(duration > 0) list.add(EnumChatFormatting.RED + "Duration: " + this.duration / 20D + "s");
if(power > 0) list.add(EnumChatFormatting.RED + "Consumption: " + BobMathUtil.getShortNumber(power) + "HE/t"); // duration (seconds)
list.add(EnumChatFormatting.BOLD + "Input:"); if(duration > 0) {
double seconds = this.duration / 20D;
list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.recipe.duration") + ": " + seconds + "s");
}
// power / consumption
if(power > 0) {
list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.recipe.consumption") + ": " + BobMathUtil.getShortNumber(power) + "HE/t");
}
// input label + items
list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.recipe.input") + ":");
if(inputItem != null) for(AStack stack : inputItem) { if(inputItem != null) for(AStack stack : inputItem) {
ItemStack display = stack.extractForCyclingDisplay(20); ItemStack display = stack.extractForCyclingDisplay(20);
list.add(" " + EnumChatFormatting.GRAY + display.stackSize + "x " + display.getDisplayName()); list.add(" " + EnumChatFormatting.GRAY + display.stackSize + "x " + display.getDisplayName());
} }
if(inputFluid != null) for(FluidStack fluid : inputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " at " + EnumChatFormatting.RED + fluid.pressure + " PU")); if (inputFluid != null) for (FluidStack fluid : inputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " " + I18nUtil.resolveKey("gui.recipe.atPressure") + " " + EnumChatFormatting.RED + fluid.pressure + " PU"));
list.add(EnumChatFormatting.BOLD + "Output:");
if(outputItem != null) for(IOutput output : outputItem) for(String line : output.getLabel()) list.add(" " + line); // output label + items
if(outputFluid != null) for(FluidStack fluid : outputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " at " + EnumChatFormatting.RED + fluid.pressure + " PU")); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.recipe.output") + ":");
if(outputItem != null) for(IOutput output : outputItem)
for(String line : output.getLabel()) list.add(" " + line);
if(outputFluid != null) for(FluidStack fluid : outputFluid) {
String mB = I18nUtil.resolveKey("gui.recipe.mB");
String pressurePart = fluid.pressure == 0 ? "" :
" " + I18nUtil.resolveKey("gui.recipe.atPressure") + " " + EnumChatFormatting.RED + fluid.pressure + " PU";
list.add(" " + EnumChatFormatting.BLUE + fluid.fill + mB + " " + fluid.type.getLocalizedName() + pressurePart);
}
return list; return list;
} }
/** Default impl only matches localized name substring, can be extended to include ingredients as well */ /** Default impl only matches localized name substring, can be extended to include ingredients as well */
public boolean matchesSearch(String substring) { public boolean matchesSearch(String substring) {
return getLocalizedName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US)); return getLocalizedName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US));

View File

@ -0,0 +1,9 @@
package com.hbm.items;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public interface ICustomizable {
public void customize(EntityPlayer player, ItemStack stack, String... args);
}

View File

@ -1477,7 +1477,7 @@ public class ModItems {
public static Item gun_aberrator_eott; public static Item gun_aberrator_eott;
public static Item gun_double_barrel; public static Item gun_double_barrel;
public static Item gun_double_barrel_sacred_dragon; public static Item gun_double_barrel_sacred_dragon;
public static Item gun_n_i_4_n_i; // we GET THERE when we GET THERE
public static Item gun_charge_thrower; public static Item gun_charge_thrower;
public static Item ammo_standard; public static Item ammo_standard;

View File

@ -51,13 +51,12 @@ public class WingsMurk extends JetpackBase {
if(player.fallDistance > 0) if(player.fallDistance > 0)
player.fallDistance = 0; player.fallDistance = 0;
if(player.motionY < -0.4D)
player.motionY = -0.4D;
if(this == ModItems.wings_limp) { if(this == ModItems.wings_limp) {
if(player.motionY < -0.4D)
player.motionY = -0.4D;
if(player.isSneaking()) { if(player.isSneaking()) {
if(player.motionY < -0.08) { if(player.motionY < -0.08) {
double mo = player.motionY * -0.2; double mo = player.motionY * -0.2;
@ -81,10 +80,26 @@ public class WingsMurk extends JetpackBase {
if(props.isJetpackActive()) { if(props.isJetpackActive()) {
if(player.motionY < 0.6D) if(player.isSneaking()) {
player.motionY += 0.2D; if(player.motionY < -1)
else player.motionY += 0.4D;
player.motionY = 0.8D; else if(player.motionY < -0.1)
player.motionY += 0.2D;
else if(player.motionY < 0)
player.motionY = 0;
else if(player.motionY > 1)
player.motionY -= 0.4D;
else if(player.motionY > 0.1)
player.motionY -= 0.2D;
else if(player.motionY > 0)
player.motionY = 0;
} else {
if(player.motionY < 0.6D)
player.motionY += 0.2D;
else
player.motionY = 0.8D;
}
} else if(props.enableBackpack && !player.isSneaking()) { } else if(props.enableBackpack && !player.isSneaking()) {
@ -100,7 +115,7 @@ public class WingsMurk extends JetpackBase {
Vec3 orig = player.getLookVec(); Vec3 orig = player.getLookVec();
Vec3 look = Vec3.createVectorHelper(orig.xCoord, 0, orig.zCoord).normalize(); Vec3 look = Vec3.createVectorHelper(orig.xCoord, 0, orig.zCoord).normalize();
double mod = player.isSneaking() ? 0.25D : 1D; double mod = player.isSprinting() ? 1D : 0.25D;
if(player.moveForward != 0) { if(player.moveForward != 0) {
player.motionX += look.xCoord * 0.35 * player.moveForward * mod; player.motionX += look.xCoord * 0.35 * player.moveForward * mod;

View File

@ -2,7 +2,9 @@ package com.hbm.items.bomb;
import java.util.List; import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
@ -12,22 +14,17 @@ import net.minecraft.item.ItemStack;
public class ItemFleija extends Item { public class ItemFleija extends Item {
@Override @Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
{ list.add(I18nUtil.resolveKey("item.bomb_part.used_in"));
list.add("Used in:"); list.add(ModBlocks.nuke_fleija.getLocalizedName());
list.add("F.L.E.I.J.A.");
super.addInformation(itemstack, player, list, bool); super.addInformation(itemstack, player, list, bool);
} }
@Override @Override
public EnumRarity getRarity(ItemStack p_77613_1_) { public EnumRarity getRarity(ItemStack itemstack) {
if (this == ModItems.fleija_propellant) {
if(this == ModItems.fleija_propellant) return EnumRarity.rare;
{ }
return EnumRarity.rare; return EnumRarity.common;
} }
return EnumRarity.common;
}
} }

View File

@ -2,17 +2,18 @@ package com.hbm.items.bomb;
import java.util.List; import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public class ItemN2 extends Item { public class ItemN2 extends Item {
@Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool)
{
list.add("Used in:");
list.add("N² Mine");
}
@Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
list.add(I18nUtil.resolveKey("item.bomb_part.used_in"));
list.add(ModBlocks.nuke_n2.getLocalizedName());
}
} }

View File

@ -2,6 +2,9 @@ package com.hbm.items.bomb;
import java.util.List; import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -9,10 +12,9 @@ import net.minecraft.item.ItemStack;
public class ItemSolinium extends Item { public class ItemSolinium extends Item {
@Override @Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
{ list.add(I18nUtil.resolveKey("item.bomb_part.used_in"));
list.add("Used in:"); list.add(ModBlocks.nuke_solinium.getLocalizedName() + " name");
list.add("Solinium Bomb");
super.addInformation(itemstack, player, list, bool); super.addInformation(itemstack, player, list, bool);
} }
} }

View File

@ -2,6 +2,8 @@ package com.hbm.items.food;
import java.util.List; import java.util.List;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.handler.threading.PacketThreading; import com.hbm.handler.threading.PacketThreading;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
@ -29,70 +31,68 @@ public class ItemLemon extends ItemFood {
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool)
{ {
if(this == ModItems.lemon) { if(this == ModItems.lemon) {
list.add("Eh, good enough."); list.add(I18nUtil.resolveKey("item.lemon.desc"));
} }
if(this == ModItems.med_ipecac) { if(this == ModItems.med_ipecac) {
list.add("Bitter juice that will cause your stomach"); String[] lines = I18nUtil.resolveKeyArray("item.med_ipecac.desc");
list.add("to forcefully eject its contents."); for (String line : lines) {
list.add(line);
}
} }
if(this == ModItems.med_ptsd) { if(this == ModItems.med_ptsd) {
list.add("This isn't even PTSD mediaction, it's just"); String[] lines = I18nUtil.resolveKeyArray("item.med_ptsd.desc");
list.add("Ipecac in a different bottle!"); for (String line : lines) {
list.add(line);
}
} }
if(this == ModItems.med_schizophrenia) { if(this == ModItems.med_schizophrenia) {
list.add("Makes the voices go away. Just for a while."); String[] lines = I18nUtil.resolveKeyArray("item.med_schizophrenia.desc");
list.add(""); for (String line : lines) {
list.add("..."); list.add(line);
list.add("Better not take it."); }
}
if(this == ModItems.med_schizophrenia) {
list.add("Makes the voices go away. Just for a while.");
list.add("");
list.add("...");
list.add("Better not take it.");
} }
if(this == ModItems.loops) { if(this == ModItems.loops) {
list.add("Brøther, may I have some lööps?"); list.add(I18nUtil.resolveKey("item.loops.desc"));
} }
if(this == ModItems.loop_stew) { if(this == ModItems.loop_stew) {
list.add("A very, very healthy breakfast."); list.add(I18nUtil.resolveKey("item.loop_stew.desc"));
} }
if(this == ModItems.twinkie) { if(this == ModItems.twinkie) {
list.add("Expired 600 years ago!"); list.add(I18nUtil.resolveKey("item.twinkie.desc"));
} }
if(this == ModItems.pudding) { if(this == ModItems.pudding) {
list.add("What if he did?"); String[] lines = I18nUtil.resolveKeyArray("item.pudding.desc");
list.add("What if he didn't?"); for (String line : lines) {
list.add("What if the world was made of pudding?"); list.add(line);
}
} }
if(this == ModItems.ingot_semtex) { if(this == ModItems.ingot_semtex) {
list.add("Semtex H Plastic Explosive"); String[] lines = I18nUtil.resolveKeyArray("item.ingot_semtex.desc");
list.add("Performant explosive for many applications."); for (String line : lines) {
list.add("Edible"); list.add(line);
}
} }
if(this == ModItems.peas) { if(this == ModItems.peas) {
list.add("He accepts your offering."); list.add(I18nUtil.resolveKey("item.peas.desc"));
} }
if(this == ModItems.quesadilla) { if(this == ModItems.quesadilla) {
list.add("That's what a 50 year old yeast infection does to you."); list.add(I18nUtil.resolveKey("item.cheese_quesadilla.desc"));
} }
} }
@Override
@Override
protected void onFoodEaten(ItemStack stack, World world, EntityPlayer player) protected void onFoodEaten(ItemStack stack, World world, EntityPlayer player)
{ {
if(this == ModItems.med_ipecac || this == ModItems.med_ptsd) { if(this == ModItems.med_ipecac || this == ModItems.med_ptsd) {
player.addPotionEffect(new PotionEffect(Potion.hunger.id, 50, 49)); player.addPotionEffect(new PotionEffect(Potion.hunger.id, 50, 49));

View File

@ -4,6 +4,7 @@ import java.util.List;
import com.hbm.items.ISatChip; import com.hbm.items.ISatChip;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -14,36 +15,37 @@ public class ItemSatChip extends Item implements ISatChip {
@Override @Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool)
{ {
list.add("Satellite frequency: " + getFreq(itemstack)); list.add(I18nUtil.resolveKey("satchip.frequency") + ": " + getFreq(itemstack));
if(this == ModItems.sat_foeq) if(this == ModItems.sat_foeq)
list.add("Gives you an achievement. That's it."); list.add(I18nUtil.resolveKey("satchip.foeq"));
if(this == ModItems.sat_gerald) { if (this == ModItems.sat_gerald) {
list.add("Single use."); String[] lines = I18nUtil.resolveKeyArray("satchip.gerald.desc");
list.add("Requires orbital module."); for (String line : lines) {
list.add("Melter of CPUs, bane of every server owner."); list.add(line);
}
} }
if(this == ModItems.sat_laser) if(this == ModItems.sat_laser)
list.add("Allows to summon lasers with a 15 second cooldown."); list.add(I18nUtil.resolveKey("satchip.laser"));
if(this == ModItems.sat_mapper) if(this == ModItems.sat_mapper)
list.add("Displays currently loaded chunks."); list.add(I18nUtil.resolveKey("satchip.mapper"));
if(this == ModItems.sat_miner) if(this == ModItems.sat_miner)
list.add("Will deliver ore powders to a cargo landing pad."); list.add(I18nUtil.resolveKey("satchip.miner"));
if(this == ModItems.sat_lunar_miner) if(this == ModItems.sat_lunar_miner)
list.add("Mines moon turf to deliver it to a cargo landing pad."); list.add(I18nUtil.resolveKey("satchip.lunar_miner"));
if(this == ModItems.sat_radar) if(this == ModItems.sat_radar)
list.add("Shows a map of active entities."); list.add(I18nUtil.resolveKey("satchip.radar"));
if(this == ModItems.sat_resonator) if(this == ModItems.sat_resonator)
list.add("Allows for teleportation with no cooldown."); list.add(I18nUtil.resolveKey("satchip.resonator"));
if(this == ModItems.sat_scanner) if(this == ModItems.sat_scanner)
list.add("Creates a topdown map of underground ores."); list.add(I18nUtil.resolveKey("satchip.scanner"));
} }
} }

View File

@ -1,4 +1,5 @@
package com.hbm.items.special; package com.hbm.items.special;
import com.hbm.util.i18n.I18nUtil;
import java.util.List; import java.util.List;
@ -6,17 +7,16 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public class ItemHotDusted extends ItemHot { public class ItemHotDusted extends ItemHot {
public ItemHotDusted(int heat) { public ItemHotDusted(int heat) {
super(heat); super(heat);
this.setHasSubtypes(true); this.setHasSubtypes(true);
} }
@Override @Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
list.add("Forged " + stack.getItemDamage() + " time(s)"); list.add(String.format(I18nUtil.resolveKey("item.hot_dusted.forged"), stack.getItemDamage()));
} }
public static int getMaxHeat(ItemStack stack) { public static int getMaxHeat(ItemStack stack) {
return heat - stack.getItemDamage() * 10; return heat - stack.getItemDamage() * 10;
} }

View File

@ -2,6 +2,7 @@ package com.hbm.items.special;
import java.util.List; import java.util.List;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
@ -15,31 +16,31 @@ public class ItemRag extends Item {
@Override @Override
public boolean onEntityItemUpdate(EntityItem entityItem) { public boolean onEntityItemUpdate(EntityItem entityItem) {
if(entityItem != null && !entityItem.worldObj.isRemote) { if(entityItem != null && !entityItem.worldObj.isRemote) {
if(entityItem.worldObj.getBlock((int)Math.floor(entityItem.posX), (int)Math.floor(entityItem.posY), (int)Math.floor(entityItem.posZ)).getMaterial() == Material.water) { if (entityItem.worldObj.getBlock((int) Math.floor(entityItem.posX), (int) Math.floor(entityItem.posY),
(int) Math.floor(entityItem.posZ)).getMaterial() == Material.water) {
ItemStack stack = entityItem.getEntityItem(); ItemStack stack = entityItem.getEntityItem();
entityItem.setEntityItemStack(new ItemStack(ModItems.rag_damp, stack.stackSize)); entityItem.setEntityItemStack(new ItemStack(ModItems.rag_damp, stack.stackSize));
return true; return true;
} }
} }
return false; return false;
} }
@Override @Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
stack.stackSize--; stack.stackSize--;
player.inventory.addItemStackToInventory(new ItemStack(ModItems.rag_piss)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.rag_piss));
return stack; return stack;
} }
@Override @Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
list.add("Drop into water to make damp cloth."); String[] lines = I18nUtil.resolveKeyArray("item.rag.desc");
list.add("Right-click to urinate on the cloth."); for (String line : lines) {
list.add(line);
}
} }
} }

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.util.i18n.I18nUtil;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -25,64 +26,88 @@ public class ItemSwordMeteorite extends ItemSwordAbility {
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
super.addInformation(stack, player, list, ext); super.addInformation(stack, player, list, ext);
if(this == ModItems.meteorite_sword) { if (this == ModItems.meteorite_sword) {
list.add(EnumChatFormatting.ITALIC + "Forged from a fallen star"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.desc");
list.add(EnumChatFormatting.ITALIC + "Sharper than most terrestrial blades"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_seared) { if (this == ModItems.meteorite_sword_seared) {
list.add(EnumChatFormatting.ITALIC + "Fire strengthens the blade"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.seared.desc");
list.add(EnumChatFormatting.ITALIC + "Making it even more powerful"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_reforged) { if (this == ModItems.meteorite_sword_reforged) {
list.add(EnumChatFormatting.ITALIC + "The sword has been reforged"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.reforged.desc");
list.add(EnumChatFormatting.ITALIC + "To rectify past imperfections"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_hardened) { if (this == ModItems.meteorite_sword_hardened) {
list.add(EnumChatFormatting.ITALIC + "Extremely high pressure has been used"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.hardened.desc");
list.add(EnumChatFormatting.ITALIC + "To harden the blade further"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_alloyed) { if (this == ModItems.meteorite_sword_alloyed) {
list.add(EnumChatFormatting.ITALIC + "Cobalt fills the fissures"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.alloyed.desc");
list.add(EnumChatFormatting.ITALIC + "Strengthening the sword"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_machined) { if (this == ModItems.meteorite_sword_machined) {
list.add(EnumChatFormatting.ITALIC + "Advanced machinery was used"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.machined.desc");
list.add(EnumChatFormatting.ITALIC + "To refine the blade even more"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_treated) { if (this == ModItems.meteorite_sword_treated) {
list.add(EnumChatFormatting.ITALIC + "Chemicals have been applied"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.treated.desc");
list.add(EnumChatFormatting.ITALIC + "Making the sword more powerful"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_etched) { if (this == ModItems.meteorite_sword_etched) {
list.add(EnumChatFormatting.ITALIC + "Acids clean the material"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.etched.desc");
list.add(EnumChatFormatting.ITALIC + "To make this the perfect sword"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_bred) { if (this == ModItems.meteorite_sword_bred) {
list.add(EnumChatFormatting.ITALIC + "Immense heat and radiation"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.bred.desc");
list.add(EnumChatFormatting.ITALIC + "Compress the material"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_irradiated) { if (this == ModItems.meteorite_sword_irradiated) {
list.add(EnumChatFormatting.ITALIC + "The power of the Atom"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.irradiated.desc");
list.add(EnumChatFormatting.ITALIC + "Gives the sword might"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_fused) { if (this == ModItems.meteorite_sword_fused) {
list.add(EnumChatFormatting.ITALIC + "This blade has met"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.fused.desc");
list.add(EnumChatFormatting.ITALIC + "With the forces of the stars"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
if(this == ModItems.meteorite_sword_baleful) { if (this == ModItems.meteorite_sword_baleful) {
list.add(EnumChatFormatting.ITALIC + "This sword has met temperatures"); String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.baleful.desc");
list.add(EnumChatFormatting.ITALIC + "Far beyond what normal material can endure"); for (String line : lines) {
list.add(EnumChatFormatting.ITALIC + line);
}
} }
/* /*

View File

@ -6,6 +6,7 @@ import com.hbm.handler.MissileStruct;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.weapon.ItemCustomMissilePart.FuelType; import com.hbm.items.weapon.ItemCustomMissilePart.FuelType;
import com.hbm.items.weapon.ItemCustomMissilePart.WarheadType; import com.hbm.items.weapon.ItemCustomMissilePart.WarheadType;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -15,35 +16,35 @@ import net.minecraft.util.EnumChatFormatting;
public class ItemCustomMissile extends Item { public class ItemCustomMissile extends Item {
public static ItemStack buildMissile(Item chip, Item warhead, Item fuselage, Item stability, Item thruster) { public static ItemStack buildMissile(Item chip, Item warhead, Item fuselage, Item stability, Item thruster) {
if(stability == null) { if(stability == null) {
return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), null, new ItemStack(thruster)); return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), null, new ItemStack(thruster));
} else { } else {
return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), new ItemStack(stability), new ItemStack(thruster)); return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), new ItemStack(stability), new ItemStack(thruster));
} }
} }
public static ItemStack buildMissile(ItemStack chip, ItemStack warhead, ItemStack fuselage, ItemStack stability, ItemStack thruster) { public static ItemStack buildMissile(ItemStack chip, ItemStack warhead, ItemStack fuselage, ItemStack stability, ItemStack thruster) {
ItemStack missile = new ItemStack(ModItems.missile_custom); ItemStack missile = new ItemStack(ModItems.missile_custom);
writeToNBT(missile, "chip", Item.getIdFromItem(chip.getItem())); writeToNBT(missile, "chip", Item.getIdFromItem(chip.getItem()));
writeToNBT(missile, "warhead", Item.getIdFromItem(warhead.getItem())); writeToNBT(missile, "warhead", Item.getIdFromItem(warhead.getItem()));
writeToNBT(missile, "fuselage", Item.getIdFromItem(fuselage.getItem())); writeToNBT(missile, "fuselage", Item.getIdFromItem(fuselage.getItem()));
writeToNBT(missile, "thruster", Item.getIdFromItem(thruster.getItem())); writeToNBT(missile, "thruster", Item.getIdFromItem(thruster.getItem()));
if(stability != null) if(stability != null)
writeToNBT(missile, "stability", Item.getIdFromItem(stability.getItem())); writeToNBT(missile, "stability", Item.getIdFromItem(stability.getItem()));
return missile; return missile;
} }
private static void writeToNBT(ItemStack stack, String key, int value) { private static void writeToNBT(ItemStack stack, String key, int value) {
if(!stack.hasTagCompound()) if(!stack.hasTagCompound())
stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound = new NBTTagCompound();
stack.stackTagCompound.setInteger(key, value); stack.stackTagCompound.setInteger(key, value);
} }
public static int readFromNBT(ItemStack stack, String key) { public static int readFromNBT(ItemStack stack, String key) {
if(!stack.hasTagCompound()) if(!stack.hasTagCompound())
stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound = new NBTTagCompound();
@ -52,53 +53,63 @@ public class ItemCustomMissile extends Item {
@Override @Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
if(!stack.hasTagCompound()) if(!stack.hasTagCompound())
return; return;
try { try {
ItemCustomMissilePart chip = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "chip")); ItemCustomMissilePart chip = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "chip"));
ItemCustomMissilePart warhead = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "warhead")); ItemCustomMissilePart warhead = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "warhead"));
ItemCustomMissilePart fuselage = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "fuselage")); ItemCustomMissilePart fuselage = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "fuselage"));
ItemCustomMissilePart stability = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "stability")); ItemCustomMissilePart stability = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "stability"));
ItemCustomMissilePart thruster = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "thruster")); ItemCustomMissilePart thruster = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "thruster"));
list.add(EnumChatFormatting.BOLD + "Warhead: " + EnumChatFormatting.GRAY + warhead.getWarhead((WarheadType)warhead.attributes[0])); // warhead name
list.add(EnumChatFormatting.BOLD + "Strength: " + EnumChatFormatting.GRAY + (Float)warhead.attributes[1]); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.warhead") + ": " + EnumChatFormatting.GRAY + warhead.getWarhead((WarheadType)warhead.attributes[0]));
list.add(EnumChatFormatting.BOLD + "Fuel Type: " + EnumChatFormatting.GRAY + fuselage.getFuel((FuelType)fuselage.attributes[0]));
list.add(EnumChatFormatting.BOLD + "Fuel amount: " + EnumChatFormatting.GRAY + (Float)fuselage.attributes[1] + "l"); // strength
list.add(EnumChatFormatting.BOLD + "Chip inaccuracy: " + EnumChatFormatting.GRAY + (Float)chip.attributes[0] * 100 + "%"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.strength") + ": " + EnumChatFormatting.GRAY + (Float)warhead.attributes[1]);
// fuel type & amount
list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.fuelType") + ": " + EnumChatFormatting.GRAY + fuselage.getFuel((FuelType)fuselage.attributes[0]));
list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)fuselage.attributes[1] + "l");
// chip inaccuracy
list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.chipInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)chip.attributes[0] * 100 + "%");
// fin inaccuracy
if(stability != null) if(stability != null)
list.add(EnumChatFormatting.BOLD + "Fin inaccuracy: " + EnumChatFormatting.GRAY + (Float)stability.attributes[0] * 100 + "%"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.finInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)stability.attributes[0] * 100 + "%");
else else
list.add(EnumChatFormatting.BOLD + "Fin inaccuracy: " + EnumChatFormatting.GRAY + "100%"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.finInaccuracy") + ": " + EnumChatFormatting.GRAY + "100%");
list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + fuselage.getSize(fuselage.top) + "/" + fuselage.getSize(fuselage.bottom)); // size
list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.size") + ": " + EnumChatFormatting.GRAY + fuselage.getSize(fuselage.top) + "/" + fuselage.getSize(fuselage.bottom));
// health
float health = warhead.health + fuselage.health + thruster.health; float health = warhead.health + fuselage.health + thruster.health;
if(stability != null) if(stability != null)
health += stability.health; health += stability.health;
list.add(EnumChatFormatting.BOLD + "Health: " + EnumChatFormatting.GRAY + health + "HP"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.health") + ": " + EnumChatFormatting.GRAY + health + "HP");
} catch(Exception ex) { } catch(Exception ex) {
list.add(EnumChatFormatting.RED + "### I AM ERROR ###"); list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("error.generic"));
} }
} }
public static MissileStruct getStruct(ItemStack stack) { public static MissileStruct getStruct(ItemStack stack) {
if(stack == null || !(stack.getItem() instanceof ItemCustomMissile)) if(stack == null || !(stack.getItem() instanceof ItemCustomMissile))
return null; return null;
ItemCustomMissilePart warhead = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "warhead")); ItemCustomMissilePart warhead = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "warhead"));
ItemCustomMissilePart fuselage = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "fuselage")); ItemCustomMissilePart fuselage = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "fuselage"));
ItemCustomMissilePart stability = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "stability")); ItemCustomMissilePart stability = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "stability"));
ItemCustomMissilePart thruster = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "thruster")); ItemCustomMissilePart thruster = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "thruster"));
MissileStruct missile = new MissileStruct(warhead, fuselage, stability, thruster); MissileStruct missile = new MissileStruct(warhead, fuselage, stability, thruster);
return missile; return missile;
} }
} }

View File

@ -8,6 +8,7 @@ import com.hbm.entity.missile.EntityMissileCustom;
import com.hbm.items.special.ItemLootCrate; import com.hbm.items.special.ItemLootCrate;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -15,7 +16,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumChatFormatting;
public class ItemCustomMissilePart extends Item { public class ItemCustomMissilePart extends Item {
public PartType type; public PartType type;
public PartSize top; public PartSize top;
public PartSize bottom; public PartSize bottom;
@ -24,37 +25,37 @@ public class ItemCustomMissilePart extends Item {
private String title; private String title;
private String author; private String author;
private String witty; private String witty;
public ItemCustomMissilePart() { public ItemCustomMissilePart() {
this.setMaxStackSize(1); this.setMaxStackSize(1);
this.setCreativeTab(MainRegistry.missileTab); this.setCreativeTab(MainRegistry.missileTab);
} }
public static HashMap<Integer, ItemCustomMissilePart> parts = new HashMap(); public static HashMap<Integer, ItemCustomMissilePart> parts = new HashMap();
/** /**
* == Chips == * == Chips ==
* [0]: inaccuracy * [0]: inaccuracy
* *
* == Warheads == * == Warheads ==
* [0]: type * [0]: type
* [1]: strength/radius/cluster count * [1]: strength/radius/cluster count
* [2]: weight * [2]: weight
* *
* == Fuselages == * == Fuselages ==
* [0]: type * [0]: type
* [1]: tank size * [1]: tank size
* *
* == Stability == * == Stability ==
* [0]: inaccuracy mod * [0]: inaccuracy mod
* *
* == Thrusters === * == Thrusters ===
* [0]: type * [0]: type
* [1]: consumption * [1]: consumption
* [2]: lift strength * [2]: lift strength
*/ */
public Object[] attributes; public Object[] attributes;
public enum PartType { public enum PartType {
CHIP, CHIP,
WARHEAD, WARHEAD,
@ -62,9 +63,9 @@ public class ItemCustomMissilePart extends Item {
FINS, FINS,
THRUSTER THRUSTER
} }
public enum PartSize { public enum PartSize {
//for chips //for chips
ANY, ANY,
//for missile tips and thrusters //for missile tips and thrusters
@ -74,9 +75,9 @@ public class ItemCustomMissilePart extends Item {
SIZE_15, SIZE_15,
SIZE_20 SIZE_20
} }
public enum WarheadType { public enum WarheadType {
HE, HE,
INC, INC,
BUSTER, BUSTER,
@ -89,7 +90,7 @@ public class ItemCustomMissilePart extends Item {
TAINT, TAINT,
CLOUD, CLOUD,
TURBINE, TURBINE,
//shit solution but it works. this allows traits to be attached to these empty dummy types, allowing for custom warheads //shit solution but it works. this allows traits to be attached to these empty dummy types, allowing for custom warheads
CUSTOM0, CUSTOM1, CUSTOM2, CUSTOM3, CUSTOM4, CUSTOM5, CUSTOM6, CUSTOM7, CUSTOM8, CUSTOM9; CUSTOM0, CUSTOM1, CUSTOM2, CUSTOM3, CUSTOM4, CUSTOM5, CUSTOM6, CUSTOM7, CUSTOM8, CUSTOM9;
@ -100,44 +101,50 @@ public class ItemCustomMissilePart extends Item {
/** Override for the warhead's name in the missile description */ /** Override for the warhead's name in the missile description */
public String labelCustom = null; public String labelCustom = null;
} }
public enum FuelType { public enum FuelType {
KEROSENE, KEROSENE,
SOLID, SOLID,
HYDROGEN, HYDROGEN,
XENON, XENON,
BALEFIRE BALEFIRE
} }
public enum Rarity { public enum Rarity {
COMMON(EnumChatFormatting.GRAY + "Common"), COMMON("item.missile.part.rarity.common", EnumChatFormatting.GRAY),
UNCOMMON(EnumChatFormatting.YELLOW + "Uncommon"), UNCOMMON("item.missile.part.rarity.uncommon", EnumChatFormatting.YELLOW),
RARE(EnumChatFormatting.AQUA + "Rare"), RARE("item.missile.part.rarity.rare", EnumChatFormatting.AQUA),
EPIC(EnumChatFormatting.LIGHT_PURPLE + "Epic"), EPIC("item.missile.part.rarity.epic", EnumChatFormatting.LIGHT_PURPLE),
LEGENDARY(EnumChatFormatting.DARK_GREEN + "Legendary"), LEGENDARY("item.missile.part.rarity.legendary", EnumChatFormatting.DARK_GREEN),
SEWS_CLOTHES_AND_SUCKS_HORSE_COCK(EnumChatFormatting.DARK_AQUA + "Strange"); SEWS_CLOTHES_AND_SUCKS_HORSE_COCK("item.missile.part.rarity.strange", EnumChatFormatting.DARK_AQUA);
String name; private final String key;
private final EnumChatFormatting color;
Rarity(String name) {
this.name = name; Rarity(String key, EnumChatFormatting color) {
this.key = key;
this.color = color;
}
public String getDisplay() {
return color + I18nUtil.resolveKey(key);
} }
} }
public ItemCustomMissilePart makeChip(float inaccuracy) { public ItemCustomMissilePart makeChip(float inaccuracy) {
this.type = PartType.CHIP; this.type = PartType.CHIP;
this.top = PartSize.ANY; this.top = PartSize.ANY;
this.bottom = PartSize.ANY; this.bottom = PartSize.ANY;
this.attributes = new Object[] { inaccuracy }; this.attributes = new Object[] { inaccuracy };
parts.put(this.hashCode(), this); parts.put(this.hashCode(), this);
return this; return this;
} }
public ItemCustomMissilePart makeWarhead(WarheadType type, float punch, float weight, PartSize size) { public ItemCustomMissilePart makeWarhead(WarheadType type, float punch, float weight, PartSize size) {
this.type = PartType.WARHEAD; this.type = PartType.WARHEAD;
@ -145,12 +152,12 @@ public class ItemCustomMissilePart extends Item {
this.bottom = size; this.bottom = size;
this.attributes = new Object[] { type, punch, weight }; this.attributes = new Object[] { type, punch, weight };
setTextureName(RefStrings.MODID + ":mp_warhead"); setTextureName(RefStrings.MODID + ":mp_warhead");
parts.put(this.hashCode(), this); parts.put(this.hashCode(), this);
return this; return this;
} }
public ItemCustomMissilePart makeFuselage(FuelType type, float fuel, PartSize top, PartSize bottom) { public ItemCustomMissilePart makeFuselage(FuelType type, float fuel, PartSize top, PartSize bottom) {
this.type = PartType.FUSELAGE; this.type = PartType.FUSELAGE;
@ -158,12 +165,12 @@ public class ItemCustomMissilePart extends Item {
this.bottom = bottom; this.bottom = bottom;
attributes = new Object[] { type, fuel }; attributes = new Object[] { type, fuel };
setTextureName(RefStrings.MODID + ":mp_fuselage"); setTextureName(RefStrings.MODID + ":mp_fuselage");
parts.put(this.hashCode(), this); parts.put(this.hashCode(), this);
return this; return this;
} }
public ItemCustomMissilePart makeStability(float inaccuracy, PartSize size) { public ItemCustomMissilePart makeStability(float inaccuracy, PartSize size) {
this.type = PartType.FINS; this.type = PartType.FINS;
@ -171,12 +178,12 @@ public class ItemCustomMissilePart extends Item {
this.bottom = size; this.bottom = size;
this.attributes = new Object[] { inaccuracy }; this.attributes = new Object[] { inaccuracy };
setTextureName(RefStrings.MODID + ":mp_stability"); setTextureName(RefStrings.MODID + ":mp_stability");
parts.put(this.hashCode(), this); parts.put(this.hashCode(), this);
return this; return this;
} }
public ItemCustomMissilePart makeThruster(FuelType type, float consumption, float lift, PartSize size) { public ItemCustomMissilePart makeThruster(FuelType type, float consumption, float lift, PartSize size) {
this.type = PartType.THRUSTER; this.type = PartType.THRUSTER;
@ -184,9 +191,9 @@ public class ItemCustomMissilePart extends Item {
this.bottom = PartSize.NONE; this.bottom = PartSize.NONE;
this.attributes = new Object[] { type, consumption, lift }; this.attributes = new Object[] { type, consumption, lift };
setTextureName(RefStrings.MODID + ":mp_thruster"); setTextureName(RefStrings.MODID + ":mp_thruster");
parts.put(this.hashCode(), this); parts.put(this.hashCode(), this);
return this; return this;
} }
@ -196,122 +203,122 @@ public class ItemCustomMissilePart extends Item {
if(title != null) if(title != null)
list.add(EnumChatFormatting.DARK_PURPLE + "\"" + title + "\""); list.add(EnumChatFormatting.DARK_PURPLE + "\"" + title + "\"");
try { try {
switch(type) { switch(type) {
case CHIP: case CHIP:
list.add(EnumChatFormatting.BOLD + "Inaccuracy: " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%");
break; break;
case WARHEAD: case WARHEAD:
list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(bottom)); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.size") + ": " + EnumChatFormatting.GRAY + getSize(bottom));
list.add(EnumChatFormatting.BOLD + "Type: " + EnumChatFormatting.GRAY + getWarhead((WarheadType)attributes[0])); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.type") + ": " + EnumChatFormatting.GRAY + getWarhead((WarheadType)attributes[0]));
list.add(EnumChatFormatting.BOLD + "Strength: " + EnumChatFormatting.GRAY + (Float)attributes[1]); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.strength") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1]);
list.add(EnumChatFormatting.BOLD + "Weight: " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.weight") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t");
break; break;
case FUSELAGE: case FUSELAGE:
list.add(EnumChatFormatting.BOLD + "Top size: " + EnumChatFormatting.GRAY + getSize(top)); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.topSize") + ": " + EnumChatFormatting.GRAY + getSize(top));
list.add(EnumChatFormatting.BOLD + "Bottom size: " + EnumChatFormatting.GRAY + getSize(bottom)); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.bottomSize") + ": " + EnumChatFormatting.GRAY + getSize(bottom));
list.add(EnumChatFormatting.BOLD + "Fuel type: " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0]));
list.add(EnumChatFormatting.BOLD + "Fuel amount: " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l");
break; break;
case FINS: case FINS:
list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(top)); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.size") + ": " + EnumChatFormatting.GRAY + getSize(top));
list.add(EnumChatFormatting.BOLD + "Inaccuracy: " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%");
break; break;
case THRUSTER: case THRUSTER:
list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(top)); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.size") + ": " + EnumChatFormatting.GRAY + getSize(top));
list.add(EnumChatFormatting.BOLD + "Fuel type: " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0]));
list.add(EnumChatFormatting.BOLD + "Fuel consumption: " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l/tick"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelConsumption") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l/tick");
list.add(EnumChatFormatting.BOLD + "Max. payload: " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.maxPayload") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t");
break; break;
} }
} catch(Exception ex) { } catch(Exception ex) {
list.add("### I AM ERROR ###"); list.add(I18nUtil.resolveKey("error.generic"));
} }
if(type != PartType.CHIP) if(type != PartType.CHIP)
list.add(EnumChatFormatting.BOLD + "Health: " + EnumChatFormatting.GRAY + health + "HP"); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.health") + ": " + EnumChatFormatting.GRAY + health + "HP");
if(this.rarity != null) if(this.rarity != null)
list.add(EnumChatFormatting.BOLD + "Rarity: " + EnumChatFormatting.GRAY + this.rarity.name); list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.rarity") + ": " + EnumChatFormatting.GRAY + this.rarity.getDisplay());
if(author != null) if(author != null)
list.add(EnumChatFormatting.WHITE + " by " + author); list.add(EnumChatFormatting.WHITE + " " + I18nUtil.resolveKey("item.missile.part.by") + " " + author);
if(witty != null) if(witty != null)
list.add(EnumChatFormatting.GOLD + " " + EnumChatFormatting.ITALIC + "\"" + witty + "\""); list.add(EnumChatFormatting.GOLD + " " + EnumChatFormatting.ITALIC + "\"" + witty + "\"");
} }
public String getSize(PartSize size) { public String getSize(PartSize size) {
switch(size) { switch(size) {
case ANY: case ANY:
return "Any"; return I18nUtil.resolveKey("item.missile.part.size.any");
case SIZE_10: case SIZE_10:
return "1.0m"; return "1.0m";
case SIZE_15: case SIZE_15:
return "1.5m"; return "1.5m";
case SIZE_20: case SIZE_20:
return "2.0m"; return "2.0m";
default: default:
return "None"; return I18nUtil.resolveKey("item.missile.part.size.none");
} }
} }
public String getWarhead(WarheadType type) { public String getWarhead(WarheadType type) {
if(type.labelCustom != null) return type.labelCustom; if(type.labelCustom != null) return type.labelCustom;
switch(type) { switch(type) {
case HE: case HE:
return EnumChatFormatting.YELLOW + "HE"; return EnumChatFormatting.YELLOW + I18nUtil.resolveKey("item.warhead.desc.he");
case INC: case INC:
return EnumChatFormatting.GOLD + "Incendiary"; return EnumChatFormatting.GOLD + I18nUtil.resolveKey("item.warhead.desc.incendiary");
case CLUSTER: case CLUSTER:
return EnumChatFormatting.GRAY + "Cluster"; return EnumChatFormatting.GRAY + I18nUtil.resolveKey("item.warhead.desc.cluster");
case BUSTER: case BUSTER:
return EnumChatFormatting.WHITE + "Bunker Buster"; return EnumChatFormatting.WHITE + I18nUtil.resolveKey("item.warhead.desc.bunker_buster");
case NUCLEAR: case NUCLEAR:
return EnumChatFormatting.DARK_GREEN + "Nuclear"; return EnumChatFormatting.DARK_GREEN + I18nUtil.resolveKey("item.warhead.desc.nuclear");
case TX: case TX:
return EnumChatFormatting.DARK_PURPLE + "Thermonuclear (TX)"; return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("item.warhead.desc.thermonuclear");
case N2: case N2:
return EnumChatFormatting.RED + ""; return EnumChatFormatting.RED + I18nUtil.resolveKey("item.warhead.desc.n2");
case BALEFIRE: case BALEFIRE:
return EnumChatFormatting.GREEN + "BF"; return EnumChatFormatting.GREEN + I18nUtil.resolveKey("item.warhead.desc.balefire");
case SCHRAB: case SCHRAB:
return EnumChatFormatting.AQUA + "Schrabidium"; return EnumChatFormatting.AQUA + I18nUtil.resolveKey("item.warhead.desc.schrabidium");
case TAINT: case TAINT:
return EnumChatFormatting.DARK_PURPLE + "Taint"; return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("item.warhead.desc.taint");
case CLOUD: case CLOUD:
return EnumChatFormatting.LIGHT_PURPLE + "Cloud"; return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("item.warhead.desc.cloud");
case TURBINE: case TURBINE:
return (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE) + "Turbine"; return (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE) + I18nUtil.resolveKey("item.warhead.desc.turbine");
default: default:
return EnumChatFormatting.BOLD + "N/A"; return EnumChatFormatting.BOLD + I18nUtil.resolveKey("general.na");
} }
} }
public String getFuel(FuelType type) { public String getFuel(FuelType type) {
switch(type) { switch(type) {
case KEROSENE: case KEROSENE:
return EnumChatFormatting.LIGHT_PURPLE + "Kerosene / Peroxide"; return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("item.missile.fuel.kerosene_peroxide"); // reuse missile fuel keys
case SOLID: case SOLID:
return EnumChatFormatting.GOLD + "Solid Fuel"; return EnumChatFormatting.GOLD + I18nUtil.resolveKey("item.missile.fuel.solid");
case HYDROGEN: case HYDROGEN:
return EnumChatFormatting.DARK_AQUA + "Hydrogen / Oxygen"; return EnumChatFormatting.DARK_AQUA + I18nUtil.resolveKey("item.missile.fuel.ethanol_peroxide"); // closest match
case XENON: case XENON:
return EnumChatFormatting.DARK_PURPLE + "Xenon Gas"; return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("item.missile.fuel.xenon");
case BALEFIRE: case BALEFIRE:
return EnumChatFormatting.GREEN + "BF Rocket Fuel / Peroxide"; return EnumChatFormatting.GREEN + I18nUtil.resolveKey("item.missile.fuel.balefire");
default: default:
return EnumChatFormatting.BOLD + "N/A"; return EnumChatFormatting.BOLD + I18nUtil.resolveKey("general.na");
} }
} }
//am i retarded? //am i retarded?
/* yes */ /* yes */
public ItemCustomMissilePart copy() { public ItemCustomMissilePart copy() {
ItemCustomMissilePart part = new ItemCustomMissilePart(); ItemCustomMissilePart part = new ItemCustomMissilePart();
part.type = this.type; part.type = this.type;
part.top = this.top; part.top = this.top;
@ -320,33 +327,33 @@ public class ItemCustomMissilePart extends Item {
part.attributes = this.attributes; part.attributes = this.attributes;
part.health = this.health; part.health = this.health;
part.setTextureName(this.iconString); part.setTextureName(this.iconString);
return part; return part;
} }
public ItemCustomMissilePart setAuthor(String author) { public ItemCustomMissilePart setAuthor(String author) {
this.author = author; this.author = author;
return this; return this;
} }
public ItemCustomMissilePart setTitle(String title) { public ItemCustomMissilePart setTitle(String title) {
this.title = title; this.title = title;
return this; return this;
} }
public ItemCustomMissilePart setWittyText(String witty) { public ItemCustomMissilePart setWittyText(String witty) {
this.witty = witty; this.witty = witty;
return this; return this;
} }
public ItemCustomMissilePart setHealth(float health) { public ItemCustomMissilePart setHealth(float health) {
this.health = health; this.health = health;
return this; return this;
} }
public ItemCustomMissilePart setRarity(Rarity rarity) { public ItemCustomMissilePart setRarity(Rarity rarity) {
this.rarity = rarity; this.rarity = rarity;
if(this.type == PartType.FUSELAGE) { if(this.type == PartType.FUSELAGE) {
if(this.top == PartSize.SIZE_10) if(this.top == PartSize.SIZE_10)
ItemLootCrate.list10.add(this); ItemLootCrate.list10.add(this);

View File

@ -3,53 +3,57 @@ package com.hbm.items.weapon;
import java.util.List; import java.util.List;
import com.hbm.items.ItemCustomLore; import com.hbm.items.ItemCustomLore;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumChatFormatting;
public class ItemMissile extends ItemCustomLore { public class ItemMissile extends ItemCustomLore {
public final MissileFormFactor formFactor; public final MissileFormFactor formFactor;
public final MissileTier tier; public final MissileTier tier;
public final MissileFuel fuel; public final MissileFuel fuel;
public int fuelCap; public int fuelCap;
public boolean launchable = true; public boolean launchable = true;
public ItemMissile(MissileFormFactor form, MissileTier tier) { public ItemMissile(MissileFormFactor form, MissileTier tier) {
this(form, tier, form.defaultFuel); this(form, tier, form.defaultFuel);
} }
public ItemMissile(MissileFormFactor form, MissileTier tier, MissileFuel fuel) { public ItemMissile(MissileFormFactor form, MissileTier tier, MissileFuel fuel) {
this.formFactor = form; this.formFactor = form;
this.tier = tier; this.tier = tier;
this.fuel = fuel; this.fuel = fuel;
this.setFuelCap(this.fuel.defaultCap); this.setFuelCap(this.fuel.defaultCap);
} }
public ItemMissile notLaunchable() { public ItemMissile notLaunchable() {
this.launchable = false; this.launchable = false;
return this; return this;
} }
public ItemMissile setFuelCap(int fuelCap) { public ItemMissile setFuelCap(int fuelCap) {
this.fuelCap = fuelCap; this.fuelCap = fuelCap;
return this; return this;
} }
@Override @Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
list.add(EnumChatFormatting.ITALIC + this.tier.display); // Tier localized: missile.tier.tier0, missile.tier.tier1, ...
String tierKey = "item.missile.tier." + this.tier.name().toLowerCase();
list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey(tierKey));
if(!this.launchable) { if(!this.launchable) {
list.add(EnumChatFormatting.RED + "Not launchable!"); list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("item.missile.desc.notLaunchable"));
} else { } else {
list.add("Fuel: " + this.fuel.display); // Fuel localized & colored via enum helper
if(this.fuelCap > 0) list.add("Fuel capacity: " + this.fuelCap + "mB"); list.add(I18nUtil.resolveKey("item.missile.desc.fuel") + ": " + this.fuel.getDisplay());
if(this.fuelCap > 0) list.add(I18nUtil.resolveKey("item.missile.desc.fuelCapacity") + ": " + this.fuelCap + "mB");
super.addInformation(itemstack, player, list, bool); super.addInformation(itemstack, player, list, bool);
} }
} }
public enum MissileFormFactor { public enum MissileFormFactor {
ABM(MissileFuel.SOLID), ABM(MissileFuel.SOLID),
MICRO(MissileFuel.SOLID), MICRO(MissileFuel.SOLID),
@ -58,41 +62,48 @@ public class ItemMissile extends ItemCustomLore {
HUGE(MissileFuel.KEROSENE_LOXY), HUGE(MissileFuel.KEROSENE_LOXY),
ATLAS(MissileFuel.JETFUEL_LOXY), ATLAS(MissileFuel.JETFUEL_LOXY),
OTHER(MissileFuel.KEROSENE_PEROXIDE); OTHER(MissileFuel.KEROSENE_PEROXIDE);
protected MissileFuel defaultFuel; protected MissileFuel defaultFuel;
private MissileFormFactor(MissileFuel defaultFuel) { private MissileFormFactor(MissileFuel defaultFuel) {
this.defaultFuel = defaultFuel; this.defaultFuel = defaultFuel;
} }
} }
public enum MissileTier { public enum MissileTier {
TIER0("Tier 0"), TIER0("Tier 0"),
TIER1("Tier 1"), TIER1("Tier 1"),
TIER2("Tier 2"), TIER2("Tier 2"),
TIER3("Tier 3"), TIER3("Tier 3"),
TIER4("Tier 4"); TIER4("Tier 4");
public String display; public String display;
private MissileTier(String display) { private MissileTier(String display) {
this.display = display; this.display = display;
} }
} }
public enum MissileFuel { public enum MissileFuel {
SOLID(EnumChatFormatting.GOLD + "Solid Fuel (pre-fueled)", 0), SOLID("item.missile.fuel.solid.prefueled", EnumChatFormatting.GOLD, 0),
ETHANOL_PEROXIDE(EnumChatFormatting.AQUA + "Ethanol / Hydrogen Peroxide", 4_000), ETHANOL_PEROXIDE("item.missile.fuel.ethanol_peroxide", EnumChatFormatting.AQUA, 4_000),
KEROSENE_PEROXIDE(EnumChatFormatting.BLUE + "Kerosene / Hydrogen Peroxide", 8_000), KEROSENE_PEROXIDE("item.missile.fuel.kerosene_peroxide", EnumChatFormatting.BLUE, 8_000),
KEROSENE_LOXY(EnumChatFormatting.LIGHT_PURPLE + "Kerosene / Liquid Oxygen", 12_000), KEROSENE_LOXY("item.missile.fuel.kerosene_loxy", EnumChatFormatting.LIGHT_PURPLE, 12_000),
JETFUEL_LOXY(EnumChatFormatting.RED + "Jet Fuel / Liquid Oxygen", 16_000); JETFUEL_LOXY("item.missile.fuel.jetfuel_loxy", EnumChatFormatting.RED, 16_000);
public String display; private final String key;
public int defaultCap; public final EnumChatFormatting color;
public final int defaultCap;
private MissileFuel(String display, int defaultCap) {
this.display = display; private MissileFuel(String key, EnumChatFormatting color, int defaultCap) {
this.key = key;
this.color = color;
this.defaultCap = defaultCap; this.defaultCap = defaultCap;
} }
/** Returns a color localized string for display */
public String getDisplay() {
return color + I18nUtil.resolveKey(this.key);
}
} }
} }

View File

@ -29,6 +29,7 @@ import com.hbm.render.util.RenderScreenOverlay;
import com.hbm.sound.AudioWrapper; import com.hbm.sound.AudioWrapper;
import com.hbm.util.BobMathUtil; import com.hbm.util.BobMathUtil;
import com.hbm.util.EnumUtil; import com.hbm.util.EnumUtil;
import com.hbm.util.i18n.I18nUtil;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -55,10 +56,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
public long[] lastShot; public long[] lastShot;
/** [0;1] randomized every shot for various rendering applications */ /** [0;1] randomized every shot for various rendering applications */
public double shotRand = 0D; public double shotRand = 0D;
public static List<Item> secrets = new ArrayList(); public static List<Item> secrets = new ArrayList();
public List<ComparableStack> recognizedMods = new ArrayList(); public List<ComparableStack> recognizedMods = new ArrayList();
public static final DecimalFormatSymbols SYMBOLS_US = new DecimalFormatSymbols(Locale.US); public static final DecimalFormatSymbols SYMBOLS_US = new DecimalFormatSymbols(Locale.US);
public static final DecimalFormat FORMAT_DMG = new DecimalFormat("#.##", SYMBOLS_US); public static final DecimalFormat FORMAT_DMG = new DecimalFormat("#.##", SYMBOLS_US);
@ -68,20 +69,20 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
public static float recoilRebound = 0.25F; public static float recoilRebound = 0.25F;
public static float offsetVertical = 0; public static float offsetVertical = 0;
public static float offsetHorizontal = 0; public static float offsetHorizontal = 0;
public static void setupRecoil(float vertical, float horizontal, float decay, float rebound) { public static void setupRecoil(float vertical, float horizontal, float decay, float rebound) {
recoilVertical += vertical; recoilVertical += vertical;
recoilHorizontal += horizontal; recoilHorizontal += horizontal;
recoilDecay = decay; recoilDecay = decay;
recoilRebound = rebound; recoilRebound = rebound;
} }
public static void setupRecoil(float vertical, float horizontal) { public static void setupRecoil(float vertical, float horizontal) {
setupRecoil(vertical, horizontal, 0.75F, 0.25F); setupRecoil(vertical, horizontal, 0.75F, 0.25F);
} }
public static final String O_GUNCONFIG = "O_GUNCONFIG_"; public static final String O_GUNCONFIG = "O_GUNCONFIG_";
public static final String KEY_DRAWN = "drawn"; public static final String KEY_DRAWN = "drawn";
public static final String KEY_AIMING = "aiming"; public static final String KEY_AIMING = "aiming";
public static final String KEY_MODE = "mode_"; public static final String KEY_MODE = "mode_";
@ -98,28 +99,28 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
public static final String KEY_LOCKEDON = "lockedon"; public static final String KEY_LOCKEDON = "lockedon";
public static final String KEY_CANCELRELOAD = "cancel"; public static final String KEY_CANCELRELOAD = "cancel";
public static final String KEY_EQUIPPED = "eqipped"; public static final String KEY_EQUIPPED = "eqipped";
public static ConcurrentHashMap<EntityLivingBase, AudioWrapper> loopedSounds = new ConcurrentHashMap(); public static ConcurrentHashMap<EntityLivingBase, AudioWrapper> loopedSounds = new ConcurrentHashMap();
public static float prevAimingProgress; public static float prevAimingProgress;
public static float aimingProgress; public static float aimingProgress;
/** NEVER ACCESS DIRECTLY - USE GETTER */ /** NEVER ACCESS DIRECTLY - USE GETTER */
protected GunConfig[] configs_DNA; protected GunConfig[] configs_DNA;
public Function<ItemStack, String> LAMBDA_NAME_MUTATOR; public Function<ItemStack, String> LAMBDA_NAME_MUTATOR;
public WeaponQuality quality; public WeaponQuality quality;
public GunConfig getConfig(ItemStack stack, int index) { public GunConfig getConfig(ItemStack stack, int index) {
GunConfig cfg = configs_DNA[index]; GunConfig cfg = configs_DNA[index];
if(stack == null) return cfg; if(stack == null) return cfg;
return WeaponModManager.eval(cfg, stack, O_GUNCONFIG + index, this, index); return WeaponModManager.eval(cfg, stack, O_GUNCONFIG + index, this, index);
} }
public int getConfigCount() { public int getConfigCount() {
return configs_DNA.length; return configs_DNA.length;
} }
public ItemGunBaseNT(WeaponQuality quality, GunConfig... cfg) { public ItemGunBaseNT(WeaponQuality quality, GunConfig... cfg) {
this.setMaxStackSize(1); this.setMaxStackSize(1);
this.configs_DNA = cfg; this.configs_DNA = cfg;
@ -130,7 +131,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
if(quality == WeaponQuality.LEGENDARY || quality == WeaponQuality.SECRET) this.secrets.add(this); if(quality == WeaponQuality.LEGENDARY || quality == WeaponQuality.SECRET) this.secrets.add(this);
this.setTextureName(RefStrings.MODID + ":gun_darter"); this.setTextureName(RefStrings.MODID + ":gun_darter");
} }
public static enum WeaponQuality { public static enum WeaponQuality {
A_SIDE, A_SIDE,
B_SIDE, B_SIDE,
@ -148,73 +149,73 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
RELOADING, //forced delay after which a reload action happens, may be canceled (TBI) RELOADING, //forced delay after which a reload action happens, may be canceled (TBI)
JAMMED, //forced delay due to jamming JAMMED, //forced delay due to jamming
} }
public ItemGunBaseNT setNameMutator(Function<ItemStack, String> lambda) { public ItemGunBaseNT setNameMutator(Function<ItemStack, String> lambda) {
this.LAMBDA_NAME_MUTATOR = lambda; this.LAMBDA_NAME_MUTATOR = lambda;
return this; return this;
} }
public String getItemStackDisplayName(ItemStack stack) { public String getItemStackDisplayName(ItemStack stack) {
if(this.LAMBDA_NAME_MUTATOR != null) { if(this.LAMBDA_NAME_MUTATOR != null) {
String unloc = this.LAMBDA_NAME_MUTATOR.apply(stack); String unloc = this.LAMBDA_NAME_MUTATOR.apply(stack);
if(unloc != null) return (StatCollector.translateToLocal(unloc + ".name")).trim(); if(unloc != null) return (StatCollector.translateToLocal(unloc + ".name")).trim();
} }
return super.getItemStackDisplayName(stack); return super.getItemStackDisplayName(stack);
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
int configs = this.configs_DNA.length; int configs = this.configs_DNA.length;
for(int i = 0; i < configs; i++) { for(int i = 0; i < configs; i++) {
GunConfig config = getConfig(stack, i); GunConfig config = getConfig(stack, i);
for(Receiver rec : config.getReceivers(stack)) { for(Receiver rec : config.getReceivers(stack)) {
IMagazine mag = rec.getMagazine(stack); IMagazine mag = rec.getMagazine(stack);
list.add("Ammo: " + mag.getIconForHUD(stack, player).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack, player)); list.add(I18nUtil.resolveKey("gui.weapon.ammo") + ": " + mag.getIconForHUD(stack, player).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack, player));
float dmg = rec.getBaseDamage(stack); float dmg = rec.getBaseDamage(stack);
list.add("Base Damage: " + FORMAT_DMG.format(dmg)); list.add(I18nUtil.resolveKey("gui.weapon.baseDamage") + ": " + FORMAT_DMG.format(dmg));
if(mag.getType(stack, player.inventory) instanceof BulletConfig) { if(mag.getType(stack, player.inventory) instanceof BulletConfig) {
BulletConfig bullet = (BulletConfig) mag.getType(stack, player.inventory); BulletConfig bullet = (BulletConfig) mag.getType(stack, player.inventory);
int min = (int) (bullet.projectilesMin * rec.getSplitProjectiles(stack)); int min = (int) (bullet.projectilesMin * rec.getSplitProjectiles(stack));
int max = (int) (bullet.projectilesMax * rec.getSplitProjectiles(stack)); int max = (int) (bullet.projectilesMax * rec.getSplitProjectiles(stack));
list.add("Damage with current ammo: " + FORMAT_DMG.format(dmg * bullet.damageMult) + (min > 1 ? (" x" + (min != max ? (min + "-" + max) : min)) : "")); list.add(I18nUtil.resolveKey("gui.weapon.damageWithAmmo") + ": " + FORMAT_DMG.format(dmg * bullet.damageMult) + (min > 1 ? (" x" + (min != max ? (min + "-" + max) : min)) : ""));
} }
} }
float maxDura = config.getDurability(stack); float maxDura = config.getDurability(stack);
if(maxDura > 0) { if(maxDura > 0) {
int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100); int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100);
list.add("Condition: " + dura + "%"); list.add(I18nUtil.resolveKey("gui.weapon.condition") + ": " + dura + "%");
} }
for(ItemStack upgrade : WeaponModManager.getUpgradeItems(stack, i)) { for(ItemStack upgrade : WeaponModManager.getUpgradeItems(stack, i)) {
list.add(EnumChatFormatting.YELLOW + upgrade.getDisplayName()); list.add(EnumChatFormatting.YELLOW + upgrade.getDisplayName());
} }
} }
switch(this.quality) { switch(this.quality) {
case A_SIDE: list.add(EnumChatFormatting.YELLOW + "Standard Arsenal"); break; case A_SIDE: list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.weapon.quality.aside")); break;
case B_SIDE: list.add(EnumChatFormatting.GOLD + "B-Side"); break; case B_SIDE: list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("gui.weapon.quality.bside")); break;
case LEGENDARY: list.add(EnumChatFormatting.RED + "Legendary Weapon"); break; case LEGENDARY: list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.weapon.quality.legendary")); break;
case SPECIAL: list.add(EnumChatFormatting.AQUA + "Special Weapon"); break; case SPECIAL: list.add(EnumChatFormatting.AQUA + I18nUtil.resolveKey("gui.weapon.quality.special")); break;
case UTILITY: list.add(EnumChatFormatting.GREEN + "Utility"); break; case UTILITY: list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("gui.weapon.quality.utility")); break;
case SECRET: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.DARK_RED : EnumChatFormatting.RED) + "SECRET"); break; case SECRET: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.DARK_RED : EnumChatFormatting.RED) + I18nUtil.resolveKey("gui.weapon.quality.secret")); break;
case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + "DEBUG"); break; case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + I18nUtil.resolveKey("gui.weapon.quality.debug")); break;
} }
if(Minecraft.getMinecraft().currentScreen instanceof GUIWeaponTable && !this.recognizedMods.isEmpty()) { if(Minecraft.getMinecraft().currentScreen instanceof GUIWeaponTable && !this.recognizedMods.isEmpty()) {
list.add(EnumChatFormatting.RED + "Accepts:"); list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.weapon.accepts" + ":"));
for(ComparableStack comp : this.recognizedMods) list.add(EnumChatFormatting.RED + " " + comp.toStack().getDisplayName()); for(ComparableStack comp : this.recognizedMods) list.add(EnumChatFormatting.RED + " " + comp.toStack().getDisplayName());
} }
} }
@Override @Override
public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind) { public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind) {
return keybind == EnumKeybind.GUN_PRIMARY || keybind == EnumKeybind.GUN_SECONDARY || keybind == EnumKeybind.GUN_TERTIARY || keybind == EnumKeybind.RELOAD; return keybind == EnumKeybind.GUN_PRIMARY || keybind == EnumKeybind.GUN_SECONDARY || keybind == EnumKeybind.GUN_TERTIARY || keybind == EnumKeybind.RELOAD;
} }
@Override @Override
public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean newState) { public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean newState) {
handleKeybind(player, player.inventory, stack, keybind, newState); handleKeybind(player, player.inventory, stack, keybind, newState);
@ -222,13 +223,13 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
public void handleKeybind(EntityLivingBase entity, IInventory inventory, ItemStack stack, EnumKeybind keybind, boolean newState) { public void handleKeybind(EntityLivingBase entity, IInventory inventory, ItemStack stack, EnumKeybind keybind, boolean newState) {
if(!GeneralConfig.enableGuns) return; if(!GeneralConfig.enableGuns) return;
int configs = this.configs_DNA.length; int configs = this.configs_DNA.length;
for(int i = 0; i < configs; i++) { for(int i = 0; i < configs; i++) {
GunConfig config = getConfig(stack, i); GunConfig config = getConfig(stack, i);
LambdaContext ctx = new LambdaContext(config, entity, inventory, i); LambdaContext ctx = new LambdaContext(config, entity, inventory, i);
if(keybind == EnumKeybind.GUN_PRIMARY && newState && !getPrimary(stack, i)) { if(config.getPressPrimary(stack) != null) config.getPressPrimary(stack).accept(stack, ctx); this.setPrimary(stack, i, newState); continue; } if(keybind == EnumKeybind.GUN_PRIMARY && newState && !getPrimary(stack, i)) { if(config.getPressPrimary(stack) != null) config.getPressPrimary(stack).accept(stack, ctx); this.setPrimary(stack, i, newState); continue; }
if(keybind == EnumKeybind.GUN_PRIMARY && !newState && getPrimary(stack, i)) { if(config.getReleasePrimary(stack) != null) config.getReleasePrimary(stack).accept(stack, ctx); this.setPrimary(stack, i, newState); continue; } if(keybind == EnumKeybind.GUN_PRIMARY && !newState && getPrimary(stack, i)) { if(config.getReleasePrimary(stack) != null) config.getReleasePrimary(stack).accept(stack, ctx); this.setPrimary(stack, i, newState); continue; }
if(keybind == EnumKeybind.GUN_SECONDARY && newState && !getSecondary(stack, i)) { if(config.getPressSecondary(stack) != null) config.getPressSecondary(stack).accept(stack, ctx); this.setSecondary(stack, i, newState); continue; } if(keybind == EnumKeybind.GUN_SECONDARY && newState && !getSecondary(stack, i)) { if(config.getPressSecondary(stack) != null) config.getPressSecondary(stack).accept(stack, ctx); this.setSecondary(stack, i, newState); continue; }
@ -243,7 +244,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
@Override @Override
public void onEquip(EntityPlayer player, ItemStack stack) { public void onEquip(EntityPlayer player, ItemStack stack) {
for(int i = 0; i < this.configs_DNA.length; i++) { for(int i = 0; i < this.configs_DNA.length; i++) {
if(this.getLastAnim(stack, i) == AnimType.EQUIP && this.getAnimTimer(stack, i) < 5) continue; if(this.getLastAnim(stack, i) == AnimType.EQUIP && this.getAnimTimer(stack, i) < 5) continue;
playAnimation(player, stack, AnimType.EQUIP, i); playAnimation(player, stack, AnimType.EQUIP, i);
this.setPrimary(stack, i, false); this.setPrimary(stack, i, false);
this.setSecondary(stack, i, false); this.setSecondary(stack, i, false);
@ -251,7 +252,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
this.setReloadKey(stack, i, false); this.setReloadKey(stack, i, false);
} }
} }
public static void playAnimation(EntityPlayer player, ItemStack stack, AnimType type, int index) { public static void playAnimation(EntityPlayer player, ItemStack stack, AnimType type, int index) {
if(player instanceof EntityPlayerMP) { if(player instanceof EntityPlayerMP) {
PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(type.ordinal(), 0, index), (EntityPlayerMP) player); PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(type.ordinal(), 0, index), (EntityPlayerMP) player);
@ -262,7 +263,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
@Override @Override
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isHeld) { public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isHeld) {
if(!(entity instanceof EntityLivingBase)) return; if(!(entity instanceof EntityLivingBase)) return;
EntityPlayer player = entity instanceof EntityPlayer ? (EntityPlayer) entity : null; EntityPlayer player = entity instanceof EntityPlayer ? (EntityPlayer) entity : null;
int confNo = this.configs_DNA.length; int confNo = this.configs_DNA.length;
@ -272,17 +273,17 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
configs[i] = this.getConfig(stack, i); configs[i] = this.getConfig(stack, i);
ctx[i] = new LambdaContext(configs[i], (EntityLivingBase) entity, player != null ? player.inventory : null, i); ctx[i] = new LambdaContext(configs[i], (EntityLivingBase) entity, player != null ? player.inventory : null, i);
} }
if(world.isRemote) { if(world.isRemote) {
if(isHeld && player == MainRegistry.proxy.me()) { if(isHeld && player == MainRegistry.proxy.me()) {
/// DEBUG /// /// DEBUG ///
/*Vec3 offset = Vec3.createVectorHelper(-0.2, -0.1, 0.75); /*Vec3 offset = Vec3.createVectorHelper(-0.2, -0.1, 0.75);
offset.rotateAroundX(-entity.rotationPitch / 180F * (float) Math.PI); offset.rotateAroundX(-entity.rotationPitch / 180F * (float) Math.PI);
offset.rotateAroundY(-entity.rotationYaw / 180F * (float) Math.PI); offset.rotateAroundY(-entity.rotationYaw / 180F * (float) Math.PI);
world.spawnParticle("flame", entity.posX + offset.xCoord, entity.posY + entity.getEyeHeight() + offset.yCoord, entity.posZ + offset.zCoord, 0, 0, 0);*/ world.spawnParticle("flame", entity.posX + offset.xCoord, entity.posY + entity.getEyeHeight() + offset.yCoord, entity.posZ + offset.zCoord, 0, 0, 0);*/
/// AIMING /// /// AIMING ///
prevAimingProgress = aimingProgress; prevAimingProgress = aimingProgress;
boolean aiming = this.getIsAiming(stack); boolean aiming = this.getIsAiming(stack);
@ -290,12 +291,12 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
if(aiming && aimingProgress < 1F) aimingProgress += aimSpeed; if(aiming && aimingProgress < 1F) aimingProgress += aimSpeed;
if(!aiming && aimingProgress > 0F) aimingProgress -= aimSpeed; if(!aiming && aimingProgress > 0F) aimingProgress -= aimSpeed;
aimingProgress = MathHelper.clamp_float(aimingProgress, 0F, 1F); aimingProgress = MathHelper.clamp_float(aimingProgress, 0F, 1F);
/// SMOKE NODES /// /// SMOKE NODES ///
for(int i = 0; i < confNo; i++) if(configs[i].getSmokeHandler(stack) != null) { for(int i = 0; i < confNo; i++) if(configs[i].getSmokeHandler(stack) != null) {
configs[i].getSmokeHandler(stack).accept(stack, ctx[i]); configs[i].getSmokeHandler(stack).accept(stack, ctx[i]);
} }
for(int i = 0; i < confNo; i++) { for(int i = 0; i < confNo; i++) {
BiConsumer<ItemStack, LambdaContext> orchestra = configs[i].getOrchestra(stack); BiConsumer<ItemStack, LambdaContext> orchestra = configs[i].getOrchestra(stack);
if(orchestra != null) orchestra.accept(stack, ctx[i]); if(orchestra != null) orchestra.accept(stack, ctx[i]);
@ -303,18 +304,18 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
} }
return; return;
} }
/// ON EQUIP /// /// ON EQUIP ///
if(player != null) { if(player != null) {
boolean wasHeld = this.getIsEquipped(stack); boolean wasHeld = this.getIsEquipped(stack);
if(!wasHeld && isHeld && player != null) { if(!wasHeld && isHeld && player != null) {
this.onEquip(player, stack); this.onEquip(player, stack);
} }
} }
this.setIsEquipped(stack, isHeld); this.setIsEquipped(stack, isHeld);
/// RESET WHEN NOT EQUIPPED /// /// RESET WHEN NOT EQUIPPED ///
if(!isHeld) { if(!isHeld) {
for(int i = 0; i < confNo; i++) { for(int i = 0; i < confNo; i++) {
@ -329,13 +330,13 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
this.setReloadCancel(stack, false); this.setReloadCancel(stack, false);
return; return;
} }
for(int i = 0; i < confNo; i++) for(int k = 0; k == 0 || (k < 2 && ArmorTrenchmaster.isTrenchMaster(player) && this.getState(stack, i) == GunState.RELOADING); k++) { for(int i = 0; i < confNo; i++) for(int k = 0; k == 0 || (k < 2 && ArmorTrenchmaster.isTrenchMaster(player) && this.getState(stack, i) == GunState.RELOADING); k++) {
BiConsumer<ItemStack, LambdaContext> orchestra = configs[i].getOrchestra(stack); BiConsumer<ItemStack, LambdaContext> orchestra = configs[i].getOrchestra(stack);
if(orchestra != null) orchestra.accept(stack, ctx[i]); if(orchestra != null) orchestra.accept(stack, ctx[i]);
setAnimTimer(stack, i, getAnimTimer(stack, i) + 1); setAnimTimer(stack, i, getAnimTimer(stack, i) + 1);
/// STTATE MACHINE /// /// STTATE MACHINE ///
int timer = this.getTimer(stack, i); int timer = this.getTimer(stack, i);
if(timer > 0) this.setTimer(stack, i, timer - 1); if(timer > 0) this.setTimer(stack, i, timer - 1);
@ -371,7 +372,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
public static void setLastAnim(ItemStack stack, int index, AnimType value) { setValueInt(stack, KEY_LASTANIM + index, value.ordinal()); } public static void setLastAnim(ItemStack stack, int index, AnimType value) { setValueInt(stack, KEY_LASTANIM + index, value.ordinal()); }
public static int getAnimTimer(ItemStack stack, int index) { return getValueInt(stack, KEY_ANIMTIMER + index); } public static int getAnimTimer(ItemStack stack, int index) { return getValueInt(stack, KEY_ANIMTIMER + index); }
public static void setAnimTimer(ItemStack stack, int index, int value) { setValueInt(stack, KEY_ANIMTIMER + index, value); } public static void setAnimTimer(ItemStack stack, int index, int value) { setValueInt(stack, KEY_ANIMTIMER + index, value); }
// BUTTON STATES // // BUTTON STATES //
public static boolean getPrimary(ItemStack stack, int index) { return getValueBool(stack, KEY_PRIMARY + index); } public static boolean getPrimary(ItemStack stack, int index) { return getValueBool(stack, KEY_PRIMARY + index); }
public static void setPrimary(ItemStack stack, int index, boolean value) { setValueBool(stack, KEY_PRIMARY + index, value); } public static void setPrimary(ItemStack stack, int index, boolean value) { setValueBool(stack, KEY_PRIMARY + index, value); }
@ -387,28 +388,28 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
// EQUIPPED // // EQUIPPED //
public static boolean getIsEquipped(ItemStack stack) { return getValueBool(stack, KEY_EQUIPPED); } public static boolean getIsEquipped(ItemStack stack) { return getValueBool(stack, KEY_EQUIPPED); }
public static void setIsEquipped(ItemStack stack, boolean value) { setValueBool(stack, KEY_EQUIPPED, value); } public static void setIsEquipped(ItemStack stack, boolean value) { setValueBool(stack, KEY_EQUIPPED, value); }
/// UTIL /// /// UTIL ///
public static int getValueInt(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getInteger(name); return 0; } public static int getValueInt(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getInteger(name); return 0; }
public static void setValueInt(ItemStack stack, String name, int value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setInteger(name, value); } public static void setValueInt(ItemStack stack, String name, int value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setInteger(name, value); }
public static float getValueFloat(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getFloat(name); return 0; } public static float getValueFloat(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getFloat(name); return 0; }
public static void setValueFloat(ItemStack stack, String name, float value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setFloat(name, value); } public static void setValueFloat(ItemStack stack, String name, float value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setFloat(name, value); }
public static byte getValueByte(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getByte(name); return 0; } public static byte getValueByte(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getByte(name); return 0; }
public static void setValueByte(ItemStack stack, String name, byte value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setByte(name, value); } public static void setValueByte(ItemStack stack, String name, byte value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setByte(name, value); }
public static boolean getValueBool(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getBoolean(name); return false; } public static boolean getValueBool(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getBoolean(name); return false; }
public static void setValueBool(ItemStack stack, String name, boolean value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setBoolean(name, value); } public static void setValueBool(ItemStack stack, String name, boolean value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setBoolean(name, value); }
/** Wrapper for extra context used in most Consumer lambdas which are part of the guncfg */ /** Wrapper for extra context used in most Consumer lambdas which are part of the guncfg */
public static class LambdaContext { public static class LambdaContext {
public final GunConfig config; public final GunConfig config;
public final EntityLivingBase entity; public final EntityLivingBase entity;
public final IInventory inventory; public final IInventory inventory;
public final int configIndex; public final int configIndex;
public LambdaContext(GunConfig config, EntityLivingBase player, IInventory inventory, int configIndex) { public LambdaContext(GunConfig config, EntityLivingBase player, IInventory inventory, int configIndex) {
this.config = config; this.config = config;
this.entity = player; this.entity = player;
@ -425,42 +426,42 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) { public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) {
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
if(type == ElementType.CROSSHAIRS) { if(type == ElementType.CROSSHAIRS) {
event.setCanceled(true); event.setCanceled(true);
GunConfig config = gun.getConfig(stack, 0); GunConfig config = gun.getConfig(stack, 0);
if(config.getHideCrosshair(stack) && aimingProgress >= 1F) return; if(config.getHideCrosshair(stack) && aimingProgress >= 1F) return;
RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, config.getCrosshair(stack)); RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, config.getCrosshair(stack));
} }
int confNo = this.configs_DNA.length; int confNo = this.configs_DNA.length;
for(int i = 0; i < confNo; i++) { for(int i = 0; i < confNo; i++) {
IHUDComponent[] components = gun.getConfig(stack, i).getHUDComponents(stack); IHUDComponent[] components = gun.getConfig(stack, i).getHUDComponents(stack);
if(components != null) for(IHUDComponent component : components) { if(components != null) for(IHUDComponent component : components) {
int bottomOffset = 0; int bottomOffset = 0;
component.renderHUDComponent(event, type, player, stack, bottomOffset, i); component.renderHUDComponent(event, type, player, stack, bottomOffset, i);
bottomOffset += component.getComponentHeight(player, stack); bottomOffset += component.getComponentHeight(player, stack);
} }
} }
Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons); Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons);
} }
/*@Override /*@Override
public boolean getShareTag() { return false; }*/ // nbt sync dupe fix, didn't work public boolean getShareTag() { return false; }*/ // nbt sync dupe fix, didn't work
public static class SmokeNode { public static class SmokeNode {
public double forward = 0D; public double forward = 0D;
public double side = 0D; public double side = 0D;
public double lift = 0D; public double lift = 0D;
public double alpha; public double alpha;
public double width = 1D; public double width = 1D;
public SmokeNode(double alpha) { this.alpha = alpha; } public SmokeNode(double alpha) { this.alpha = alpha; }
} }
} }

View File

@ -665,6 +665,7 @@ public class MainRegistry {
event.registerServerCommand(new CommandPacketInfo()); event.registerServerCommand(new CommandPacketInfo());
event.registerServerCommand(new CommandReloadServer()); event.registerServerCommand(new CommandReloadServer());
event.registerServerCommand(new CommandLocate()); event.registerServerCommand(new CommandLocate());
event.registerServerCommand(new CommandCustomize());
ArcFurnaceRecipes.registerFurnaceSmeltables(); // because we have to wait for other mods to take their merry ass time to register recipes ArcFurnaceRecipes.registerFurnaceSmeltables(); // because we have to wait for other mods to take their merry ass time to register recipes
} }

View File

@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation;
public class GuiQMAW extends GuiScreen { public class GuiQMAW extends GuiScreen {
protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_wiki.png"); protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_wiki.png");
public String title; public String title;
public String qmawID; public String qmawID;
public ItemStack icon; public ItemStack icon;
@ -31,51 +31,51 @@ public class GuiQMAW extends GuiScreen {
/** History for returning via button */ /** History for returning via button */
public List<String> back = new ArrayList(); public List<String> back = new ArrayList();
public List<String> forward = new ArrayList(); public List<String> forward = new ArrayList();
protected int xSize = 340; protected int xSize = 340;
protected int ySize = 224; protected int ySize = 224;
protected int guiLeft; protected int guiLeft;
protected int guiTop; protected int guiTop;
protected boolean isDragging = false; protected boolean isDragging = false;
protected int scrollProgress = 0; protected int scrollProgress = 0;
protected int lastClickX = 0; protected int lastClickX = 0;
protected int lastClickY = 0; protected int lastClickY = 0;
public static final String EN_US = "en_US"; public static final String EN_US = "en_US";
public GuiQMAW(QuickManualAndWiki qmaw) { public GuiQMAW(QuickManualAndWiki qmaw) {
qmawID = qmaw.name; qmawID = qmaw.name;
parseQMAW(qmaw); parseQMAW(qmaw);
} }
protected void parseQMAW(QuickManualAndWiki qmaw) { protected void parseQMAW(QuickManualAndWiki qmaw) {
LanguageManager lang = Minecraft.getMinecraft().getLanguageManager(); LanguageManager lang = Minecraft.getMinecraft().getLanguageManager();
this.title = qmaw.title.get(lang.getCurrentLanguage()); this.title = qmaw.title.get(lang.getCurrentLanguage().getLanguageCode());
if(title == null) this.title = qmaw.title.get(EN_US); if(title == null) this.title = qmaw.title.get(EN_US);
if(title == null) this.title = "Missing Localization!"; if(title == null) this.title = "Missing Localization!";
this.icon = qmaw.icon; this.icon = qmaw.icon;
String toParse = qmaw.contents.get(lang.getCurrentLanguage()); String toParse = qmaw.contents.get(lang.getCurrentLanguage().getLanguageCode());
if(toParse == null) toParse = qmaw.contents.get(EN_US); if(toParse == null) toParse = qmaw.contents.get(EN_US);
if(toParse == null) toParse = "Missing Localization!"; if(toParse == null) toParse = "Missing Localization!";
toParse = "" + toParse; // strings are reference types, no? toParse = "" + toParse; // strings are reference types, no?
int maxLineLength = xSize - 29; int maxLineLength = xSize - 29;
String prevToParse = "" + toParse; String prevToParse = "" + toParse;
int maxIterations = 1000; int maxIterations = 1000;
int currentLineWidth = 0; int currentLineWidth = 0;
while(!toParse.isEmpty() && maxIterations > 0) { while(!toParse.isEmpty() && maxIterations > 0) {
if(this.lines.isEmpty()) this.lines.add(new ArrayList()); if(this.lines.isEmpty()) this.lines.add(new ArrayList());
List<ManualElement> currentLine = this.lines.get(this.lines.size() - 1); List<ManualElement> currentLine = this.lines.get(this.lines.size() - 1);
toParse = toParse.trim(); toParse = toParse.trim();
maxIterations--; maxIterations--;
if(toParse.startsWith("<br>")) { if(toParse.startsWith("<br>")) {
toParse = toParse.substring(4); toParse = toParse.substring(4);
currentLine = new ArrayList(); currentLine = new ArrayList();
@ -83,25 +83,25 @@ public class GuiQMAW extends GuiScreen {
currentLineWidth = 0; currentLineWidth = 0;
continue; continue;
} }
// handle links // handle links
if(toParse.startsWith("[[")) { if(toParse.startsWith("[[")) {
int end = toParse.indexOf("]]"); int end = toParse.indexOf("]]");
if(end != -1) { if(end != -1) {
String link = toParse.substring(2, end); String link = toParse.substring(2, end);
toParse = toParse.substring(end + 2); toParse = toParse.substring(end + 2);
int pipe = link.indexOf("|"); int pipe = link.indexOf("|");
QComponentLink linkComponent; QComponentLink linkComponent;
String suffix = toParse.startsWith(" ") ? " " : ""; String suffix = toParse.startsWith(" ") ? " " : "";
if(pipe == -1) { if(pipe == -1) {
linkComponent = new QComponentLink(link, link + suffix); linkComponent = new QComponentLink(link, link + suffix);
} else { } else {
linkComponent = new QComponentLink(link.substring(pipe + 1, link.length()), link.substring(0, pipe) + suffix); linkComponent = new QComponentLink(link.substring(pipe + 1, link.length()), link.substring(0, pipe) + suffix);
} }
// append to current line // append to current line
int width = linkComponent.getWidth(); int width = linkComponent.getWidth();
if(width + currentLineWidth <= maxLineLength) { if(width + currentLineWidth <= maxLineLength) {
@ -119,21 +119,21 @@ public class GuiQMAW extends GuiScreen {
continue; continue;
} }
} }
// handle standard text // handle standard text
int delimit = toParse.length(); int delimit = toParse.length();
int spaceIndex = toParse.indexOf(" "); int spaceIndex = toParse.indexOf(" ");
if(spaceIndex != -1) delimit = Math.min(delimit, spaceIndex); if(spaceIndex != -1) delimit = Math.min(delimit, spaceIndex);
int linkIndex = toParse.indexOf("[["); int linkIndex = toParse.indexOf("[[");
if(linkIndex != -1) delimit = Math.min(delimit, linkIndex); if(linkIndex != -1) delimit = Math.min(delimit, linkIndex);
int brIndex = toParse.indexOf("<br>"); int brIndex = toParse.indexOf("<br>");
if(brIndex != -1) delimit = Math.min(delimit, brIndex); if(brIndex != -1) delimit = Math.min(delimit, brIndex);
if(delimit > 0) { if(delimit > 0) {
QComponentText textComponent = new QComponentText(toParse.substring(0, delimit) + (spaceIndex == delimit ? " " : "")); QComponentText textComponent = new QComponentText(toParse.substring(0, delimit) + (spaceIndex == delimit ? " " : ""));
toParse = toParse.substring(delimit); toParse = toParse.substring(delimit);
// append to current line // append to current line
int width = textComponent.getWidth(); int width = textComponent.getWidth();
if(width + currentLineWidth <= maxLineLength) { if(width + currentLineWidth <= maxLineLength) {
@ -150,7 +150,7 @@ public class GuiQMAW extends GuiScreen {
prevToParse = "" + toParse; prevToParse = "" + toParse;
continue; continue;
} }
if(toParse.equals(prevToParse)) break; if(toParse.equals(prevToParse)) break;
prevToParse = "" + toParse; prevToParse = "" + toParse;
} }
@ -166,7 +166,7 @@ public class GuiQMAW extends GuiScreen {
@Override @Override
protected void mouseClicked(int x, int y, int key) { protected void mouseClicked(int x, int y, int key) {
super.mouseClicked(x, y, key); super.mouseClicked(x, y, key);
if(key == 0) { if(key == 0) {
this.lastClickX = x; this.lastClickX = x;
this.lastClickY = y; this.lastClickY = y;
@ -175,10 +175,10 @@ public class GuiQMAW extends GuiScreen {
if(guiLeft + 3 <= x && guiLeft + 3 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) back(); if(guiLeft + 3 <= x && guiLeft + 3 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) back();
if(guiLeft + 21 <= x && guiLeft + 21 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) forward(); if(guiLeft + 21 <= x && guiLeft + 21 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) forward();
} }
public void back() { public void back() {
if(this.back.isEmpty()) return; if(this.back.isEmpty()) return;
String prev = back.get(back.size() - 1); String prev = back.get(back.size() - 1);
QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(prev); QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(prev);
@ -192,10 +192,10 @@ public class GuiQMAW extends GuiScreen {
FMLCommonHandler.instance().showGuiScreen(screen); FMLCommonHandler.instance().showGuiScreen(screen);
} }
} }
public void forward() { public void forward() {
if(this.forward.isEmpty()) return; if(this.forward.isEmpty()) return;
String next = forward.get(forward.size() - 1); String next = forward.get(forward.size() - 1);
QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(next); QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(next);
@ -209,7 +209,7 @@ public class GuiQMAW extends GuiScreen {
FMLCommonHandler.instance().showGuiScreen(screen); FMLCommonHandler.instance().showGuiScreen(screen);
} }
} }
public int getSliderPosition() { public int getSliderPosition() {
double progress = (double) scrollProgress / (double) (lines.size() - 1); double progress = (double) scrollProgress / (double) (lines.size() - 1);
return 25 + (int) (progress * 180); return 25 + (int) (progress * 180);
@ -217,38 +217,38 @@ public class GuiQMAW extends GuiScreen {
@Override @Override
public void drawScreen(int mouseX, int mouseY, float f) { public void drawScreen(int mouseX, int mouseY, float f) {
if(Mouse.isButtonDown(0) && guiLeft + xSize - 15 <= mouseX && guiLeft + xSize - 15 + 12 > mouseX && guiTop + 25 < mouseY && guiTop + 25 + 191 >= mouseY) { if(Mouse.isButtonDown(0) && guiLeft + xSize - 15 <= mouseX && guiLeft + xSize - 15 + 12 > mouseX && guiTop + 25 < mouseY && guiTop + 25 + 191 >= mouseY) {
isDragging = true; isDragging = true;
} }
if(!Mouse.isButtonDown(0)) isDragging = false; if(!Mouse.isButtonDown(0)) isDragging = false;
if(isDragging) { if(isDragging) {
int min = guiTop + 25 + 8; int min = guiTop + 25 + 8;
int max = guiTop + 25 + 191 - 8; int max = guiTop + 25 + 191 - 8;
int span = max - min; int span = max - min;
double progress = MathHelper.clamp_double((double) (mouseY - min) / span, 0D, 1D); double progress = MathHelper.clamp_double((double) (mouseY - min) / span, 0D, 1D);
this.scrollProgress = MathHelper.clamp_int((int) Math.round((lines.size() - 1) * progress), 0, lines.size() - 1); this.scrollProgress = MathHelper.clamp_int((int) Math.round((lines.size() - 1) * progress), 0, lines.size() - 1);
} }
handleScroll(); handleScroll();
//this.drawRect(0, 0, this.width, this.height, 0x80919191); //this.drawRect(0, 0, this.width, this.height, 0x80919191);
this.drawRect(0, 0, this.width, this.height, 0xe0000000); this.drawRect(0, 0, this.width, this.height, 0xe0000000);
this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_LIGHTING);
this.drawGuiContainerForegroundLayer(mouseX, mouseY); this.drawGuiContainerForegroundLayer(mouseX, mouseY);
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
this.lastClickX = 0; this.lastClickX = 0;
this.lastClickY = 0; this.lastClickY = 0;
} }
protected void handleScroll() { protected void handleScroll() {
if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) { if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) {
int scroll = Mouse.getEventDWheel(); int scroll = Mouse.getEventDWheel();
if(scroll > 0 && this.scrollProgress > 0) this.scrollProgress--; if(scroll > 0 && this.scrollProgress > 0) this.scrollProgress--;
@ -257,10 +257,10 @@ public class GuiQMAW extends GuiScreen {
} }
private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
int x = 43; int x = 43;
int y = 4; int y = 4;
if(this.icon != null) { if(this.icon != null) {
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_DEPTH_TEST);
@ -273,13 +273,13 @@ public class GuiQMAW extends GuiScreen {
RenderHelper.disableStandardItemLighting(); RenderHelper.disableStandardItemLighting();
GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glPopMatrix(); GL11.glPopMatrix();
x += 18; x += 18;
y += (16 - this.fontRendererObj.FONT_HEIGHT) / 2; y += (16 - this.fontRendererObj.FONT_HEIGHT) / 2;
} }
y += 1; y += 1;
this.fontRendererObj.drawString(title, guiLeft + x, guiTop + y, 0xFFFFFF); this.fontRendererObj.drawString(title, guiLeft + x, guiTop + y, 0xFFFFFF);
} }
@ -292,30 +292,30 @@ public class GuiQMAW extends GuiScreen {
if(!back.isEmpty()) drawTexturedModalRect(guiLeft + 3, guiTop + 3, 204, 0, 18, 18); if(!back.isEmpty()) drawTexturedModalRect(guiLeft + 3, guiTop + 3, 204, 0, 18, 18);
if(!forward.isEmpty()) drawTexturedModalRect(guiLeft + 21, guiTop + 3, 222, 0, 18, 18); if(!forward.isEmpty()) drawTexturedModalRect(guiLeft + 21, guiTop + 3, 222, 0, 18, 18);
// scroll bar // scroll bar
drawTexturedModalRect(guiLeft + xSize - 15, guiTop + getSliderPosition(), 192, 0, 12, 16); drawTexturedModalRect(guiLeft + xSize - 15, guiTop + getSliderPosition(), 192, 0, 12, 16);
int x = guiLeft + 7; int x = guiLeft + 7;
int y = guiTop + 30; int y = guiTop + 30;
int lineNum = 0; int lineNum = 0;
for(List<ManualElement> line : lines) { for(List<ManualElement> line : lines) {
lineNum++; lineNum++;
if(lineNum <= this.scrollProgress) continue; if(lineNum <= this.scrollProgress) continue;
int maxHeight = 0; int maxHeight = 0;
int inset = 0; int inset = 0;
for(ManualElement element : line) { for(ManualElement element : line) {
maxHeight = Math.max(maxHeight, element.getHeight()); maxHeight = Math.max(maxHeight, element.getHeight());
} }
if(y + maxHeight > guiTop + 219) break; if(y + maxHeight > guiTop + 219) break;
if(line.isEmpty()) y += this.fontRendererObj.FONT_HEIGHT; if(line.isEmpty()) y += this.fontRendererObj.FONT_HEIGHT;
for(ManualElement element : line) { for(ManualElement element : line) {
int elementX = x + inset; int elementX = x + inset;
int elementY = y + (maxHeight - element.getHeight()) / 2; int elementY = y + (maxHeight - element.getHeight()) / 2;
@ -325,7 +325,7 @@ public class GuiQMAW extends GuiScreen {
element.onClick(this); element.onClick(this);
inset += element.getWidth(); inset += element.getWidth();
} }
y += maxHeight + 2; y += maxHeight + 2;
} }
} }
@ -335,7 +335,7 @@ public class GuiQMAW extends GuiScreen {
if(keyCode == Keyboard.KEY_LEFT) back(); if(keyCode == Keyboard.KEY_LEFT) back();
if(keyCode == Keyboard.KEY_RIGHT) forward(); if(keyCode == Keyboard.KEY_RIGHT) forward();
if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.displayGuiScreen((GuiScreen) null); this.mc.displayGuiScreen((GuiScreen) null);
this.mc.setIngameFocus(); this.mc.setIngameFocus();

View File

@ -1,9 +1,8 @@
package com.hbm.qmaw; package com.hbm.qmaw;
import java.io.File; import java.io.*;
import java.io.FileReader; import java.nio.charset.StandardCharsets;
import java.io.InputStream; import java.nio.file.Files;
import java.io.InputStreamReader;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -47,7 +46,7 @@ public class QMAWLoader implements IResourceManagerReloadListener {
init(); init();
MainRegistry.logger.info("[QMAW] Loaded " + qmaw.size() + " manual entries! (" + (System.currentTimeMillis() - timestamp) + "ms)"); MainRegistry.logger.info("[QMAW] Loaded " + qmaw.size() + " manual entries! (" + (System.currentTimeMillis() - timestamp) + "ms)");
} }
/** For the like 2 people who might consider making an NTM addon and want to include manual pages. Requires the mod's actual JAR file as the parameter. */ /** For the like 2 people who might consider making an NTM addon and want to include manual pages. Requires the mod's actual JAR file as the parameter. */
public static void registerModFileURL(File file) { public static void registerModFileURL(File file) {
registeredModFiles.add(file); registeredModFiles.add(file);
@ -62,14 +61,14 @@ public class QMAWLoader implements IResourceManagerReloadListener {
// exclude .class in the case of a dev env // exclude .class in the case of a dev env
MainRegistry.logger.info("[QMAW] Current running file: " + path); MainRegistry.logger.info("[QMAW] Current running file: " + path);
if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself*/ // deactivated because it likely doesn't even fucking work if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself*/ // deactivated because it likely doesn't even fucking work
// registering of the mod file now happens in the MainRegistry during preinit // registering of the mod file now happens in the MainRegistry during preinit
qmaw.clear(); qmaw.clear();
triggers.clear(); triggers.clear();
agonyEngine(); agonyEngine();
} }
/** "digital equivalent to holywater" yielded few results on google, if only i had the answer i would drown this entire class in it <br><br> /** "digital equivalent to holywater" yielded few results on google, if only i had the answer i would drown this entire class in it <br><br>
* This affront to god can load QMAW definition files from four different sources:<br> * This affront to god can load QMAW definition files from four different sources:<br>
* * Any mod's jar that has registered itself to include QMAW files<br> * * Any mod's jar that has registered itself to include QMAW files<br>
@ -78,12 +77,12 @@ public class QMAWLoader implements IResourceManagerReloadListener {
* * Folder-based resource packs * * Folder-based resource packs
* */ * */
public static void agonyEngine() { public static void agonyEngine() {
for(File modFile : registeredModFiles) { for(File modFile : registeredModFiles) {
logJarAttempt(modFile.getName()); logJarAttempt(modFile.getName());
dissectZip(modFile); dissectZip(modFile);
} }
File devEnvManualFolder = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath().replace("/eclipse/.".replace('/', File.separatorChar), "") + "/src/main/resources/assets/hbm/manual".replace('/', File.separatorChar)); File devEnvManualFolder = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath().replace("/eclipse/.".replace('/', File.separatorChar), "") + "/src/main/resources/assets/hbm/manual".replace('/', File.separatorChar));
if(devEnvManualFolder.exists() && devEnvManualFolder.isDirectory()) { if(devEnvManualFolder.exists() && devEnvManualFolder.isDirectory()) {
MainRegistry.logger.info("[QMAW] Exploring " + devEnvManualFolder.getAbsolutePath()); MainRegistry.logger.info("[QMAW] Exploring " + devEnvManualFolder.getAbsolutePath());
@ -91,17 +90,17 @@ public class QMAWLoader implements IResourceManagerReloadListener {
} }
ResourcePackRepository repo = Minecraft.getMinecraft().getResourcePackRepository(); ResourcePackRepository repo = Minecraft.getMinecraft().getResourcePackRepository();
for(Object o : repo.getRepositoryEntries()) { for(Object o : repo.getRepositoryEntries()) {
ResourcePackRepository.Entry entry = (ResourcePackRepository.Entry) o; ResourcePackRepository.Entry entry = (ResourcePackRepository.Entry) o;
IResourcePack pack = entry.getResourcePack(); IResourcePack pack = entry.getResourcePack();
logPackAttempt(pack.getPackName()); logPackAttempt(pack.getPackName());
if(pack instanceof FileResourcePack) { if(pack instanceof FileResourcePack) {
dissectZip(((FileResourcePack) pack).resourcePackFile); dissectZip(((FileResourcePack) pack).resourcePackFile);
} }
if(pack instanceof FolderResourcePack) { if(pack instanceof FolderResourcePack) {
dissectFolder(((FolderResourcePack) pack).resourcePackFile); dissectFolder(((FolderResourcePack) pack).resourcePackFile);
} }
@ -111,27 +110,27 @@ public class QMAWLoader implements IResourceManagerReloadListener {
public static void logJarAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting jar " + name); } public static void logJarAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting jar " + name); }
public static void logPackAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting resource " + name); } public static void logPackAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting resource " + name); }
public static void logFoundManual(String name) { MainRegistry.logger.info("[QMAW] Found manual " + name); } public static void logFoundManual(String name) { MainRegistry.logger.info("[QMAW] Found manual " + name); }
/** You put your white gloves on, you get your hand in there, and then you iterate OVER THE ENTIRE FUCKING ZIP until we find things we deem usable */ /** You put your white gloves on, you get your hand in there, and then you iterate OVER THE ENTIRE FUCKING ZIP until we find things we deem usable */
public static void dissectZip(File zipFile) { public static void dissectZip(File zipFile) {
if(zipFile == null) { if(zipFile == null) {
MainRegistry.logger.info("[QMAW] Pack file does not exist!"); MainRegistry.logger.info("[QMAW] Pack file does not exist!");
return; return;
} }
ZipFile zip = null; ZipFile zip = null;
try { try {
zip = new ZipFile(zipFile); zip = new ZipFile(zipFile);
Enumeration<? extends ZipEntry> enumerator = zip.entries(); Enumeration<? extends ZipEntry> enumerator = zip.entries();
while(enumerator.hasMoreElements()) { while(enumerator.hasMoreElements()) {
ZipEntry entry = enumerator.nextElement(); ZipEntry entry = enumerator.nextElement();
String name = entry.getName(); String name = entry.getName();
if(name.startsWith("assets/hbm/manual/") && name.endsWith(".json")) { if(name.startsWith("assets/hbm/manual/") && name.endsWith(".json")) {
InputStream fileStream = zip.getInputStream(entry); InputStream fileStream = zip.getInputStream(entry);
InputStreamReader reader = new InputStreamReader(fileStream); InputStreamReader reader = new InputStreamReader(fileStream, StandardCharsets.UTF_8);
try { try {
JsonObject obj = (JsonObject) parser.parse(reader); JsonObject obj = (JsonObject) parser.parse(reader);
String manName = name.replace("assets/hbm/manual/", ""); String manName = name.replace("assets/hbm/manual/", "");
@ -143,7 +142,7 @@ public class QMAWLoader implements IResourceManagerReloadListener {
} }
} }
} }
} catch(Exception ex) { } catch(Exception ex) {
MainRegistry.logger.info("[QMAW] Error dissecting zip " + zipFile.getName() + ": " + ex); MainRegistry.logger.info("[QMAW] Error dissecting zip " + zipFile.getName() + ": " + ex);
} finally { } finally {
@ -152,13 +151,13 @@ public class QMAWLoader implements IResourceManagerReloadListener {
} catch(Exception ex) { } } catch(Exception ex) { }
} }
} }
/** Opens a resource pack folder, skips to the manual folder, then tries to dissect that */ /** Opens a resource pack folder, skips to the manual folder, then tries to dissect that */
public static void dissectFolder(File folder) { public static void dissectFolder(File folder) {
File manualFolder = new File(folder, "/assets/hbm/manual"); File manualFolder = new File(folder, "/assets/hbm/manual");
if(manualFolder.exists() && manualFolder.isDirectory()) dissectManualFolder(manualFolder); if(manualFolder.exists() && manualFolder.isDirectory()) dissectManualFolder(manualFolder);
} }
/** Anal bleeding */ /** Anal bleeding */
public static void dissectManualFolder(File folder) { public static void dissectManualFolder(File folder) {
@ -167,7 +166,8 @@ public class QMAWLoader implements IResourceManagerReloadListener {
String name = file.getName(); String name = file.getName();
if(file.isFile() && name.endsWith(".json")) { if(file.isFile() && name.endsWith(".json")) {
try { try {
FileReader reader = new FileReader(file); //FileReader reader = new FileReader(file);
InputStreamReader reader = new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8);
JsonObject obj = (JsonObject) parser.parse(reader); JsonObject obj = (JsonObject) parser.parse(reader);
registerJson(name, obj); registerJson(name, obj);
logFoundManual(name); logFoundManual(name);
@ -179,35 +179,35 @@ public class QMAWLoader implements IResourceManagerReloadListener {
} }
} }
} }
/** Extracts all the info from a json file's main object to add a QMAW to the system. Very barebones, only handles name, icon and the localized text. */ /** Extracts all the info from a json file's main object to add a QMAW to the system. Very barebones, only handles name, icon and the localized text. */
public static void registerJson(String file, JsonObject json) { public static void registerJson(String file, JsonObject json) {
String name = json.get("name").getAsString(); String name = json.get("name").getAsString();
if(QMAWLoader.qmaw.containsKey(name)) { if(QMAWLoader.qmaw.containsKey(name)) {
MainRegistry.logger.info("[QMAW] Skipping existing entry " + file); MainRegistry.logger.info("[QMAW] Skipping existing entry " + file);
return; return;
} }
QuickManualAndWiki qmaw = new QuickManualAndWiki(name); QuickManualAndWiki qmaw = new QuickManualAndWiki(name);
if(json.has("icon")) { if(json.has("icon")) {
qmaw.setIcon(SerializableRecipe.readItemStack(json.get("icon").getAsJsonArray())); qmaw.setIcon(SerializableRecipe.readItemStack(json.get("icon").getAsJsonArray()));
} }
JsonObject title = json.get("title").getAsJsonObject(); JsonObject title = json.get("title").getAsJsonObject();
for(Entry<String, JsonElement> part : title.entrySet()) { for(Entry<String, JsonElement> part : title.entrySet()) {
qmaw.addTitle(part.getKey(), part.getValue().getAsString()); qmaw.addTitle(part.getKey(), part.getValue().getAsString());
} }
JsonObject content = json.get("content").getAsJsonObject(); JsonObject content = json.get("content").getAsJsonObject();
for(Entry<String, JsonElement> part : content.entrySet()) { for(Entry<String, JsonElement> part : content.entrySet()) {
qmaw.addLang(part.getKey(), part.getValue().getAsString()); qmaw.addLang(part.getKey(), part.getValue().getAsString());
} }
JsonArray triggers = json.get("trigger").getAsJsonArray(); JsonArray triggers = json.get("trigger").getAsJsonArray();
for(JsonElement element : triggers) { for(JsonElement element : triggers) {
ItemStack trigger = SerializableRecipe.readItemStack(element.getAsJsonArray()); ItemStack trigger = SerializableRecipe.readItemStack(element.getAsJsonArray());
// items get renamed and removed all the time, so we add some more debug goodness for those cases // items get renamed and removed all the time, so we add some more debug goodness for those cases
@ -217,7 +217,7 @@ public class QMAWLoader implements IResourceManagerReloadListener {
QMAWLoader.triggers.put(new ComparableStack(trigger).makeSingular(), qmaw); QMAWLoader.triggers.put(new ComparableStack(trigger).makeSingular(), qmaw);
} }
} }
if(!qmaw.contents.isEmpty()) { if(!qmaw.contents.isEmpty()) {
QMAWLoader.qmaw.put(name, qmaw); QMAWLoader.qmaw.put(name, qmaw);
} }

View File

@ -54,8 +54,9 @@ import com.hbm.tileentity.machine.rbmk.*;
import com.hbm.tileentity.machine.storage.*; import com.hbm.tileentity.machine.storage.*;
import com.hbm.tileentity.network.*; import com.hbm.tileentity.network.*;
import com.hbm.tileentity.turret.*; import com.hbm.tileentity.turret.*;
import cpw.mods.fml.common.Loader; import com.hbm.util.Compat;
import cpw.mods.fml.common.Loader;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
public class TileMappings { public class TileMappings {
@ -480,5 +481,12 @@ public class TileMappings {
if(IConfigurableMachine.class.isAssignableFrom(clazz)) { if(IConfigurableMachine.class.isAssignableFrom(clazz)) {
configurables.add((Class<? extends IConfigurableMachine>) clazz); configurables.add((Class<? extends IConfigurableMachine>) clazz);
} }
/**
* Causes problems with most machines where two independently acting tiles work together (TU machines, RBMKs, fluid transfer)
* Also breaks due to some sort of buffer leak in the threaded packets, if a boiler is involved (which uses a ByteBuf instead of the usual serializing) it crashes
* Ticking order of Torcherinos is AAA BBB CCC instead of ABC ABC ABC which can lead to some horrifying behavior
*/
Compat.blacklistAccelerator(clazz);
} }
} }

View File

@ -29,6 +29,7 @@ import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.IUpgradeInfoProvider;
import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.CrucibleUtil; import com.hbm.util.CrucibleUtil;
import com.hbm.util.ItemStackUtil;
import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.fauxpointtwelve.DirPos;
import com.hbm.util.i18n.I18nUtil; import com.hbm.util.i18n.I18nUtil;
@ -400,6 +401,111 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl
liquids.add(matStack.copy()); liquids.add(matStack.copy());
} }
//Returns what is unused, or null if used up
public ItemStack distributeInput(ItemStack is, boolean modulate) {
if(is.stackSize == 0) return null;
ItemStack split;
//Slots 0,1,2
if(is.getItem() == ModItems.arc_electrode) {
for(int i = 0; i < 3; i++) {
if(slots[i] == null) {
split = is.splitStack(1);
if(modulate) this.setInventorySlotContents(i, split);
}
if (is.stackSize == 0) return null;
}
//Don't tell me you're gonna add an arc furnace recipe smelting electrodes
return is;
}
//Slots 5-24
ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(is, this.liquidMode);
if(recipe != null) {
int maxStackSize = this.liquidMode ? 64 : recipe.solidOutput.getMaxStackSize() / recipe.solidOutput.stackSize;
maxStackSize = Math.min(maxStackSize, Math.min(is.getMaxStackSize(), getMaxInputSize()));
//Scan
for(int i = 5; i < 25; i++){
if(slots[i] == null) {
if(is.stackSize > maxStackSize) {
split = is.splitStack(maxStackSize);
if(modulate) slots[i] = split;
} else {
if(modulate) slots[i] = is;
return null;
}
} else if(ItemStackUtil.areStacksCompatible(is, slots[i]) && slots[i].stackSize < maxStackSize) {
if(is.stackSize > maxStackSize - slots[i].stackSize) {
is.splitStack(maxStackSize - slots[i].stackSize);
if(modulate) slots[i].stackSize = maxStackSize;
} else {
if(modulate) slots[i].stackSize += is.stackSize;
return null;
}
}
}
}
return is;
}
//Returns requested ItemStack
public ItemStack collectRequested(ItemStack is, boolean modulate) {
int req = is.stackSize;
if(req == 0) return null;
//Slots 0,1,2
if(is.getItem() != ModItems.arc_electrode) {
for(int i = 0; i < 3; i++) {
if(slots[i] == null) continue;
if(ItemStackUtil.areStacksCompatible(is, slots[i])) {
if(req > slots[i].stackSize) {
req -= slots[i].stackSize;
if(modulate) slots[i] = null;
} else if(req < slots[i].stackSize) {
if(modulate) slots[i].stackSize -= req;
return is;
} else {
if(modulate) slots[i] = null;
return is;
}
}
}
}
//Slots 5-24
if(ArcFurnaceRecipes.getOutput(is, this.liquidMode) == null) {
for(int i = 5; i < 25; i++) {
if(slots[i] == null) continue;
if(ItemStackUtil.areStacksCompatible(is, slots[i])) {
if(req > slots[i].stackSize) {
req -= slots[i].stackSize;
if(modulate) slots[i] = null;
} else if(req < slots[i].stackSize) {
if(modulate) slots[i].stackSize -= req;
return is;
} else {
if(modulate) slots[i] = null;
return is;
}
}
}
}
is.stackSize -= req;
if(is.stackSize == 0) return null;
return is;
}
//Return ItemStack in slot, null if unavailable
public ItemStack getAvailableItemFromSlot(int slot) {
if(slots[slot] == null) return null;
if(slot < 3 && slots[slot].getItem() == ModItems.arc_electrode) return null;
else if(slot > 4 && ArcFurnaceRecipes.getOutput(slots[slot], this.liquidMode) != null) return null;
else if(slot == 3 || slot == 4) return null;
else return slots[slot];
}
public static int getStackAmount(List<MaterialStack> stack) { public static int getStackAmount(List<MaterialStack> stack) {
int amount = 0; int amount = 0;
for(MaterialStack mat : stack) amount += mat.amount; for(MaterialStack mat : stack) amount += mat.amount;

View File

@ -156,7 +156,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase {
* Moves heat to neighboring parts, if possible, in a relatively fair manner * Moves heat to neighboring parts, if possible, in a relatively fair manner
*/ */
private void moveHeat() { private void moveHeat() {
boolean reasim = RBMKDials.getReasimBoilers(worldObj); boolean reasim = RBMKDials.getReasimBoilers(worldObj);
List<TileEntityRBMKBase> rec = new ArrayList<>(); List<TileEntityRBMKBase> rec = new ArrayList<>();
@ -344,6 +344,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase {
exceptions.add("id"); exceptions.add("id");
exceptions.add("muffled"); exceptions.add("muffled");
//Keep the title unlocalized is cool.
String title = "Dump of Ordered Data Diagnostic (DODD)"; String title = "Dump of Ordered Data Diagnostic (DODD)";
mc.fontRenderer.drawString(title, pX + 1, pZ - 19, 0x006000); mc.fontRenderer.drawString(title, pX + 1, pZ - 19, 0x006000);
mc.fontRenderer.drawString(title, pX, pZ - 20, 0x00FF00); mc.fontRenderer.drawString(title, pX, pZ - 20, 0x00FF00);
@ -359,8 +360,15 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase {
if(exceptions.contains(key)) if(exceptions.contains(key))
continue; continue;
String value = flush.getTag(key).toString();
mc.fontRenderer.drawString(key + ": " + flush.getTag(key), pX, pZ, 0xFFFFFF); //No...d doesn't refer to "day" and s doesn't refer to "second". Meaningless.
if (!value.isEmpty()) {
char lastChar = value.charAt(value.length() - 1);
if (lastChar == 'd' || lastChar == 's' || lastChar == 'b') {
value = value.substring(0, value.length() - 1);
}
}
mc.fontRenderer.drawString(I18nUtil.resolveKey("tile.rbmk.dodd." + key) + ": " + value, pX, pZ, 0xFFFFFF);
pZ += 10; pZ += 10;
} }

View File

@ -1,10 +1,12 @@
package com.hbm.tileentity.machine.rbmk; package com.hbm.tileentity.machine.rbmk;
import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.IControlReceiver;
import com.hbm.interfaces.ICopiable;
import com.hbm.inventory.container.ContainerRBMKControlAuto; import com.hbm.inventory.container.ContainerRBMKControlAuto;
import com.hbm.inventory.gui.GUIRBMKControlAuto; import com.hbm.inventory.gui.GUIRBMKControlAuto;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor;
import com.hbm.util.EnumUtil;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -16,7 +18,7 @@ import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3; import net.minecraft.util.Vec3;
import net.minecraft.world.World; import net.minecraft.world.World;
public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements IControlReceiver { public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements IControlReceiver, ICopiable {
public RBMKFunction function = RBMKFunction.LINEAR; public RBMKFunction function = RBMKFunction.LINEAR;
public double levelLower; public double levelLower;
@ -164,4 +166,24 @@ public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIRBMKControlAuto(player.inventory, this); return new GUIRBMKControlAuto(player.inventory, this);
} }
@Override
public NBTTagCompound getSettings(World world, int x, int y, int z) {
NBTTagCompound data = new NBTTagCompound();
data.setDouble("levelLower", levelLower);
data.setDouble("levelUpper", levelUpper);
data.setDouble("heatLower", heatLower);
data.setDouble("heatUpper", heatUpper);
data.setInteger("function", function.ordinal());
return data;
}
@Override
public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) {
if(nbt.hasKey("levelLower")) levelLower = nbt.getDouble("levelLower");
if(nbt.hasKey("levelUpper")) levelLower = nbt.getDouble("levelUpper");
if(nbt.hasKey("heatLower")) levelLower = nbt.getDouble("heatLower");
if(nbt.hasKey("heatUpper")) levelLower = nbt.getDouble("heatUpper");
if(nbt.hasKey("function")) function = EnumUtil.grabEnumSafely(RBMKFunction.class, nbt.getInteger("function"));
}
} }

View File

@ -2,9 +2,11 @@ package com.hbm.tileentity.machine.rbmk;
import com.hbm.blocks.machine.rbmk.RBMKControl; import com.hbm.blocks.machine.rbmk.RBMKControl;
import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.IControlReceiver;
import com.hbm.interfaces.ICopiable;
import com.hbm.inventory.container.ContainerRBMKControl; import com.hbm.inventory.container.ContainerRBMKControl;
import com.hbm.inventory.gui.GUIRBMKControl; import com.hbm.inventory.gui.GUIRBMKControl;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType;
import com.hbm.util.EnumUtil;
import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -20,7 +22,7 @@ import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3; import net.minecraft.util.Vec3;
import net.minecraft.world.World; import net.minecraft.world.World;
public class TileEntityRBMKControlManual extends TileEntityRBMKControl implements IControlReceiver { public class TileEntityRBMKControlManual extends TileEntityRBMKControl implements IControlReceiver, ICopiable {
public RBMKColor color; public RBMKColor color;
public double startingLevel; public double startingLevel;
@ -177,5 +179,17 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIRBMKControl(player.inventory, this); return new GUIRBMKControl(player.inventory, this);
} }
@Override
public NBTTagCompound getSettings(World world, int x, int y, int z) {
NBTTagCompound data = new NBTTagCompound();
data.setInteger("color", color.ordinal());
return data;
}
@Override
public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) {
if(nbt.hasKey("color")) color = EnumUtil.grabEnumSafely(RBMKColor.class, nbt.getInteger("color"));
}
} }

View File

@ -264,8 +264,10 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM
ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem());
BufferUtil.writeString(buf, ItemRBMKRod.getYield(slots[0]) + " / " + rod.yield + " (" + (ItemRBMKRod.getEnrichment(slots[0]) * 100) + "%)"); BufferUtil.writeString(buf, ItemRBMKRod.getYield(slots[0]) + " / " + rod.yield + " (" + (ItemRBMKRod.getEnrichment(slots[0]) * 100) + "%)");
BufferUtil.writeString(buf, ItemRBMKRod.getPoison(slots[0]) + "%"); BufferUtil.writeString(buf, ItemRBMKRod.getPoison(slots[0]) + "%");
BufferUtil.writeString(buf, ItemRBMKRod.getCoreHeat(slots[0]) + " / " + ItemRBMKRod.getHullHeat(slots[0]) + " / " + rod.meltingPoint); //Heat is too long! Reduce it to 6 numbers is enough.
} BufferUtil.writeString(buf, String.format("%.6f", ItemRBMKRod.getCoreHeat(slots[0]))
+ " / " + String.format("%.6f", ItemRBMKRod.getHullHeat(slots[0]))
+ " / " + String.format("%.2f", rod.meltingPoint)); }
} }
@Override @Override

View File

@ -107,7 +107,11 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP
Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55);
Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos);
item.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); EntityMovingItem newItem = new EntityMovingItem(worldObj);
newItem.setItemStack(item.getItemStack().copy());
newItem.setPosition(snap.xCoord, snap.yCoord, snap.zCoord);
item.setDead();
worldObj.spawnEntityInWorld(newItem);
break; break;
} }

View File

@ -9,6 +9,7 @@ import com.hbm.inventory.fluid.Fluids;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.eventhandler.EventBus; import cpw.mods.fml.common.eventhandler.EventBus;
import cpw.mods.fml.common.eventhandler.IEventListener; import cpw.mods.fml.common.eventhandler.IEventListener;
import cpw.mods.fml.relauncher.ReflectionHelper; import cpw.mods.fml.relauncher.ReflectionHelper;
@ -37,6 +38,7 @@ public class Compat {
public static final String MOD_TC = "tc"; public static final String MOD_TC = "tc";
public static final String MOD_EIDS = "endlessids"; public static final String MOD_EIDS = "endlessids";
public static final String MOD_ANG = "angelica"; public static final String MOD_ANG = "angelica";
public static final String MOD_TOR = "Torcherino";
public static Item tryLoadItem(String domain, String name) { public static Item tryLoadItem(String domain, String name) {
return (Item) Item.itemRegistry.getObject(getReg(domain, name)); return (Item) Item.itemRegistry.getObject(getReg(domain, name));
@ -259,4 +261,8 @@ public class Compat {
if(!world.getChunkProvider().chunkExists(x >> 4, z >> 4)) return null; if(!world.getChunkProvider().chunkExists(x >> 4, z >> 4)) return null;
return world.getTileEntity(x, y, z); return world.getTileEntity(x, y, z);
} }
public static void blacklistAccelerator(Class clazz) {
FMLInterModComms.sendMessage("Torcherino", "blacklist-tile", clazz.getName());
}
} }

View File

@ -1230,6 +1230,8 @@ entity.hbm.entity_bullet.name=Bullet
entity.hbm.entity_rocket.name=Rocket entity.hbm.entity_rocket.name=Rocket
entity.hbm.entity_schrabnel.name=Schrabnel entity.hbm.entity_schrabnel.name=Schrabnel
error.generic=### I AM ERROR ###
excavator.crusher=Toggle Crusher excavator.crusher=Toggle Crusher
excavator.drill=Toggle Drill excavator.drill=Toggle Drill
excavator.silktouch=Toggle Silk Touch excavator.silktouch=Toggle Silk Touch
@ -1259,6 +1261,28 @@ geiger.playerRes=Player resistance:
geiger.title=GEIGER COUNTER geiger.title=GEIGER COUNTER
geiger.title.dosimeter=DOSIMETER geiger.title.dosimeter=DOSIMETER
general.na=N/A
gui.recipe.duration=Duration
gui.recipe.consumption=Consumption
gui.recipe.input=Input
gui.recipe.output=Output
gui.recipe.atPressure=at
gui.recipe.setRecipe=Click to set recipe
gui.weapon.ammo=Ammo
gui.weapon.baseDamage=Base Damage
gui.weapon.damageWithAmmo=Damage with current ammo
gui.weapon.condition=Condition
gui.weapon.accepts=Accepts
gui.weapon.quality.aside=Standard Arsenal
gui.weapon.quality.bside=B-Side
gui.weapon.quality.legendary=Legendary Weapon
gui.weapon.quality.special=Special Weapon
gui.weapon.quality.utility=Utility
gui.weapon.quality.secret=SECRET
gui.weapon.quality.debug=DEBUG
gun.make.ARMALITE=Armalite gun.make.ARMALITE=Armalite
gun.make.AUTO_ORDINANCE=Auto-Ordnance Corporation gun.make.AUTO_ORDINANCE=Auto-Ordnance Corporation
gun.make.BAE=BAE Systems plc gun.make.BAE=BAE Systems plc
@ -2193,6 +2217,7 @@ item.bolt_spike.name=Railroad Spike
item.bolt_spike.desc=Radiates a threatening aura, somehow item.bolt_spike.desc=Radiates a threatening aura, somehow
item.boltgun.name=Pneumatic Rivet Gun item.boltgun.name=Pneumatic Rivet Gun
item.bomb_caller.name=Airstrike Designator item.bomb_caller.name=Airstrike Designator
item.bomb_part.used_in=Used in:
item.bomb_waffle.name=Waffle of Mass Destruction item.bomb_waffle.name=Waffle of Mass Destruction
item.book_guide.name=Guide Book item.book_guide.name=Guide Book
item.book_of_.name=The Book of Boxcars item.book_of_.name=The Book of Boxcars
@ -2374,6 +2399,7 @@ item.centrifuge_tower.name=Centrifuge Tower
item.chainsaw.name=Chainsaw item.chainsaw.name=Chainsaw
item.cheese.name=Cheese item.cheese.name=Cheese
item.cheese_quesadilla.name=Cheese Quesadilla item.cheese_quesadilla.name=Cheese Quesadilla
item.cheese_quesadilla.desc=That's what a 50 year old yeast infection does to you.
item.chemical_dye.black.name=Chemical Dye (Black) item.chemical_dye.black.name=Chemical Dye (Black)
item.chemical_dye.blue.name=Chemical Dye (Blue) item.chemical_dye.blue.name=Chemical Dye (Blue)
item.chemical_dye.brown.name=Chemical Dye (Brown) item.chemical_dye.brown.name=Chemical Dye (Brown)
@ -3031,6 +3057,7 @@ item.hev_legs.name=HEV Mark IV Leggings
item.holotape_damaged.name=Damaged Holotape item.holotape_damaged.name=Damaged Holotape
item.holotape_image.name=Holotape item.holotape_image.name=Holotape
item.horseshoe_magnet.name=Horseshoe Magnet item.horseshoe_magnet.name=Horseshoe Magnet
item.hot_dusted.forged=Forged %s time(s)
item.hull_big_aluminium.name=Big Aluminium Shell item.hull_big_aluminium.name=Big Aluminium Shell
item.hull_big_steel.name=Big Steel Shell item.hull_big_steel.name=Big Steel Shell
item.hull_big_titanium.name=Big Titanium Shell item.hull_big_titanium.name=Big Titanium Shell
@ -3150,6 +3177,7 @@ item.ingot_schrabidium_fuel.name=Ingot of Schrabidium Fuel
item.ingot_schraranium.name=Schraranium Ingot item.ingot_schraranium.name=Schraranium Ingot
item.ingot_schraranium.desc=Made from uranium in a schrabidium transmutator item.ingot_schraranium.desc=Made from uranium in a schrabidium transmutator
item.ingot_semtex.name=Bar of Semtex item.ingot_semtex.name=Bar of Semtex
item.ingot_semtex.desc=Semtex H Plastic Explosive$Performant explosive for many applications.$Edible
item.ingot_silicon.name=Silicon Boule item.ingot_silicon.name=Silicon Boule
item.ingot_smore.name=S'more Ingot item.ingot_smore.name=S'more Ingot
item.ingot_solinium.name=Solinium Ingot item.ingot_solinium.name=Solinium Ingot
@ -3240,6 +3268,7 @@ item.launch_code_piece.name=Silo Launch Code Piece
item.launch_key.name=Silo Launch Key item.launch_key.name=Silo Launch Key
item.lead_gavel.name=Leaden Gavel item.lead_gavel.name=Leaden Gavel
item.lemon.name="Lemon" item.lemon.name="Lemon"
item.lemon.desc=Eh, good enough.
item.letter.name=Express Mail item.letter.name=Express Mail
item.levitation_unit.name=Gravity Manipulator item.levitation_unit.name=Gravity Manipulator
item.lignite.name=Lignite item.lignite.name=Lignite
@ -3252,7 +3281,9 @@ item.liquidator_plate.name=Liquidator Suit Chestplate
item.lithium.name=Lithium Cube item.lithium.name=Lithium Cube
item.lodestone.name=Lodestone item.lodestone.name=Lodestone
item.loop_stew.name=IT Breakfast item.loop_stew.name=IT Breakfast
item.loop_stew.desc=A very, very healthy breakfast.
item.loops.name=Lööps item.loops.name=Lööps
item.loops.desc=Brøther, may I have some lööps?
item.loot_10.name=Size 10 Missile Loot Crate item.loot_10.name=Size 10 Missile Loot Crate
item.loot_15.name=Size 15 Missile Loot Crate item.loot_15.name=Size 15 Missile Loot Crate
item.loot_misc.name=General Missile Loot Crate item.loot_misc.name=General Missile Loot Crate
@ -3279,8 +3310,11 @@ item.mechanism_rifle_2.name=Advanced Rifle Mechanism
item.mechanism_special.name=High-Tech Weapon Mechanism item.mechanism_special.name=High-Tech Weapon Mechanism
item.med_bag.name=First Aid Kit item.med_bag.name=First Aid Kit
item.med_ipecac.name=Ipecac Syrup item.med_ipecac.name=Ipecac Syrup
item.med_ipecac.desс=Bitter juice that will cause your stomach$to forcefully eject its contents.
item.med_ptsd.name=PTSD Medication item.med_ptsd.name=PTSD Medication
item.med_ptsd.desc=This isn't even PTSD medication, it's just$Ipecac in a different bottle!
item.med_schiziphrenia.name=Schizophrenia Medication item.med_schiziphrenia.name=Schizophrenia Medication
item.med_schizophrenia.desc=Makes the voices go away. Just for a while.$...$Better not take it.
item.medal_liquidator.name=Liquidator Medal item.medal_liquidator.name=Liquidator Medal
item.meltdown_tool.name=Dyatlov Instant Meltdown Applicator item.meltdown_tool.name=Dyatlov Instant Meltdown Applicator
item.memespoon.name=§eMarket Gardener item.memespoon.name=§eMarket Gardener
@ -3291,17 +3325,29 @@ item.mese_pickaxe.name=Mese Pickaxe
item.meteor_charm.name=Meteor Charm item.meteor_charm.name=Meteor Charm
item.meteor_remote.name=Meteorite Remote item.meteor_remote.name=Meteorite Remote
item.meteorite_sword.name=Meteorite Sword item.meteorite_sword.name=Meteorite Sword
item.meteorite_sword.desc=Forged from a fallen star$Sharper than most terrestrial blades
item.meteorite_sword_seared.name=Meteorite Sword (Seared) item.meteorite_sword_seared.name=Meteorite Sword (Seared)
item.meteorite_sword.seared.desc=Fire strengthens the blade$Making it even more powerful
item.meteorite_sword_reforged.name=Meteorite Sword (Reforged) item.meteorite_sword_reforged.name=Meteorite Sword (Reforged)
item.meteorite_sword.reforged.desc=The sword has been reforged$To rectify past imperfections
item.meteorite_sword_hardened.name=Meteorite Sword (Hardened) item.meteorite_sword_hardened.name=Meteorite Sword (Hardened)
item.meteorite_sword.hardened.desc=Extremely high pressure has been used$To harden the blade further
item.meteorite_sword_alloyed.name=Meteorite Sword (Alloyed) item.meteorite_sword_alloyed.name=Meteorite Sword (Alloyed)
item.meteorite_sword.alloyed.desc=Cobalt fills the fissures$Strengthening the sword
item.meteorite_sword_machined.name=Meteorite Sword (Machined) item.meteorite_sword_machined.name=Meteorite Sword (Machined)
item.meteorite_sword.machined.desc=Advanced machinery was used$To refine the blade even more
item.meteorite_sword_treated.name=Meteorite Sword (Treated) item.meteorite_sword_treated.name=Meteorite Sword (Treated)
item.meteorite_sword.treated.desc=Chemicals have been applied$Making the sword more powerful
item.meteorite_sword_etched.name=Meteorite Sword (Etched) item.meteorite_sword_etched.name=Meteorite Sword (Etched)
item.meteorite_sword.etched.desc=Acids clean the material$To make this the perfect sword
item.meteorite_sword_bred.name=Meteorite Sword (Bred) item.meteorite_sword_bred.name=Meteorite Sword (Bred)
item.meteorite_sword.bred.desc=Immense heat and radiation$Compress the material
item.meteorite_sword_irradiated.name=Meteorite Sword (Irradiated) item.meteorite_sword_irradiated.name=Meteorite Sword (Irradiated)
item.meteorite_sword.irradiated.desc=The power of the Atom$Gives the sword might
item.meteorite_sword_fused.name=Meteorite Sword (Fused) item.meteorite_sword_fused.name=Meteorite Sword (Fused)
item.meteorite_sword.fused.desc=This blade has met$With the forces of the stars
item.meteorite_sword_baleful.name=Meteorite Sword (Baleful) item.meteorite_sword_baleful.name=Meteorite Sword (Baleful)
item.meteorite_sword.baleful.desc=This sword has met temperatures$Far beyond what normal material can endure
item.mike_cooling_unit.name=Deuterium Cooling Unit item.mike_cooling_unit.name=Deuterium Cooling Unit
item.mike_core.name=Uranium Coated Deuterium Tank item.mike_core.name=Uranium Coated Deuterium Tank
item.mike_deut.name=Deuterium Tank item.mike_deut.name=Deuterium Tank
@ -3320,6 +3366,17 @@ item.missile_cluster.name=Cluster Missile
item.missile_cluster_strong.name=Strong Cluster Missile item.missile_cluster_strong.name=Strong Cluster Missile
item.missile_custom.name=Custom Missile item.missile_custom.name=Custom Missile
item.missile_decoy.name=Decoy Missile item.missile_decoy.name=Decoy Missile
item.missile.desc.warhead=Warhead
item.missile.desc.strength=Strength
item.missile.desc.fuelType=Fuel Type
item.missile.desc.fuelAmount=Fuel amount
item.missile.desc.chipInaccuracy=Chip inaccuracy
item.missile.desc.finInaccuracy=Fin inaccuracy
item.missile.desc.size=Size
item.missile.desc.health=Health
item.missile.desc.fuel=Fuel
item.missile.desc.fuelCapacity=Fuel capacity
item.missile.desc.notLaunchable=Not launchable!
item.missile_doomsday.name=Doomsday Missile item.missile_doomsday.name=Doomsday Missile
item.missile_doomsday_rusted.name=Damaged Doomsday Missile item.missile_doomsday_rusted.name=Damaged Doomsday Missile
item.missile_drill.name=The Concrete Cracker item.missile_drill.name=The Concrete Cracker
@ -3327,6 +3384,14 @@ item.missile_emp.name=EMP Missile
item.missile_emp_strong.name=Strong EMP Missile item.missile_emp_strong.name=Strong EMP Missile
item.missile_endo.name=Endothermic Missile item.missile_endo.name=Endothermic Missile
item.missile_exo.name=Exothermic Missile item.missile_exo.name=Exothermic Missile
item.missile.fuel.balefire=BF Rocket Fuel
item.missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen
item.missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide
item.missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen
item.missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide
item.missile.fuel.solid=Solid Fuel
item.missile.fuel.solid.prefueled=Solid Fuel (pre-fueled)
item.missile.fuel.xenon=Xenon
item.missile_generic.name=High Explosive Missile item.missile_generic.name=High Explosive Missile
item.missile_incendiary.name=Incendiary Missile item.missile_incendiary.name=Incendiary Missile
item.missile_incendiary_strong.name=Strong Incendiary Missile item.missile_incendiary_strong.name=Strong Incendiary Missile
@ -3335,6 +3400,28 @@ item.missile_kit.name=Missile Kit
item.missile_micro.name=Micro-Nuclear Missile item.missile_micro.name=Micro-Nuclear Missile
item.missile_nuclear.name=Nuclear Missile item.missile_nuclear.name=Nuclear Missile
item.missile_nuclear_cluster.name=Thermonuclear Missile item.missile_nuclear_cluster.name=Thermonuclear Missile
item.missile.part.bottomSize=Bottom size
item.missile.part.by=by
item.missile.part.fuelAmount=Fuel amount
item.missile.part.fuelConsumption=Fuel consumption
item.missile.part.fuelType=Fuel type
item.missile.part.health=Health
item.missile.part.inaccuracy=Inaccuracy
item.missile.part.maxPayload=Max. payload
item.missile.part.rarity=Rarity
item.missile.part.rarity.common=Common
item.missile.part.rarity.epic=Epic
item.missile.part.rarity.legendary=Legendary
item.missile.part.rarity.rare=Rare
item.missile.part.rarity.strange=Strange
item.missile.part.rarity.uncommon=Uncommon
item.missile.part.size=Size
item.missile.part.size.any=Any
item.missile.part.size.none=None
item.missile.part.strength=Strength
item.missile.part.topSize=Top size
item.missile.part.type=Type
item.missile.part.weight=Weight
item.missile_rain.name=Bomblet Rain item.missile_rain.name=Bomblet Rain
item.missile_schrabidium.name=Schrabidium Missile item.missile_schrabidium.name=Schrabidium Missile
item.missile_shuttle.name=Reliant Robin Space Shuttle item.missile_shuttle.name=Reliant Robin Space Shuttle
@ -3344,8 +3431,14 @@ item.missile_soyuz_lander.desc=Doubles as a crappy lander!
item.missile_stealth.name=Stealth Missile item.missile_stealth.name=Stealth Missile
item.missile_strong.name=Strong HE Missile item.missile_strong.name=Strong HE Missile
item.missile_taint.name=Taint-Tipped Missile item.missile_taint.name=Taint-Tipped Missile
item.missile.tier.tier0=Tier 0
item.missile.tier.tier1=Tier 1
item.missile.tier.tier2=Tier 2
item.missile.tier.tier3=Tier 3
item.missile.tier.tier4=Tier 4
item.missile_volcano.name=Tectonic Missile item.missile_volcano.name=Tectonic Missile
item.missile_volcano.desc=Using the power of nuclear explosives, we can summon a volcano! item.missile_volcano.desc=Using the power of nuclear explosives, we can summon a volcano!
item.mold_base.name=Blank Foundry Mold item.mold_base.name=Blank Foundry Mold
item.mold.name=Foundry Mold item.mold.name=Foundry Mold
item.morning_glory.name=Morning Glory item.morning_glory.name=Morning Glory
@ -3702,6 +3795,7 @@ item.particle_strange.name=Strange Quark Capsule
item.particle_tachyon.name=Tachyon Capsule item.particle_tachyon.name=Tachyon Capsule
item.parts_legendary.name=Legendary Parts item.parts_legendary.name=Legendary Parts
item.peas.name=Peas item.peas.name=Peas
item.peas.desc=He accepts your offering.
item.pedestal_steel.name=Steel Pedestal item.pedestal_steel.name=Steel Pedestal
item.pellet_advanced.name=Advanced Watz Performance Improver item.pellet_advanced.name=Advanced Watz Performance Improver
item.pellet_antimatter.name=Antimatter Cluster item.pellet_antimatter.name=Antimatter Cluster
@ -3968,6 +4062,7 @@ item.primer_buckshot.name=Buckshot Primer (x12)
item.protection_charm.name=Charm of Protection item.protection_charm.name=Charm of Protection
item.prototype_kit.name=Prototype Kit item.prototype_kit.name=Prototype Kit
item.pudding.name=Pudding item.pudding.name=Pudding
item.pudding.desc=What if he did?$What if he didn't?$What if the world was made of pudding?
item.pwr_fuel.bfb_am_mix.name=Fuel Grade Americium PWR BFB Rod item.pwr_fuel.bfb_am_mix.name=Fuel Grade Americium PWR BFB Rod
item.pwr_fuel.bfb_pu241.name=Plutonium-241 PWR BFB Rod item.pwr_fuel.bfb_pu241.name=Plutonium-241 PWR BFB Rod
item.pwr_fuel.hea242.name=HEA-242 PWR Fuel Rod item.pwr_fuel.hea242.name=HEA-242 PWR Fuel Rod
@ -4022,6 +4117,7 @@ item.radaway_strong.name=Strong RadAway
item.radx.name=Rad-X item.radx.name=Rad-X
item.radx.desc=Increases radiation resistance by 0.2 (37%%) for 3 minutes item.radx.desc=Increases radiation resistance by 0.2 (37%%) for 3 minutes
item.rag.name=Cloth item.rag.name=Cloth
item.rag.desc=Drop into water to make damp cloth.$Right-click to urinate on the cloth.
item.rag_damp.name=Damp Cloth item.rag_damp.name=Damp Cloth
item.rag_piss.name=Piss-Soaked Rag item.rag_piss.name=Piss-Soaked Rag
item.rangefinder.name=Rangefinder item.rangefinder.name=Rangefinder
@ -4545,6 +4641,7 @@ item.turret_rocket_ammo.name=Rocket Turret 2x4 Ammunition
item.turret_spitfire_ammo.name=AA-Shell item.turret_spitfire_ammo.name=AA-Shell
item.turret_tau_ammo.name=Tau Turret Uranium Ammo item.turret_tau_ammo.name=Tau Turret Uranium Ammo
item.twinkie.name=Twinkie item.twinkie.name=Twinkie
item.twinkie.desc=Expired 600 years ago!
item.ullapool_caber.name=Ullapool Caber item.ullapool_caber.name=Ullapool Caber
item.undefined.name=Undefined item.undefined.name=Undefined
item.upgrade_5g.name=5G Radiation Emitter Upgrade item.upgrade_5g.name=5G Radiation Emitter Upgrade
@ -4589,6 +4686,18 @@ item.wand_d.name=Debug Wand
item.wand_k.name=Construction Wand item.wand_k.name=Construction Wand
item.wand_s.name=Structure Wand item.wand_s.name=Structure Wand
item.structure_custommachine.name=Custom Machine Structure Output Wand item.structure_custommachine.name=Custom Machine Structure Output Wand
item.warhead.desc.he=HE
item.warhead.desc.incendiary=Incendiary
item.warhead.desc.cluster=Cluster
item.warhead.desc.bunker_buster=Bunker Buster
item.warhead.desc.nuclear=Nuclear
item.warhead.desc.thermonuclear=Thermonuclear (TX)
item.warhead.desc.n2=N²
item.warhead.desc.balefire=BF
item.warhead.desc.schrabidium=Schrabidium
item.warhead.desc.taint=Taint
item.warhead.desc.cloud=Cloud
item.warhead.desc.turbine=Turbine
item.warhead_buster_large.name=Large Bunker Buster Warhead item.warhead_buster_large.name=Large Bunker Buster Warhead
item.warhead_buster_medium.name=Medium Bunker Buster Warhead item.warhead_buster_medium.name=Medium Bunker Buster Warhead
item.warhead_buster_small.name=Small Bunker Buster Warhead item.warhead_buster_small.name=Small Bunker Buster Warhead
@ -4838,6 +4947,17 @@ rbmk.screen.rod=Control: %s
rbmk.screen.temp=Temp: %s rbmk.screen.temp=Temp: %s
rbmk.screen.xenon=Xenon: %s rbmk.screen.xenon=Xenon: %s
satchip.frequency=Satellite frequency
satchip.foeq=Gives you an achievement. That's it.
satchip.gerald.desc=Single use.$Requires orbital module.$Melter of CPUs, bane of every server owner.
satchip.laser=Allows to summon lasers with a 15 second cooldown.
satchip.mapper=Displays currently loaded chunks.
satchip.miner=Will deliver ore powders to a cargo landing pad.
satchip.lunar_miner=Mines moon turf to deliver it to a cargo landing pad.
satchip.radar=Shows a map of active entities.
satchip.resonator=Allows for teleportation with no cooldown.
satchip.scanner=Creates a topdown map of underground ores.
shape.barrelHeavy=Heavy Barrel shape.barrelHeavy=Heavy Barrel
shape.barrelLight=Light Barrel shape.barrelLight=Light Barrel
shape.billet=Billet shape.billet=Billet
@ -5932,6 +6052,53 @@ tile.rbmk_steam_inlet.desc=Inserts water into RBMK columns if ReaSim boilers are
tile.rbmk_steam_outlet.name=RBMK ReaSim Steam Outlet tile.rbmk_steam_outlet.name=RBMK ReaSim Steam Outlet
tile.rbmk_steam_outlet.desc=Extracts super dense steam from RBMK columns if ReaSim boilers are enabled$Connects to RBMK columns sideways tile.rbmk_steam_outlet.desc=Extracts super dense steam from RBMK columns if ReaSim boilers are enabled$Connects to RBMK columns sideways
tile.rbmk_storage.name=RBMK Storage Column tile.rbmk_storage.name=RBMK Storage Column
tile.rbmk.dodd.heat=Column Heat
tile.rbmk.dodd.reasimWater=ReaSim Water
tile.rbmk.dodd.reasimSteam=ReaSim Steam
tile.rbmk.dodd.level=Level
tile.rbmk.dodd.targetLevel=Target Level
tile.rbmk.dodd.startingLevel=Starting Level
tile.rbmk.dodd.mult=Mult
tile.rbmk.dodd.color=Color
tile.rbmk.dodd.levelLower=Level Lower
tile.rbmk.dodd.levelUpper=Level Upper
tile.rbmk.dodd.heatLower=Heat Lower
tile.rbmk.dodd.heatUpper=Heat Upper
tile.rbmk.dodd.function=Function
tile.rbmk.dodd.fluxSlow=Flux Slow
tile.rbmk.dodd.fluxFast=Flux Fast
tile.rbmk.dodd.hasRod=Has Rod
tile.rbmk.dodd.progress=Progress
tile.rbmk.dodd.gas=Gas
tile.rbmk.dodd.cooled=Cooled
tile.rbmk.dodd.burned=Burned
tile.rbmk.dodd.feed=Feed
tile.rbmk.dodd.steam=Steam
tile.rbmk.dodd.cryo=Cryo
tile.rbmk.dodd.fuel=Fuel
tile.rbmk.dodd.f_heat=Fuel Heat
tile.rbmk.dodd.f_xenon=Fuel Xenon
tile.rbmk.dodd.f_yield=Fuel Yield
tile.rbmk.dodd.feed_type=Feed Type(ID)
tile.rbmk.dodd.steam_type=Steam Type(ID)
tile.rbmk.dodd.cryo_type=Cryo Type(ID)
tile.rbmk.dodd.gas_type=Gas Type(ID)
tile.rbmk.dodd.fuel_type=Fuel Type(ID)
tile.rbmk.dodd.feed_p=Feed Pressure
tile.rbmk.dodd.steam_p=Steam Pressure
tile.rbmk.dodd.cryo_p=Cryo Pressure
tile.rbmk.dodd.gas_p=Gas Pressure
tile.rbmk.dodd.fuel_p=Fuel Pressure
tile.rbmk.dodd.feed_max=Feed Max Amount
tile.rbmk.dodd.steam_max=Steam Max Amount
tile.rbmk.dodd.cryo_max=Cryo Max Amount
tile.rbmk.dodd.gas_max=Gas Max Amount
tile.rbmk.dodd.fuel_max=Fuel Max Amount
tile.rbmk.dodd.feed_amt=Feed Amount
tile.rbmk.dodd.steam_amt=Steam Amount
tile.rbmk.dodd.cryo_amt=Cryo Amount
tile.rbmk.dodd.gas_amt=Gas Amount
tile.rbmk.dodd.fuel_amt=Fuel Amount
tile.reactor_computer.name=Reactor Control tile.reactor_computer.name=Reactor Control
tile.reactor_conductor.name=Reactor Boiler tile.reactor_conductor.name=Reactor Boiler
tile.reactor_control.name=Control Rods tile.reactor_control.name=Control Rods

File diff suppressed because it is too large Load Diff

View File

@ -184,6 +184,14 @@ armorMod.type.leggings=Наголінники
armorMod.type.servo=Сервоприводи armorMod.type.servo=Сервоприводи
armorMod.type.special=Спеціальне armorMod.type.special=Спеціальне
autoswitch=Частина групи автоматичного перемикання "%s"$Рецепт змінюється залежно від першого інгредієнта
autoswitch.plate=Переробка паливних пластин
autoswitch.plates=Металеві пластини
autoswitch.pwr=Переробка палива ВВЕР
autoswitch.schrab=Екстракція шрабідіуму
autoswitch.watz=Переробка Ватцз гранул
autoswitch.zirnox=Переробка ЦИРНОКС палива
battery.mode.buffer=Буферний режим battery.mode.buffer=Буферний режим
battery.mode.input=Зарядка battery.mode.input=Зарядка
battery.mode.off=Вимкнено battery.mode.off=Вимкнено
@ -697,6 +705,10 @@ commands.satellite.satellite_descended=Супутник успішно спус
commands.satellite.satellite_orbited=Супутник запущено. commands.satellite.satellite_orbited=Супутник запущено.
commands.satellite.should_be_run_as_player=Цю команду має виконати гравець! commands.satellite.should_be_run_as_player=Цю команду має виконати гравець!
commands.locate.no_match=Немає споруд з такою назвою!
commands.locate.none_found=Поруч не знайдено жодних споруд!
commands.locate.success.coordinates=Структуру %s знайдено на %d, %d
container.ammoBag=Сумка для боєприпасів container.ammoBag=Сумка для боєприпасів
container.amsBase=AMS Base (Deco) container.amsBase=AMS Base (Deco)
container.amsEmitter=AMS Emitter (Deco) container.amsEmitter=AMS Emitter (Deco)
@ -794,6 +806,7 @@ container.machineLargeTurbine=Промислова парова турбіна
container.machineLiquefactor=Скраплювач container.machineLiquefactor=Скраплювач
container.machineMixer=Промисловий змішувач container.machineMixer=Промисловий змішувач
container.machineOreSlopper=Переробник корінної руди container.machineOreSlopper=Переробник корінної руди
container.machinePUREX=PUREX
container.machinePyroOven=Піролізна піч container.machinePyroOven=Піролізна піч
container.machineRefinery=Нафтопереробний завод container.machineRefinery=Нафтопереробний завод
container.machineRotaryFurnace=Роторна піч container.machineRotaryFurnace=Роторна піч
@ -841,6 +854,7 @@ container.radar=Радар
container.radiobox=FM-передавач container.radiobox=FM-передавач
container.radiolysis=РІТЕГ та радіолізна камера container.radiolysis=РІТЕГ та радіолізна камера
container.radiorec=FM радіо container.radiorec=FM радіо
container.rbmkAutoloader=Автозавантажувач РБМК
container.rbmkBoiler=Паровий канал РБМК container.rbmkBoiler=Паровий канал РБМК
container.rbmkControl=Регулюючий стрижень РБМК container.rbmkControl=Регулюючий стрижень РБМК
container.rbmkControlAuto=Автоматичний регулюючий стрижень РБМК container.rbmkControlAuto=Автоматичний регулюючий стрижень РБМК
@ -853,6 +867,7 @@ container.reactorBreeding=Реактор-розмножувач
container.reactorControl=Блок дистанційного керування реактором container.reactorControl=Блок дистанційного керування реактором
container.reactorLarge=Великий ядерний реактор container.reactorLarge=Великий ядерний реактор
container.reactorResearch=Дослідницький реактор container.reactorResearch=Дослідницький реактор
container.rebar=Постановщик арматури
container.reix=Rei-X Mainframe container.reix=Rei-X Mainframe
container.rtg=РІТЕГ container.rtg=РІТЕГ
container.rtgFurnace=РІТЕГ піч container.rtgFurnace=РІТЕГ піч
@ -1461,6 +1476,7 @@ hbmfluid.coalgas=Вугільний бензин
hbmfluid.coalgas_leaded=Етильований вугільний бензин hbmfluid.coalgas_leaded=Етильований вугільний бензин
hbmfluid.coaloil=Скраплене вугілля hbmfluid.coaloil=Скраплене вугілля
hbmfluid.colloid=Колоїд hbmfluid.colloid=Колоїд
hbmfluid.concrete=Рідкий бетон
hbmfluid.coolant=Охолоджувальна рідина hbmfluid.coolant=Охолоджувальна рідина
hbmfluid.coolant_hot=Гаряча охолоджувальна рідина hbmfluid.coolant_hot=Гаряча охолоджувальна рідина
hbmfluid.crackoil=Крекінгова нафта hbmfluid.crackoil=Крекінгова нафта
@ -2108,7 +2124,7 @@ item.billet_nuclear_waste.name=Заготовка ядерних відході
item.billet_pb209.name=Заготовка свинцю-209 item.billet_pb209.name=Заготовка свинцю-209
item.billet_po210be.name=Заготовка полоній-210 берилію item.billet_po210be.name=Заготовка полоній-210 берилію
item.billet_polonium.name=Заготовка полонію-210 item.billet_polonium.name=Заготовка полонію-210
item.billet_pu_mix.name=Заготовка реакторного полонію item.billet_pu_mix.name=Заготовка реакторного плутонію
item.billet_pu238.name=Заготовка плутонію-238 item.billet_pu238.name=Заготовка плутонію-238
item.billet_pu238be.name=Заготовка плутоній-238 берилію item.billet_pu238be.name=Заготовка плутоній-238 берилію
item.billet_pu239.name=Заготовка плутонію-239 item.billet_pu239.name=Заготовка плутонію-239
@ -2161,6 +2177,7 @@ item.blades_desh.name=Деш леза подрібнювача
item.blades_steel.name=Стальні леза подрібнювача item.blades_steel.name=Стальні леза подрібнювача
item.blades_titanium.name=Титанові леза подрібнювача item.blades_titanium.name=Титанові леза подрібнювача
item.blowtorch.name=Паяльна лампа item.blowtorch.name=Паяльна лампа
item.blueprint_folder.name=Буклет з кресленнями
item.blueprints.name=Креслення item.blueprints.name=Креслення
item.board_copper.name=Мідна панель item.board_copper.name=Мідна панель
item.boat_rubber.name=Гумовий човен item.boat_rubber.name=Гумовий човен
@ -2772,7 +2789,7 @@ item.fleija_igniter.name=Імпульсний запальник
item.fleija_kit.name=Комплект F.L.E.I.J.A. item.fleija_kit.name=Комплект F.L.E.I.J.A.
item.fleija_propellant.name=Шрабідієвий заряд item.fleija_propellant.name=Шрабідієвий заряд
item.fluid_barrel_empty.name=Порожня бочка для рідини item.fluid_barrel_empty.name=Порожня бочка для рідини
item.fluid_barrel_full.name=Бочка для рідини: item.fluid_barrel_full.name=Бочка для рідини: %s
item.fluid_barrel_infinite.name=Нескінченна бочка для рідини item.fluid_barrel_infinite.name=Нескінченна бочка для рідини
item.fluid_duct.name=Трубопровід: item.fluid_duct.name=Трубопровід:
item.fluid_identifier.name=Ідентифікатор рідини item.fluid_identifier.name=Ідентифікатор рідини
@ -2783,10 +2800,12 @@ item.fluid_identifier.usage2=трубопроводів в діапазоні 64
item.fluid_identifier_multi.name=Мульти ідентифікатор рідини item.fluid_identifier_multi.name=Мульти ідентифікатор рідини
item.fluid_identifier_multi.info=Універсальний ідентифікатор рідини для: item.fluid_identifier_multi.info=Універсальний ідентифікатор рідини для:
item.fluid_identifier_multi.info2=Другий тип: item.fluid_identifier_multi.info2=Другий тип:
item.fluid_pack_empty.name=Великий контейнер для рідини
item.fluid_pack_full.name=Упаковано %s
item.fluid_tank_empty.name=Порожній універсальний резервуар для рідини item.fluid_tank_empty.name=Порожній універсальний резервуар для рідини
item.fluid_tank_full.name=Універсальний резервуар для рідини: item.fluid_tank_full.name=Універсальний резервуар для рідини: %s
item.fluid_tank_lead_empty.name=Порожній резервуар для небезпечних матеріалів item.fluid_tank_lead_empty.name=Порожній резервуар для небезпечних матеріалів
item.fluid_tank_lead_full.name=Резервуар для небезпечних матеріалів: item.fluid_tank_lead_full.name=Резервуар для небезпечних матеріалів: %s
item.fluorite.name=Флюорит item.fluorite.name=Флюорит
item.flywheel_beryllium.name=Берилієвий маховик item.flywheel_beryllium.name=Берилієвий маховик
item.fmn.name=Таблетка флунітразепаму item.fmn.name=Таблетка флунітразепаму
@ -2907,6 +2926,7 @@ item.gun_amat.name=Антиматерієва гвинтівка
item.gun_amat_penance.name=Покаяння item.gun_amat_penance.name=Покаяння
item.gun_amat_subtlety.name=Витонченість item.gun_amat_subtlety.name=Витонченість
item.gun_autoshotgun.name=Автоматичний дробовик item.gun_autoshotgun.name=Автоматичний дробовик
item.gun_autoshotgun_heretic.name=Єретик
item.gun_autoshotgun_sexy.name=Сексі item.gun_autoshotgun_sexy.name=Сексі
item.gun_autoshotgun_shredder.name=Шредер item.gun_autoshotgun_shredder.name=Шредер
item.gun_b92.name=§9B92 Енергетичний пістолет§r item.gun_b92.name=§9B92 Енергетичний пістолет§r
@ -3171,6 +3191,13 @@ item.insert_polonium.name=Полонієва вставка
item.insert_steel.name=Важка сталева вставка item.insert_steel.name=Важка сталева вставка
item.insert_xsapi.name=Твердосплавна протикульна броневставка item.insert_xsapi.name=Твердосплавна протикульна броневставка
item.insert_yharonite.name=Яронітова вставка item.insert_yharonite.name=Яронітова вставка
item.item_expensive.bronze_tubes.name=Бронзові структурні елементи
item.item_expensive.circuit.name=Розширена друкована плата
item.item_expensive.computer.name=Мейнфрейм
item.item_expensive.ferro_plating.name=Армовані фероуранові панелі
item.item_expensive.heavy_frame.name=Важкий каркас
item.item_expensive.lead_plating.name=Радіаційно-стійке покриття
item.item_expensive.steel_plating.name=Болтове сталеве покриття
item.item_secret.aberrator.name=Частина Абератора item.item_secret.aberrator.name=Частина Абератора
item.item_secret.canister.name=Композит SB-26 item.item_secret.canister.name=Композит SB-26
item.item_secret.controller.name=Пропрієтарний блок керування item.item_secret.controller.name=Пропрієтарний блок керування
@ -4069,6 +4096,7 @@ item.rbmk_tool.set=РБМК підключено!
item.reacher.name=Вольфрамовий ухват item.reacher.name=Вольфрамовий ухват
item.reactor_core.name=Активна зона реактора розмножувача item.reactor_core.name=Активна зона реактора розмножувача
item.reactor_sensor.name=Дистанційний датчик реактора item.reactor_sensor.name=Дистанційний датчик реактора
item.rebar_placer.name=Встановлювач арматури
item.record.glass.desc=? ? ? item.record.glass.desc=? ? ?
item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core
item.record.ss.desc=Valve - Sector Sweep item.record.ss.desc=Valve - Sector Sweep
@ -4753,6 +4781,11 @@ potion.hbm_stability=Стабільність
potion.hbm_taint=Отруєння порчею potion.hbm_taint=Отруєння порчею
potion.hbm_telekinesis=! ! ! potion.hbm_telekinesis=! ! !
purex.recycle=Переробка %s
purex.schrab=Екстракція шрабідіуму з %s
qmaw.tab=[ Натисніть %s для допомоги ]
radar.clearMap=Очистити карту radar.clearMap=Очистити карту
radar.detectMissiles=Виявляти ракети radar.detectMissiles=Виявляти ракети
radar.detectPlayers=Виявляти гравців radar.detectPlayers=Виявляти гравців
@ -5143,6 +5176,7 @@ tile.concrete_colored_ext.pink.name=Бетон "Вибір будівельни
tile.concrete_colored_ext.purple.name=Бетон "Вибір будівельника" - Таємничий фіолетовий tile.concrete_colored_ext.purple.name=Бетон "Вибір будівельника" - Таємничий фіолетовий
tile.concrete_colored_ext.sand.name=Бетон "Вибір будівельника" - Буря в пустелі tile.concrete_colored_ext.sand.name=Бетон "Вибір будівельника" - Буря в пустелі
tile.concrete_pillar.name=Армована залізобетонна колона tile.concrete_pillar.name=Армована залізобетонна колона
tile.concrete_rebar.name=Залізобетон
tile.concrete_slab.asphalt.name=Плита з асфальту tile.concrete_slab.asphalt.name=Плита з асфальту
tile.concrete_slab.concrete.name=Плита з бетонної плитки tile.concrete_slab.concrete.name=Плита з бетонної плитки
tile.concrete_slab.concrete_asbestos.name=Плита з азбестобетону tile.concrete_slab.concrete_asbestos.name=Плита з азбестобетону
@ -5315,12 +5349,12 @@ tile.floodlight.name=Потужний прожектор
tile.fluid_duct.name=Універсальний рідинний трубопровід (Застаріло) tile.fluid_duct.name=Універсальний рідинний трубопровід (Застаріло)
tile.fluid_duct_box.name=Універсальний рідинний трубопровід (Boxduct) tile.fluid_duct_box.name=Універсальний рідинний трубопровід (Boxduct)
tile.fluid_duct_exhaust.name=Вихлопна труба tile.fluid_duct_exhaust.name=Вихлопна труба
tile.fluid_duct_paintable_block_exhaust.name=Вихлопна труба з покриттям tile.fluid_duct_paintable_block_exhaust.name=Вихлопна труба, яку можна пофарбувати
tile.fluid_duct_gauge.name=Вимірювальна труба tile.fluid_duct_gauge.name=Вимірювальна труба
tile.fluid_duct_gauge.desc=Труба, що показує, скільки рідини$переміщується в мережі за один тік.$Розділені мережі, з'єднані бочками$або цистернами, вважаються однією спільною мережею. tile.fluid_duct_gauge.desc=Труба, що показує, скільки рідини$переміщується в мережі за один тік.$Розділені мережі, з'єднані бочками$або цистернами, вважаються однією спільною мережею.
tile.fluid_duct_neo.name=Універсальний рідинний трубопровід tile.fluid_duct_neo.name=Універсальний рідинний трубопровід
tile.fluid_duct_paintable.name=Універсальний рідинний трубопровід з покриттям tile.fluid_duct_paintable.name=Універсальний рідинний трубопровід, який можна пофарбувати
tile.fluid_duct_solid.name=Універсальний рідинний трубопровід з покриттям (Застаріло) tile.fluid_duct_solid.name=Універсальний рідинний трубопровід, який можна пофарбувати (Застаріло)
tile.fluid_pump.name=Насос регулювання потоку tile.fluid_pump.name=Насос регулювання потоку
tile.fluid_switch.name=Редстоун рідинний клапан tile.fluid_switch.name=Редстоун рідинний клапан
tile.fluid_valve.name=Рідинний клапан tile.fluid_valve.name=Рідинний клапан
@ -5580,6 +5614,8 @@ tile.machine_powerrtg.name=Полоній-теннессинова ізотоп
tile.machine_press.name=Твердопаливний прес tile.machine_press.name=Твердопаливний прес
tile.machine_puf6_tank.name=Цистерна гексафториду плутонію tile.machine_puf6_tank.name=Цистерна гексафториду плутонію
tile.machine_pumpjack.name=Верстат-гойдалка tile.machine_pumpjack.name=Верстат-гойдалка
tile.machine_purex.name=PUREX
tile.machine_purex.desc=Машина для переробки багатьох видів ядерного палива.$Для більшості рецептів потрібен гас та азотна кислота.
tile.machine_pyrooven.name=Піролізна піч tile.machine_pyrooven.name=Піролізна піч
tile.machine_radar.name=Радар tile.machine_radar.name=Радар
tile.machine_radar_large.name=Великий радар tile.machine_radar_large.name=Великий радар
@ -5870,6 +5906,7 @@ tile.rail_large_switch_flipped.name=Стандартний залізнични
tile.rail_narrow.name=Вузькоколійні рейки tile.rail_narrow.name=Вузькоколійні рейки
tile.rail_wood.name=Дерев'яні рейки tile.rail_wood.name=Дерев'яні рейки
tile.rbmk_absorber.name=Борний поглинач нейтронів РБМК tile.rbmk_absorber.name=Борний поглинач нейтронів РБМК
tile.rbmk_autoloader.name=Автозавантажувач РБМК
tile.rbmk_blank.name=Структурна колона РБМК tile.rbmk_blank.name=Структурна колона РБМК
tile.rbmk_boiler.name=Паровий канал РБМК tile.rbmk_boiler.name=Паровий канал РБМК
tile.rbmk_console.name=Консоль РБМК tile.rbmk_console.name=Консоль РБМК
@ -5901,12 +5938,13 @@ tile.reactor_ejector.name=Reactor Waste Ejector
tile.reactor_element.name=Reactor Chamber tile.reactor_element.name=Reactor Chamber
tile.reactor_hatch.name=Reactor Access Hatch tile.reactor_hatch.name=Reactor Access Hatch
tile.reactor_inserter.name=Reactor Fuel Inserter tile.reactor_inserter.name=Reactor Fuel Inserter
tile.rebar.name=Арматура
tile.red_barrel.name=Вибухова бочка tile.red_barrel.name=Вибухова бочка
tile.red_cable.name=Червономідний кабель tile.red_cable.name=Червономідний кабель
tile.red_cable_classic.name=Червономідний кабель (Класичний) tile.red_cable_classic.name=Червономідний кабель (Класичний)
tile.red_cable_gauge.name=Датчик потужності tile.red_cable_gauge.name=Датчик потужності
tile.red_cable_gauge.desc=Кабель, який показує, скільки енергії$переміщується в мережі за один тік.$Розділені мережі, з’єднані блоками$накопичення енергії, вважаються однією спільною мережею. tile.red_cable_gauge.desc=Кабель, який показує, скільки енергії$переміщується в мережі за один тік.$Розділені мережі, з’єднані блоками$накопичення енергії, вважаються однією спільною мережею.
tile.red_cable_paintable.name=Червономідний кабель, який можна фарбувати tile.red_cable_paintable.name=Червономідний кабель, який можна пофарбувати
tile.red_connector.name=Конектор електропередач tile.red_connector.name=Конектор електропередач
tile.red_pylon.name=Опора лінії електропередач tile.red_pylon.name=Опора лінії електропередач
tile.red_pylon_large.name=Велика опора лінії електропередач tile.red_pylon_large.name=Велика опора лінії електропередач
@ -6232,4 +6270,4 @@ desc.gui.upgrade.overdrive= * §7Перевантаження§r: Складає
desc.gui.upgrade.power= * §1Енергозбереження§r: Складається до 3 рівнів desc.gui.upgrade.power= * §1Енергозбереження§r: Складається до 3 рівнів
desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів
tile.oc_cable_paintable.name=Мережевий кабель, який можна фарбувати tile.oc_cable_paintable.name=Мережевий кабель, який можна пофарбувати

View File

@ -2120,7 +2120,7 @@ item.canned_napalm.name=凝固汽油罐头
item.canned_napalm.desc=我喜欢早上闻着老梗的味道! item.canned_napalm.desc=我喜欢早上闻着老梗的味道!
item.canned_oil.name=机油罐头 item.canned_oil.name=机油罐头
item.canned_oil.desc=它既然能让发动机运转的更流畅,那为什么不能用在人类身上? item.canned_oil.desc=它既然能让发动机运转的更流畅,那为什么不能用在人类身上?
item.canned_pashtet.name=牛排罐头 item.canned_pashtet.name=俄式肝酱罐头
item.canned_pashtet.desc=翻译服务不可用блядь! item.canned_pashtet.desc=翻译服务不可用блядь!
item.canned_pizza.name=意大利香肠比萨罐头 item.canned_pizza.name=意大利香肠比萨罐头
item.canned_pizza.desc=反人类罪 item.canned_pizza.desc=反人类罪
@ -5566,6 +5566,53 @@ tile.rbmk_steam_inlet.desc=当启用ReaSim锅炉时向反应堆内输入水$从
tile.rbmk_steam_outlet.name=RBMK ReaSim蒸汽出口 tile.rbmk_steam_outlet.name=RBMK ReaSim蒸汽出口
tile.rbmk_steam_outlet.desc=当启用ReaSim锅炉时从反应堆内输出超热蒸汽$从侧面连接至反应堆结构 tile.rbmk_steam_outlet.desc=当启用ReaSim锅炉时从反应堆内输出超热蒸汽$从侧面连接至反应堆结构
tile.rbmk_storage.name=RBMK燃料棒存储棒 tile.rbmk_storage.name=RBMK燃料棒存储棒
tile.rbmk.dodd.heat=温度
tile.rbmk.dodd.reasimWater=ReaSim给水量
tile.rbmk.dodd.reasimSteam=ReaSim蒸汽量
tile.rbmk.dodd.level=控制棒深度
tile.rbmk.dodd.targetLevel=目标深度
tile.rbmk.dodd.startingLevel=起始深度
tile.rbmk.dodd.mult=倍数
tile.rbmk.dodd.color=颜色
tile.rbmk.dodd.levelLower=深度下限
tile.rbmk.dodd.levelUpper=深度上限
tile.rbmk.dodd.heatLower=温度下限
tile.rbmk.dodd.heatUpper=温度上限
tile.rbmk.dodd.function=函数类型
tile.rbmk.dodd.fluxSlow=慢中子计数
tile.rbmk.dodd.fluxFast=快中子计数
tile.rbmk.dodd.hasRod=是否有燃料棒
tile.rbmk.dodd.progress=进度
tile.rbmk.dodd.cooled=冷却中
tile.rbmk.dodd.burned=燃烧中
tile.rbmk.dodd.f_heat=燃料棒温度
tile.rbmk.dodd.f_xenon=氙中毒指数
tile.rbmk.dodd.f_yield=耐久
tile.rbmk.dodd.gas=气体
tile.rbmk.dodd.feed=工质储量
tile.rbmk.dodd.steam=蒸汽储量
tile.rbmk.dodd.cryo=凝胶储量
tile.rbmk.dodd.fuel=燃料储量
tile.rbmk.dodd.feed_type=工质种类(ID)
tile.rbmk.dodd.steam_type=蒸汽种类(ID)
tile.rbmk.dodd.cryo_type=凝胶种类(ID)
tile.rbmk.dodd.gas_type=气体种类(ID)
tile.rbmk.dodd.fuel_type=燃料种类(ID)
tile.rbmk.dodd.feed_p=工质压力
tile.rbmk.dodd.steam_p=蒸汽压力
tile.rbmk.dodd.cryo_p=凝胶压力
tile.rbmk.dodd.gas_p=气体压力
tile.rbmk.dodd.fuel_p=燃料压力
tile.rbmk.dodd.feed_max=工质最大储量
tile.rbmk.dodd.steam_max=蒸汽最大储量
tile.rbmk.dodd.cryo_max=凝胶最大储量
tile.rbmk.dodd.gas_max=气体最大储量
tile.rbmk.dodd.fuel_max=燃料最大储量
tile.rbmk.dodd.feed_amt=工质储量
tile.rbmk.dodd.steam_amt=蒸汽储量
tile.rbmk.dodd.cryo_amt=凝胶储量
tile.rbmk.dodd.gas_amt=气体储量
tile.rbmk.dodd.fuel_amt=燃料储量
tile.reactor_computer.name=反应堆控制器 tile.reactor_computer.name=反应堆控制器
tile.reactor_conductor.name=反应堆锅炉 tile.reactor_conductor.name=反应堆锅炉
tile.reactor_control.name=控制棒 tile.reactor_control.name=控制棒
@ -6138,3 +6185,6 @@ purex.schrab=从 %s 中萃取Sa326
tile.machine_purex.name=钚铀还原提取设备PUREX tile.machine_purex.name=钚铀还原提取设备PUREX
tile.machine_purex.desc=可用于多种核燃料的再处理机器。$大多数配方需要用到硝酸和煤油。 tile.machine_purex.desc=可用于多种核燃料的再处理机器。$大多数配方需要用到硝酸和煤油。
qmaw.tab=[按 %s 键获取帮助] qmaw.tab=[按 %s 键获取帮助]
commands.locate.no_match=没有具有此名称的结构!
commands.locate.none_found=未在附近找到结构!
commands.locate.success.coordinates=在 %2$d, %3$d 处找到结构 %1$s

View File

@ -1,13 +1,17 @@
{ {
"name": "Advanced Alloy", "name": "Advanced Alloy",
"icon": ["hbm:item.ingot_advanced_alloy", 1, 0], "icon": ["hbm:item.ingot_advanced_alloy", 1, 0],
"trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]],
"title": { "title": {
"en_US": "Advanced Alloy", "en_US": "Advanced Alloy",
"ru_ru": "Продвинутый сплав" "uk_UA": "Удосконалений сплав",
}, "zh_CN": "高级合金",
"ru_RU": "Продвинутый сплав"
},
"content": { "content": {
"en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]].", "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]].",
"ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[термоядерного реактора|Fusion Reactor]] и [[камеры облучения|Exposure Chamber]]." "uk_UA": "Виготовлено в [[доменній печі|Blast Furnace]] зі [[сталі|Steel]] та [[червоної міді|Minecraft Grade Copper]]. З нього робиться спорядження краще за алмазне. Також використовується в деяких потужних магнітах для [[термоядерного реактору|Fusion Reactor]] та [[камери опромінювання|Exposure Chamber]].",
"ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[термоядерного реактора|Fusion Reactor]] и [[камеры облучения|Exposure Chamber]].",
"zh_CN": "在[[高炉|Blast Furnace]]中使用[[钢|Steel]]和[[紫铜|Minecraft Grade Copper]]制成。其制成的工具比钻石更加优质。同时也能用于制作[[聚变反应堆|Fusion Reactor]]和[[辐照舱|Exposure Chamber]]的高能磁铁。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Aluminium", "name": "Aluminium",
"icon": ["hbm:item.ingot_aluminium", 1, 0], "icon": ["hbm:item.ingot_aluminium", 1, 0],
"trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]],
"title": { "title": {
"en_US": "Aluminium", "en_US": "Aluminium",
"ru_RU": "Алюминий" "uk_UA": "Алюміній",
}, "ru_RU": "Алюминий",
"zh_CN": "铝"
},
"content": { "content": {
"en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.<br><br>Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.<br><br>Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.",
"ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.<br><br>Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." "uk_UA": "Звичайний, легкий метал. Доступний на ранніх стадіях шляхом плавлення кріоліту ('алюмінієвої руди') у [[коксовій печі|Combination Oven]]. Може бути отриманий пізніше шляхом обробки [[бокситів|Bauxite]], та [[електролізу|Electrolysis Machine]] отриманого розчину оксиду алюмінію.<br><br>Використовується в трубопроводах, загальній роботі з рідинами, як компонент [[гарматної бронзи|Gunmetal]] та фюзеляжів ракет.",
"ru_RU": "Распространённый легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.<br><br>Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет.",
"zh_CN": "常见的轻质金属,在早期可使用[[复式炼焦炉|Combination Oven]]冶炼冰晶石(含铝矿石)来得到铝。后期可通过加工[[铝土矿|Bauxite]],后使用[[电解机|Electrolysis Machine]]处理氧化铝溶液得到。<br><br>用于制作管道,一般流体储存,制作[[炮铜|Gunmetal]]和导弹弹体。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Arsenic", "name": "Arsenic",
"icon": ["hbm:item.ingot_arsenic", 1, 0], "icon": ["hbm:item.ingot_arsenic", 1, 0],
"trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]],
"title": { "title": {
"en_US": "Arsenic", "en_US": "Arsenic",
"ru_RU": "Мышьяк" "uk_UA": "Миш'як",
}, "ru_RU": "Мышьяк",
"zh_CN": "砷"
},
"content": { "content": {
"en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].", "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].",
"ru_RU": "Получается путём обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]]." "uk_UA": "Отримується шляхом обробки нафтових відходів [[високоефективним розчинником|High-Performance Solvent]] в [[рудному окислювачі|Ore Acidizer]]. Нафтові відходи утворюються [[подрібненням|Shredder]] забруднених блоків, утворених [[вежею гідророзриву|Hydraulic Fracking Tower]]. В основному використовується як [[миш'якова бронза|Arsenic Bronze]].",
"ru_RU": "Получается путём обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]].",
"zh_CN": "可通过在[[酸化机|Ore Acidizer]]中使用[[高性能溶剂|High-Performance Solvent]]处理油性废料获得。油性废料可在[[粉碎机|Shredder]]中粉碎[[水力压裂塔|Hydraulic Fracking Tower]]产生的污染方块获得。主要用于制作[[砷青铜|Arsenic Bronze]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Arsenic Bronze", "name": "Arsenic Bronze",
"icon": ["hbm:item.ingot_arsenic_bronze", 1, 0], "icon": ["hbm:item.ingot_arsenic_bronze", 1, 0],
"trigger": [["hbm:item.ingot_arsenic_bronze"]], "trigger": [["hbm:item.ingot_arsenic_bronze"]],
"title": { "title": {
"en_US": "Arsenic Bronze", "en_US": "Arsenic Bronze",
"ru_RU": "Мышьяковая бронза" "uk_UA": "Миш'якова бронза",
}, "ru_RU": "Мышьяковая бронза",
"zh_CN": "砷青铜"
},
"content": { "content": {
"en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].<br><br>Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].", "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].<br><br>Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].",
"ru_RU": "Производное от [[мышьяка|Arsenic]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]] из-за требования [[высокоэффективного растворителя|High-Performance Solvent]].<br><br>Полностью взаимозаменяемо с [[висмутовой бронзой|Bismuth Bronze]]." "uk_UA": "Похідна від [[миш'яку|Arsenic]], виготовлена в [[ливарні|Crucible]], доступна лише після будівництва [[РБМК|RBMK]] через необхідність у [[високоефективному розчиннику|High-Performance Solvent]].<br><br>Повністю взаємозамінна з [[вісмутовою бронзою|Bismuth Bronze]].",
"ru_RU": "Производное от [[мышьяка|Arsenic]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]] из-за требования [[высокоэффективного растворителя|High-Performance Solvent]].<br><br>Полностью взаимозаменяемо с [[висмутовой бронзой|Bismuth Bronze]].",
"zh_CN": "使用[[砷|Arsenic]]在[[坩埚|Crucible]]中制作的衍生物,只能在建造[[RBMK]]之后获得,因为提取砷需要用到[[高性能溶剂|High-Performance Solvent]]。<br><br>和[[铋青铜|Bismuth Bronze]]完全通用。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Bakelite", "name": "Bakelite",
"icon": ["hbm:item.ingot_bakelite", 1, 0], "icon": ["hbm:item.ingot_bakelite", 1, 0],
"trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]],
"title": { "title": {
"en_US": "Bakelite", "en_US": "Bakelite",
"ru_RU": "Бакелит" "uk_UA": "Карболіт",
}, "ru_RU": "Бакелит",
"zh_CN": "电木"
},
"content": { "content": {
"en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.", "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.",
"ru_RU": "Альтернатива [[полимеру|Polymer]], изготовленная из [[ароматических углеводородов|Aromatic Hydrocarbons]], полученных из [[продуктов крекинга нефти|Catalytic Cracking Tower]]. Полностью взаимозаменяема во всех рецептах." "uk_UA": "Карболіт (радянська назва бакеліту) — альтернатива [[полімеру|Polymer]], виготовлений з [[ароматичних вуглеводнів|Aromatic Hydrocarbons]], отриманих з [[продуктів крекінгу нафти|Catalytic Cracking Tower]]. Повністю взаємозамінний у всіх рецептах.",
"ru_RU": "Альтернатива [[полимеру|Polymer]], изготовленная из [[ароматических углеводородов|Aromatic Hydrocarbons]], полученных из [[продуктов крекинга нефти|Catalytic Cracking Tower]]. Полностью взаимозаменяема во всех рецептах.",
"zh_CN": "[[聚合物|Polymer]]的替代品,使用处理[[裂化油|Catalytic Cracking Tower]]得到的产品之一[[芳香烃|Aromatic Hydrocarbons]]制作。在所有配方中与聚合物完全通用。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Bismuth", "name": "Bismuth",
"icon": ["hbm:item.ingot_bismuth", 1, 0], "icon": ["hbm:item.ingot_bismuth", 1, 0],
"trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]],
"title": { "title": {
"en_US": "Bismuth", "en_US": "Bismuth",
"ru_RU": "Висмут" "uk_UA": "Вісмут",
}, "ru_RU": "Висмут",
"zh_CN": "铋"
},
"content": { "content": {
"en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].",
"ru_RU": "Тяжелый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен из поздних стадий обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовай бронзы|Bismuth Bronze]]." "uk_UA": "Важкий метал, початково який можна отримати у результаті переробки відпрацьованого палива [[РБМК|RBMK]] в [[SILEX]], також може бути отриманий на пізнішій стадії переробки корінної руди з використанням [[високоефективного розчинника|High-Performance Solvent]]. Переважно використовуюється як [[вісмутова бронза|Bismuth Bronze]].",
"ru_RU": "Тяжёлый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен в поздние стадии обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовой бронзы|Bismuth Bronze]].",
"zh_CN": "一种重金属,最初可使用[[SILEX]]回收枯竭的[[RBMK]]燃料获取,之后也可在基岩矿石处理的后期步骤中,使用[[高性能溶剂|Hing-Performance Solvent]]处理矿石获取。主要用于制作[[铋青铜|Bismuth Bronze]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Bismuth Bronze", "name": "Bismuth Bronze",
"icon": ["hbm:item.ingot_bismuth_bronze", 1, 0], "icon": ["hbm:item.ingot_bismuth_bronze", 1, 0],
"trigger": [["hbm:item.ingot_bismuth_bronze"]], "trigger": [["hbm:item.ingot_bismuth_bronze"]],
"title": { "title": {
"en_US": "Bismuth Bronze", "en_US": "Bismuth Bronze",
"ru_RU": "Висмутовая бронза" "uk_UA": "Вісмутова бронза",
}, "ru_RU": "Висмутовая бронза",
"zh_CN": "铋青铜"
},
"content": { "content": {
"en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].<br><br>Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].<br><br>Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].",
"ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].<br><br>Полностью взаимозаменяемо с [[мышьяковой бронзой|Arsenic Bronze]]." "uk_UA": "Похідна від [[вісмуту|Bismuth]], виготовлена в [[ливарні|Crucible]], доступна лише після будівництва [[РБМК|RBMK]]br><br>Повністю взаємозамінна з [[миш'яковою бронзою|Arsenic Bronze]].",
"ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].<br><br>Полностью взаимозаменяема с [[мышьяковой бронзой|Arsenic Bronze]].",
"zh_CN": "使用[[铋|Bismuth]]在[[坩埚|Crucible]]中制作的衍生物,只能在建造[[RBMK]]之后获得。<br><br>和[[砷青铜|Arsenic Bronze]]完全通用。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "BSCCO", "name": "BSCCO",
"icon": ["hbm:item.ingot_bscco", 1, 0], "icon": ["hbm:item.ingot_bscco", 1, 0],
"trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]],
"title": { "title": {
"en_US": "BSCCO", "en_US": "BSCCO",
"ru_RU": "BSCCO" "uk_UA": "Вісмут стронцій кальцій мідь оксид (BSCCO)",
}, "ru_RU": "BSCCO",
"zh_CN": "BSCCO超导体"
},
"content": { "content": {
"en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].",
"ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмута|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]]." "uk_UA": "Потужний надпровідник, що використовується у високоякісних платах та котушках для [[прискорювача часток|Particle Accelerator]]. Потребує [[вісмут|Bismuth]], і тому доступний лише після побудови [[РБМК|RBMK]].",
"ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмут|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]].",
"zh_CN": "强力的超导体,用于制作高等级的电路及用于[[粒子加速器|Particle Accelerator]]的线圈。需要[[铋|Bismuth]]制作,因此只能在建造[[RBMK]]后获得。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Cadmium", "name": "Cadmium",
"icon": ["hbm:item.ingot_cadmium", 1, 0], "icon": ["hbm:item.ingot_cadmium", 1, 0],
"trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]],
"title": { "title": {
"en_US": "Cadmium", "en_US": "Cadmium",
"ru_RU": "Кадмий" "uk_UA": "Кадмій",
}, "ru_RU": "Кадмий",
"zh_CN": "镉"
},
"content": { "content": {
"en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.",
"ru_RU": "Изготовлен путём обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]]." "uk_UA": "Виготовляється шляхом обробки листя гірчичної верби [[високоефективним розчинником|High-Performance Solvent]]. Використовується у [[полівінілхлориді|PVC]], пізньому альтернативному рецепті для [[гуми|Rubber]] та для [[кадмієвої сталі|Cadmium Steel]], яка виступає як замінник [[технецієвої сталі|Technetium Steel]].",
"ru_RU": "Изготовлен путём обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]].",
"zh_CN": "使用[[高性能溶剂|High-Performance Solvent]]处理芥子柳叶获取。用于制作[[PVC]],也可用于游戏后期的[[橡胶|Rubber]]替代配方,以及制作[[锝钢|Technetium Steel]]的替代品[[镉钢|Cadmium Steel]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Cadmium Steel", "name": "Cadmium Steel",
"icon": ["hbm:item.ingot_cdalloy", 1, 0], "icon": ["hbm:item.ingot_cdalloy", 1, 0],
"trigger": [["hbm:item.ingot_cdalloy"]], "trigger": [["hbm:item.ingot_cdalloy"]],
"title": { "title": {
"en_US": "Cadmium Steel", "en_US": "Cadmium Steel",
"ru_RU": "Кадмиевая сталь" "uk_UA": "Кадмієва сталь",
}, "ru_RU": "Кадмиевая сталь",
"zh_CN": "镉钢"
},
"content": { "content": {
"en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.", "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.",
"ru_RU": "Коррозионно-стойкий сплав, изготовленный из [[стали|Steel]] и [[кадмия|Cadmium]]. Альтернатива [[технециевой стали|Technetium Steel]] в большинстве рецептов." "uk_UA": "Корозійностійкий сплав, виготовлений зі [[сталі|Steel]] та [[кадмію|Cadmium]]. Альтернатива [[технецієвій сталі|Technetium Steel]] в більшості рецептів.",
"ru_RU": "Коррозионно-стойкий сплав, изготовленный из [[стали|Steel]] и [[кадмия|Cadmium]]. Альтернатива [[технециевой стали|Technetium Steel]] в большинстве рецептов.",
"zh_CN": "由[[钢|Steel]]和[[镉|Cadmium]]制成的耐腐蚀合金,可在大部分配方中替代[[锝钢|Technetium Steel]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Cinnabar", "name": "Cinnabar",
"icon": ["hbm:item.cinnebar", 1, 0], "icon": ["hbm:item.cinnebar", 1, 0],
"trigger": [["hbm:item.cinnebar"]], "trigger": [["hbm:item.cinnebar"]],
"title": { "title": {
"en_US": "Cinnabar", "en_US": "Cinnabar",
"ru_RU": "Киноварь" "uk_UA": "Кіновар",
}, "ru_RU": "Киноварь",
"zh_CN": "朱砂"
},
"content": { "content": {
"en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.",
"ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]]." "uk_UA": "Рідкісна руда. Може бути [[окислена|Ore Acidizer]] в 375mB [[ртуті|Mercury]] (3 краплі ртуті), або виплавлена у [[коксовій печі|Combination Oven]] в 100mB ртуті та трохи сірки. Здебільшого використовується як ранній спосіб отримання ртуті для виробництва [[деш|Desh]].",
"ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деш|Desh]].",
"zh_CN": "稀有矿物,可[[酸化|Ore Acidizer]]为相当于375mB流体的[[水银|Mercury]]液滴,也可[[炼焦|Combination Oven]]为100mB水银和一个硫粉。其主要作为获取生产[[Desh]]需要的水银的早期手段。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Coke", "name": "Coke",
"icon": ["hbm:item.coke", 1, 0], "icon": ["hbm:item.coke", 1, 0],
"trigger": [["hbm:item.coke", 1, 32767]], "trigger": [["hbm:item.coke", 1, 32767]],
"title": { "title": {
"en_US": "Coke", "en_US": "Coke",
"ru_RU": "Кокс" "uk_UA": "Кокс",
}, "ru_RU": "Кокс",
"zh_CN": "焦炭"
},
"content": { "content": {
"en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].<br><br>Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.<br><br>Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.<br><br>Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].<br><br>Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.<br><br>Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.<br><br>Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].",
"ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].<br><br>Угольный кокс можно получить путём переплавки угольных брикетов или комбинированной переплавки угля в различных формах.<br><br>Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.<br><br>Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путём коксования различных видов масла в [[коксовой установке|Coking Unit]]." "uk_UA": "Високочистий вуглець, має вдвічі вищу горючість, ніж вугілля. Може бути зпресований у [[графіт|Graphite]], використовується у різних рецептах [[сталі|Steel]] або як джерело вуглецю для [[ливарні|Crucible]].<br><br>Вугільний кокс можна виготовляти шляхом обсмаження вугільних брикетів або коксування вугілля в різних його формах.<br><br>Буровугільний кокс виготовляється з набагато дешевшого та менш потужного бурого вугілля майже таким самим способом, незважаючи на це, він має ті ж характеристики.<br><br>Нафтовий кокс виготовляється або з невугільних смол у [[коксовій печі|Combination Oven]], або шляхом коксування різних видів нафтопродуктів у [[коксовій установці|Coking Unit]].",
"ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].<br><br>Угольный кокс можно получить путём переплавки угольных брикетов или комбинированной переплавки угля в различных формах.<br><br>Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.<br><br>Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путём коксования различных видов масла в [[коксовой установке|Coking Unit]].",
"zh_CN": "高纯度的碳,其热值为煤炭的两倍。可被锻压为[[石墨|Graphite]],也可用于多种炼[[钢|Steel]]配方或作为[[坩埚|Crucible]]中碳的来源。<br><br>煤焦炭可通过在熔炉中烧炼煤球获取,或在复式炼焦炉中炼焦各种形式的煤炭获取。<br><br>褐煤焦炭可以以更廉价且品质更低的褐煤为原料,通过相同的方式获取, 尽管其特性与煤焦炭完全相同。<br><br>石油焦炭可通过在[[复式炼焦炉|Combination Oven]]中炼焦焦油(煤焦油除外)获取,也可通过在[[焦化装置|Coking Unit]]中焦化多种油获取。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Copper", "name": "Copper",
"icon": ["hbm:item.ingot_copper", 1, 0], "icon": ["hbm:item.ingot_copper", 1, 0],
"trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]],
"title": { "title": {
"en_US": "Copper", "en_US": "Copper",
"ru_RU": "Медь" "uk_UA": "Мідь",
}, "ru_RU": "Медь",
"zh_CN": "铜"
},
"content": { "content": {
"en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.<br><br>[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.<br><br>[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.<br><br>[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.<br><br>[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.<br><br>[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.<br><br>[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.<br><br>[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.<br><br>[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.<br><br>[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.<br><br>[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.",
"ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.<br><br>[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.<br><br>[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.<br><br>[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.<br><br>[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.<br><br>[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]]." "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.<br><br>[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.<br><br>[[Удосконалений сплав|Advanced Alloy]] — це потужний ранній інструментальний матеріал, який перевершує алмаз.<br><br>[[Гарматна бронза|Gunmetal]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.<br><br>[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.<br><br>[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].",
"ru_RU": "Распространённый ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.<br><br>[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.<br><br>[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.<br><br>[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.<br><br>[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.<br><br>[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для высокоуровневых квантовых схем и катушек [[ускорителя частиц|Particle Accelerator]].",
"zh_CN": "常见资源。纯铜主要用作结构材料,或在能够承受高温的设备中使用(作热导体); 铜的多种合金用途极广。<br><br>[[紫铜|Minecraft Grade Copper]]是红石和铜的合金,几乎所有电力设备都使用紫铜。<br><br>[[高级合金|Advanced Alloy]]是前期强力的装备材料,其性能优于钻石。<br><br>[[炮铜|Gunmetal]]是制作多种枪炮必不可少的材料,同时也用于制造弹壳。<br><br>[[铋青铜|Bismuth Bronze]]和[[砷青铜|Arsenic Bronze]]是 [[RBMK]] 后的材料,用于制作多种后期机器。<br><br>[[BSCCO]]是一种由铋衍生的超导体,高等级的量子电路和[[粒子加速器|Particle Accelerator]]线圈都需要BSCCO超导体制作。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Desh", "name": "Desh",
"icon": ["hbm:item.ingot_desh", 1, 0], "icon": ["hbm:item.ingot_desh", 1, 0],
"trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]],
"title": { "title": {
"en_US": "Desh", "en_US": "Desh",
"ru_RU": "Деш" "uk_UA": "Деш",
}, "ru_RU": "Деш",
"zh_CN": "Desh"
},
"content": { "content": {
"en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.<br><br>Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.<br><br>Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.",
"ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.<br><br>Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." "uk_UA": "Високоміцний робочий сплав, виготовлений на [[хімічному заводі|Chemical Plant]]. Потребує [[легку нафту|Light oil]] з базової переробки [[нафти|Crude Oil]], [[ртуть|Mercury]], побічний продукт [[[центрифугування|Centrifuge]] редстоунової руди та деш суміш, яка є просто [[подрібненими|Shredder]] шматками рідкоземельної руди.<br><br>Використовується в різних речах, особливо в інструментах та зброї. Деш інструменти повільні та відповідають лише залізному тіру, але є першими доступними незламними інструментами з багатьма режимами роботи.",
"ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[лёгкую нефть|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртуть|Mercury]], побочный продукт [[центрифугирования|Centrifuge]] красной руды, и смесь деш, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.<br><br>Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деш медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей.",
"zh_CN": "在[[化工厂|Chemical Plant]]中制成的高强度工作合金,需要基础[[原油|Crude Oil]]精炼的产物[[轻油|Light Oil]]、[[离心|Centrifuge]]红石矿石得到的副产物[[水银|Mercury]]以及[[粉碎|Shredder]]稀土矿石块得到的Desh混合物制作。<br><br>用于制作多种物品特别是工具和武器。Desh制工具挖掘速度较慢且挖掘等级 只相当于铁制工具,但其是最早可获得的无法破坏的工具之一,而且具有多个工具 能力。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Ferrouranium", "name": "Ferrouranium",
"icon": ["hbm:item.ingot_ferrouranium", 1, 0], "icon": ["hbm:item.ingot_ferrouranium", 1, 0],
"trigger": [["hbm:item.ingot_ferrouranium"]], "trigger": [["hbm:item.ingot_ferrouranium"]],
"title": { "title": {
"en_US": "Ferrouranium", "en_US": "Ferrouranium",
"ru_RU": "Ферроуран" "uk_UA": "Фероуран",
}, "ru_RU": "Ферроуран",
"zh_CN": "铀铁合金"
},
"content": { "content": {
"en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.",
"ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[тигле|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах." "uk_UA": "Сплав [[сталі|Steel]] та [[урану-238|Uranium-238]], виготовлений у [[ливарні|Crucible]]. В основному використовується в уранобетоні, деталях зброї та вибухових боєприпасах.",
"ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[плавильне|Crucible]]. В основном используется в дюкрете, деталях оружия и взрывных боеприпасах.",
"zh_CN": "[[钢|Steel]]与[[铀-238|Uranium-238]]的合金,在坩埚中制成。 主要用于制作贫铀混凝土、武器部件和高爆弹药。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Graphite", "name": "Graphite",
"icon": ["hbm:item.ingot_graphite", 1, 0], "icon": ["hbm:item.ingot_graphite", 1, 0],
"trigger": [["hbm:item.ingot_graphite"]], "trigger": [["hbm:item.ingot_graphite"]],
"title": { "title": {
"en_US": "Graphite", "en_US": "Graphite",
"ru_RU": "Графит" "uk_UA": "Графіт",
}, "ru_RU": "Графит",
"zh_CN": "石墨"
},
"content": { "content": {
"en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.",
"ru_RU": "Изготавливается путём прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]]." "uk_UA": "Виготовляється пресуванням коксу. Використовується в ядерних реакторах, графітових електродах для [[електричної дугової печі|Electric Arc Furnace]] або як джерело вуглецю в різних рецептах [[ливарні|Crucible]].",
"ru_RU": "Изготавливается путём прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]].",
"zh_CN": "通过锻压焦炭获取。用于核反应堆、[[电弧炉|Electric Arc Furnace]]电极,也可作为部分[[坩埚|Crucible]]配方中碳的来源。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Gunmetal", "name": "Gunmetal",
"icon": ["hbm:item.ingot_gunmetal", 1, 0], "icon": ["hbm:item.ingot_gunmetal", 1, 0],
"trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]],
"title": { "title": {
"en_US": "Gunmetal", "en_US": "Gunmetal",
"ru_RU": "Оружейный металл" "uk_UA": "Гарматна бронза",
}, "ru_RU": "Оружейный металл",
"zh_CN": "炮铜"
},
"content": { "content": {
"en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.", "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.",
"ru_RU": "Сплав из [[алюминия|Aluminium]] и [[меди|Copper]]. Может быть изготовлен на наковальне или более эффективно в [[роторной печи|Rotary Furnace]]. В основном используется для деталей оружия, а также для гильз большинства боеприпасов." "uk_UA": "Сплав [[алюмінію|Aluminium]] та [[міді|Copper]]. Може бути виготовлений на ковадлі або, що ефективніше, у [[роторній печі|Rotary Furnace]]. Використовується переважно для деталей зброї, а також для гільз більшості боєприпасів.",
"ru_RU": "Сплав из [[алюминия|Aluminium]] и [[меди|Copper]]. Может быть изготовлен на наковальне или более эффективно в [[роторной печи|Rotary Furnace]]. В основном используется для деталей оружия, а также для гильз большинства боеприпасов.",
"zh_CN": "[[铝|Aluminium]]和[[铜|Copper]]的合金。可在砧中制作,也可在[[回转炉|Rotary Furnace]]中更高效地制作。主要用于制作武器部件,也用于制作大部分弹壳。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "High-Speed Steel", "name": "High-Speed Steel",
"icon": ["hbm:item.ingot_dura_steel", 1, 0], "icon": ["hbm:item.ingot_dura_steel", 1, 0],
"trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]],
"title": { "title": {
"en_US": "High-Speed Steel", "en_US": "High-Speed Steel",
"ru_RU": "Высокоскоростная сталь" "uk_UA": "Швидкорізальна сталь",
}, "ru_RU": "Высокоскоростная сталь",
"zh_CN": "高速钢"
},
"content": { "content": {
"en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.", "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.",
"ru_RU": "Сплав из [[стали|Steel]], [[вольфрама|Tungsten]] и [[кобальта|Cobalt]], изготовленный в [[плавильне|Crucible]]. Создается в виде жидкого металла, требует отливки в форму слитка или пластины перед использованием." "uk_UA": "Сплав зі [[сталі|Steel]], [[вольфраму|Tungsten]] та [[кобальту|Cobalt]], виготовлений в [[ливарні|Crucible]]. Створюється у вигляді рідкого металу, перед використанням його необхідно відлити у форму зливка або пластини. <br><br>Використовується для виготовлення різального обладнання що працює на великих швидкостях.",
"ru_RU": "Сплав из [[стали|Steel]], [[вольфрама|Tungsten]] и [[кобальта|Cobalt]], изготовленный в [[плавильне|Crucible]]. Создается в виде жидкого металла, требует отливки в форму слитка или пластины перед использованием.",
"zh_CN": "[[钢|Steel]、[[钨|Tungsten]]、[[钴|Cobalt]]的合金,在[[坩埚|Crucible]]中制成。制造出的高速钢为熔融状态, 在使用前需要将其铸造成锭或板的形式。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Latex", "name": "Latex",
"icon": ["hbm:item.ingot_biorubber", 1, 0], "icon": ["hbm:item.ingot_biorubber", 1, 0],
"trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]],
"title": { "title": {
"en_US": "Latex", "en_US": "Latex",
"ru_RU": "Латекс" "uk_UA": "Латекс",
}, "ru_RU": "Латекс",
"zh_CN": "乳胶"
},
"content": { "content": {
"en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.",
"ru_RU": "Натуральная форма резины, добывается из одуванчиков или путём прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот." "uk_UA": "Натуральна форма гуми, яку можна отримати з кульбаб або пресуванням тропічного дерева. У всіх рецептах може бути замінена на [[гуму|Rubber]], але не навпаки.",
"ru_RU": "Натуральная форма резины, добывается из одуванчиков или путём прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот.",
"zh_CN": "橡胶的天然形态,可用蒲公英合成获得或锻压丛林木获得。可在所有配方中被[[橡胶|Rubber]]替代,反之则不行。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Lead", "name": "Lead",
"icon": ["hbm:item.ingot_lead", 1, 0], "icon": ["hbm:item.ingot_lead", 1, 0],
"trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]],
"title": { "title": {
"en_US": "Lead", "en_US": "Lead",
"ru_RU": "Свинец" "uk_UA": "Свинець",
}, "ru_RU": "Свинец",
"zh_CN": "铅"
},
"content": { "content": {
"en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.",
"ru_RU": "Обычный ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем." "uk_UA": "Поширений ресурс. В основному використовується для речей, пов'язаних з радіацією, та для боєприпасів, а також як припій для багатьох схем.",
"ru_RU": "Распространённый ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем.",
"zh_CN": "常见资源,主要用于涉及辐射的设备,也用于制作弹药,以及用作电路板的焊料。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Minecraft Grade Copper", "name": "Minecraft Grade Copper",
"icon": ["hbm:item.ingot_red_copper", 1, 0], "icon": ["hbm:item.ingot_red_copper", 1, 0],
"trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]],
"title": { "title": {
"en_US": "Minecraft Grade Copper (Red Copper)", "en_US": "Minecraft Grade Copper (Red Copper)",
"ru_RU": "Медь Minecraft (Красная медь)" "uk_UA": "Червона мідь (aka Minecraft Grade Copper)",
}, "ru_RU": "Красная медь",
"zh_CN": "紫铜"
},
"content": { "content": {
"en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.",
"ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проводов." "uk_UA": "Сплав, виготовлений з [[міді|Copper]] та редстоуну в рівному співвідношенні в [[доменній печі|Blast Furnace]]. Використовується майже у всій електриці, зазвичай у вигляді дроту.",
"ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проводов.",
"zh_CN": "等量的铜和红石在[[高炉|Blast Furnace]]中制作的合金。 主要以线的形式用于几乎所有电力设备。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Neptunium", "name": "Neptunium",
"icon": ["hbm:item.ingot_neptunium", 1, 0], "icon": ["hbm:item.ingot_neptunium", 1, 0],
"trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]],
"title": { "title": {
"en_US": "Neptunium", "en_US": "Neptunium",
"ru_RU": "Нептуний" "uk_UA": "Нептуній-237",
}, "ru_RU": "Нептуний",
"zh_CN": "镎"
},
"content": { "content": {
"en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].",
"ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." "uk_UA": "Ізотоп здатний до розщеплення, зазвичай міститься у відпрацьованому паливі [[урану-235|Uranium-235]]. Здебільшого використовується для ядерних реакторів у чистому вигляді як високозбагачене нептунієве паливо або в поєднанні з [[ураном-238|Uranium-238]] як середньозбагачене нептунієве паливо. Використовується в [[ВВЕР|PWR]] та [[РБМК|RBMK]].",
"ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе из [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]].",
"zh_CN": "一种易裂变同位素,主要存在于枯竭的[[铀-235|Uranium-235]]燃料中。 主要用于核反应堆,纯净的镎既可直接用作高浓缩度镎燃料,也可和[[铀-238|Uranium-238]]混合为中浓缩度镎燃料。可用于[[PWR]]和[[RBMK]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Plutonium-238", "name": "Plutonium-238",
"icon": ["hbm:item.billet_pu238", 1, 0], "icon": ["hbm:item.billet_pu238", 1, 0],
"trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]],
"title": { "title": {
"en_US": "Plutonium-238", "en_US": "Plutonium-238",
"ru_RU": "Плутоний-238" "uk_UA": "Плутоній-238",
}, "ru_RU": "Плутоний-238",
"zh_CN": "钚-238"
},
"content": { "content": {
"en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].<br><br>Moderately radioactive, very hot.", "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].<br><br>Moderately radioactive, very hot.",
"ru_RU": "Радиоизотоп, в основном используется в [[РТГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Плутоний-210-Бериллий для [[РБМК|RBMK]].<br><br>Умеренно радиоактивен, очень горячий." "uk_UA": "Радіоізотоп, що використовується переважно в [[РІТЕГ|RTG]]. Отримується з гексафториду [[плутонію|Plutonium]], або з різного ядерного палива, переважно того, що використовує [[уран-235|Uranium-235]]. Використовується з [[берилієм|Beryllium]] як Плутоній-238 берилієве джерело нейтронів в [[РБМК|RBMK]].<br><br>Помірно радіоактивний, дуже гарячий.",
"ru_RU": "Радиоизотоп, в основном используется в [[РИТЭГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках плутоний-210-бериллевых источниках для [[РБМК|RBMK]].<br><br>Умеренно радиоактивен, очень горячий.",
"zh_CN": "放射性同位素,主要用于[[RTG]]。可从六氟化[[钚|Plutonium]]中提取,也可从一些核燃料(主要是含[[铀-235|Uranium-235]]的种类)中分离得到。可与[[铍|Beryllium]]混合制成钚-238-铍中子源,用于[[RBMK]]反应堆。<br><br>放射性中等,高温。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Plutonium-239", "name": "Plutonium-239",
"icon": ["hbm:item.billet_pu239", 1, 0], "icon": ["hbm:item.billet_pu239", 1, 0],
"trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]],
"title": { "title": {
"en_US": "Plutonium-239", "en_US": "Plutonium-239",
"ru_RU": "Плутоний-239" "uk_UA": "Плутоній-239",
}, "ru_RU": "Плутоний-239",
"zh_CN": "钚-239"
},
"content": { "content": {
"en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.<br><br>Moderately radioactive.", "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.<br><br>Moderately radioactive.",
"ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённых топливах для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.<br><br>Умеренно радиоактивен." "uk_UA": "Перший здатний до поділу ізотоп [[плутонію|Plutonium]]. Може бути отриманий з багатьох видів відпрацьованого палива, що використовують [[уран-238|Uranium-238]] бо безпосередньо з [[реакторного плутонію|Reactor-Grade Plutonium]]. Використовується у високозбагаченому паливі для різних реакторів, змішується з іншими ізотопами для низькозбагаченого палива або як заряд у багатьох ядерних бомбах.<br><br>Помірно радіоактивний.",
"ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённом топливе для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.<br><br>Умеренно радиоактивен.",
"zh_CN": "[[钚|Plutonium]]主要的易裂变同位素,可从多种使用[[铀-238|Uranium-238]]的核燃料中提取,或直接从[[反应堆级钚|Reactor-Grade Plutonium]]中分离得到。可在多种反应堆中用作高浓缩度燃料,也可与其他同位素混合制成 浓缩度较低的燃料,还可在多种核弹中用作裂变材料。<br><br>放射性中等。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Plutonium-240", "name": "Plutonium-240",
"icon": ["hbm:item.billet_pu240", 1, 0], "icon": ["hbm:item.billet_pu240", 1, 0],
"trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]],
"title": { "title": {
"en_US": "Plutonium-240", "en_US": "Plutonium-240",
"ru_RU": "Плутоний-240" "uk_UA": "Плутоній-240",
}, "ru_RU": "Плутоний-240",
"zh_CN": "钚-240"
},
"content": { "content": {
"en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or in specialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].",
"ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]]." "uk_UA": "Не здатний до поділу ізотоп, що міститься в [[плутонії|Plutonium]] та [[реакторному плутонії|Reactor-Grade-Plutonium]]. Корисний лише при ручному виготовленні реакторного плутонію з [[плутонію-239|Plutonium-239]] або у спеціалізованих [[цирконієвих|Zirconium]] швидких розмножувачах для виготовлення [[плутонію-241|Plutonium-241]] в [[РБМК|RBMK]].",
"ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]].",
"zh_CN": "[[钚|Plutonium]]和[[反应堆级钚|Reactor-Grade Plutonium]]中存在的不易裂变同位素。仅有的用途是手动与[[钚-239|Plutonium-239]]混合为反应堆级钚,或与[[锆|Zirconium]]一同制成专用于增殖的ZFB燃料棒以在[[RBMK]]中生产[[钚-241|Plutonium-241]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Plutonium-241", "name": "Plutonium-241",
"icon": ["hbm:item.billet_pu241", 1, 0], "icon": ["hbm:item.billet_pu241", 1, 0],
"trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]],
"title": { "title": {
"en_US": "Plutonium-241", "en_US": "Plutonium-241",
"ru_RU": "Плутоний-241" "uk_UA": "Плутоній-241",
}, "ru_RU": "Плутоний-241",
"zh_CN": "钚-241"
},
"content": { "content": {
"en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.<br><br>Highly radioactive.", "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.<br><br>Highly radioactive.",
"ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].<br><br>Сильно радиоактивен." "uk_UA": "Другий здатний до поділу ізотоп [[плутонію|Plutonium]]. Може бути відновлений з відпрацьованого палива [[РБМК|RBMK]], багатого на [[плутоній-240|Plutonium-240]], а також з деяких видів [[цирконієвих|Zirconium]] швидких розмножувачів. Використовується лише в спеціальних паливних розмножувачах та як високозбагачене паливо, яке є потужнішим за свій аналог [[плутонію-239|Plutonium-239]]. Плутоній-241 в РБМК утворює [[америцій-241|Americium-241]] та [[америцій-242|Americium-242]] після переробки.<br><br>Високорадіоактивний.",
"ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанного топлива [[РБМК|RBMK]], богатого [[плутонием-240|Plutonium-240]], а также из определённых видов [[циркониевого|Zirconium]] топлива быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].<br><br>Сильно радиоактивен.",
"zh_CN": "[[钚|Plutonium]]次要的易裂变同位素,可从枯竭的富含[[钚-240|Plutonium-240]]的[[RBMK]]燃料及特定种类的[[锆|Zirconium]]快速增殖燃料ZFB中提取。 仅用于专用的增殖燃料,或用作比相应的[[钚-239|Plutonium-239]]燃料更强力的高浓缩度燃料。再处理用于RBMK的钚-241燃料时 可以得到[[镅-241|Americium-241]]和[[镅-242|Americium-242]]。<br><br>放射性较强。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Reactor-Grade Plutonium", "name": "Reactor-Grade Plutonium",
"icon": ["hbm:item.billet_pu_mix", 1, 0], "icon": ["hbm:item.billet_pu_mix", 1, 0],
"trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]],
"title": { "title": {
"en_US": "Reactor-Grade Plutonium", "en_US": "Reactor-Grade Plutonium",
"ru_RU": "Плутоний реакторного качества" "uk_UA": "Реакторний плутоній",
}, "ru_RU": "Плутоний реакторного качества",
"zh_CN": "反应堆级钚"
},
"content": { "content": {
"en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.<br><br>Moderately radioactive.", "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.<br><br>Moderately radioactive.",
"ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащённое плутониевое топливо.<br><br>Умеренно радиоактивен." "uk_UA": "Суміш [[плутонію-239|Plutonium-239]] та [[плутонію-240|Plutonium-240]]. Поширений результат переробки багатьох видів палива на основі [[урану|Uranium]], а також розмноження урану в [[Чиказькій дровітні|Chicago Pile]]. Використовується в багатьох реакторах як середньозбагачене плутонієве паливо.<br><br>Помірно радіоактивний.",
"ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащённое плутониевое топливо.<br><br>Умеренно радиоактивен.",
"zh_CN": "[[钚-239|Plutonium-239]]和[[钚-240|Plutonium-240]]的混合物。是再处理多种[[铀|Uranium]]基燃料的常见产物,也是在[[芝加哥反应堆|Chicago Pile]]中增殖铀的常见产物。可在多种反应堆中用作中浓缩度燃料。<br><br>放射性中等。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Plutonium", "name": "Plutonium",
"icon": ["hbm:item.ingot_plutonium", 1, 0], "icon": ["hbm:item.ingot_plutonium", 1, 0],
"trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]],
"title": { "title": {
"en_US": "Plutonium", "en_US": "Plutonium",
"ru_RU": "Плутоний" "uk_UA": "Плутоній",
}, "ru_RU": "Плутоний",
"zh_CN": "钚"
},
"content": { "content": {
"en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.<br><br>Moderately radioactive.<br><br>See also:<br>[[Plutonium-238]]<br>[[Plutonium-239]]<br>[[Plutonium-240]]<br>[[Plutonium-241]]", "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.<br><br>Moderately radioactive.<br><br>See also:<br>[[Plutonium-238]]<br>[[Plutonium-239]]<br>[[Plutonium-240]]<br>[[Plutonium-241]]",
"ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определенных рецептов [[циклотрона|Cyclotron]].<br><br>Умеренно радиоактивен.<br><br>См. также:<br>[[Плутоний-238|Plutonium-238]]<br>[[Плутоний-239|Plutonium-239]]<br>[[Плутоний-240|Plutonium-240]]<br>[[Плутоний-241|Plutonium-241]]" "uk_UA": "Рідкісна форма природнього плутонію, що складається з плутонію-238, 239 та 240. Плутоній у формі руди вимкнено за замовчуванням. Може бути перероблений в [[газовій центріфузі|Gas Centrifuge]] у формі гексафториду, або використовуватися для певних рецептів [[циклотрона|Cyclotron]].<br><br>Помірно радіоактивний.<br><br>Див. також:<br>[[Плутоній-238|Plutonium-238]]<br>[[Плутоній-239|Plutonium-239]]<br>[[Плутоній-240|Plutonium-240]]<br>[[Плутоній-241|Plutonium-241]]",
"ru_RU": "Редкая форма природного плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определённых рецептов [[циклотрона|Cyclotron]].<br><br>Умеренно радиоактивен.<br><br>См. также:<br>[[Плутоний-238|Plutonium-238]]<br>[[Плутоний-239|Plutonium-239]]<br>[[Плутоний-240|Plutonium-240]]<br>[[Плутоний-241|Plutonium-241]]",
"zh_CN": "不纯钚的稀有形式,由钚-238、钚-239、钚-240组成。 钚的矿石形式默认禁用。钚可以以六氟化钚的形式在[[气体离心机|Gas Centrifuge]]中处理,也用于某些[[回旋加速器|Cyclotron]]配方。<br><br>放射性中等。<br><br>另见:<br>[[钚-238|Plutonium-238]]<br>[[钚-239|Plutonium-239]]<br>[[钚-240|Plutonium-240]]<br>[[钚-241|Plutonium-241]]"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Polonium-210", "name": "Polonium-210",
"icon": ["hbm:item.billet_polonium", 1, 0], "icon": ["hbm:item.billet_polonium", 1, 0],
"trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]],
"title": { "title": {
"en_US": "Polonium-210", "en_US": "Polonium-210",
"ru_RU": "Полоний-210" "uk_UA": "Полоній-210",
}, "ru_RU": "Полоний-210",
"zh_CN": "钋-210"
},
"content": { "content": {
"en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].<br><br>Highly radioactive, very hot.", "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].<br><br>Highly radioactive, very hot.",
"ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РТГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].<br><br>Сильно радиоактивен, очень горячий." "uk_UA": "Радіоізотоп, отриманий в результаті переробки [[радій-226|Radium-226]]берилієвих джерел нейтронів. Використовується для [[РІТЕГ|RTG]] або з [[берилієм|Beryllium]] у полоній-210 берилієвих джерелах нейтронів для [[РБМК|RBMK]].<br><br>Високорадіоактивний, дуже гарячий.",
"ru_RU": "Радиоизотоп, получаемый переработкой нейтронных источников [[радия-226|Radium-226]]. Используется для [[РИТЭГ|RTG]] или с [[бериллием|Beryllium]] в полоний-210-бериллиевых источниках нейтронов для [[РБМК|RBMK]].<br><br>Сильно радиоактивен, очень горячий.",
"zh_CN": "再处理[[镭-226|Radium-226]]中子源时得到的放射性同位素。可用于[[RTG]],也可与[[铍|Beryllium]]混合为钋-210-铍中子源,用于[[RBMK]]。<br><br>放射性强,高温。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Polymer", "name": "Polymer",
"icon": ["hbm:item.ingot_polymer", 1, 0], "icon": ["hbm:item.ingot_polymer", 1, 0],
"trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]],
"title": { "title": {
"en_US": "Polymer", "en_US": "Polymer",
"ru_RU": "Полимер" "uk_UA": "Полімер",
}, "ru_RU": "Полимер",
"zh_CN": "聚合物"
},
"content": { "content": {
"en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].<br><br>Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].", "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].<br><br>Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].",
"ru_RU": "Полимер ('Тефлон') — первый доступный тип пластика. Требует [[нефтяного газа|Petroleum Gas]] и, следовательно, [[переработки нефти|Crude Oil]].<br><br>Полностью взаимозаменяем с [[бакелитом|Bakelite]], который становится доступным после [[крекинга нефти|Catalytic Cracking Tower]]." "uk_UA": "Полімер ('Тефлон') це перший доступний тип пластику. потребує [[нафтовий газ|Petroleum Gas]], а отже, [[переробку нафти|Crude Oil]].<br><br>Повністю взаємозамінний з [[карболітом|Bakelite]], який стає доступним після [[крекінгу нафти|Catalytic Cracking Tower]].",
"ru_RU": "Полимер ('Тефлон') — первый доступный тип пластика. Требует [[нефтяного газа|Petroleum Gas]] и, следовательно, [[переработки нефти|Crude Oil]].<br><br>Полностью взаимозаменяем с [[бакелитом|Bakelite]], который становится доступным после [[крекинга нефти|Catalytic Cracking Tower]].",
"zh_CN": "聚合物(“特氟龙”)是第一种可获取的塑料。需要[[石油气|Petroleum Gas]]制作,因此需要 [[原油处理|Crude Oil]]。和[[电木|Bakelite]]完全通用,后者在获得[[催化裂化塔|Catalytic Cracking Tower]]后才可制作。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Radium-226", "name": "Radium-226",
"icon": ["hbm:item.billet_ra226", 1, 0], "icon": ["hbm:item.billet_ra226", 1, 0],
"trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]],
"title": { "title": {
"en_US": "Radium-226", "en_US": "Radium-226",
"ru_RU": "Радий-226" "uk_UA": "Радій-226",
}, "ru_RU": "Радий-226",
"zh_CN": "镭-226"
},
"content": { "content": {
"en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.<br><br>Moderately radioactive.", "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.<br><br>Moderately radioactive.",
"ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.<br><br>Умеренно радиоактивен." "uk_UA": "Рідкісний радіоактивний матеріал, що міститься в [[уранових|Uranium]] та [[торієвих|Thorium-232]] рудах, можна отримати за допомогою [[центрифуги|Centrifuge]]. Використовується разом з [[берилієм|Beryllium]] у радій-226 берилієвих джерелах нейтронів, які необхідні для запуску [[Чиказької дровітні|Chicago Pile]], [[ВВЕР|PWR]], [[дослідницького реактора|Research Reactor]] та [[РБМК|RBMK]]. Перше доступне джерело нейтронів і часто найдешевше.<br><br>Помірно радіоактивний.",
"ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.<br><br>Умеренно радиоактивен.",
"zh_CN": "稀有的放射性物质,存在于[[铀|Uranium]]矿石和[[钍|Thorium]]矿石中,可通过[[离心机|Centrifuge]]提取。可与[[铍|Beryllium]]混合得到启动[[芝加哥反应堆|Chicago Pile]]、[[RBMK]]、[[PWR]]、[[研究型反应堆|]]必须的镭-226-铍中子源。是最早可获得的中子放射源,而且通常也是最便宜的。<br><br>放射性中等。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Rubber", "name": "Rubber",
"icon": ["hbm:item.ingot_rubber", 1, 0], "icon": ["hbm:item.ingot_rubber", 1, 0],
"trigger": [["hbm:item.ingot_rubber"]], "trigger": [["hbm:item.ingot_rubber"]],
"title": { "title": {
"en_US": "Rubber", "en_US": "Rubber",
"ru_RU": "Резина" "uk_UA": "Гума",
}, "ru_RU": "Резина",
"zh_CN": "橡胶"
},
"content": { "content": {
"en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.",
"ru_RU": "Продукт переработки нефти, получаемый из [[ненасыщенных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах." "uk_UA": "Нафтопродукт, отриманий з [[ненасичених вуглеводнів|Unsaturated Hydrocarbons]] та [[сірки|Sulfur]]. Для виробництва потрібна щонайменше [[вежа каталітичного крекінгу|Catalytic Cracking Tower]]. Може замінити [[латекс|Latex]] у всіх рецептах.",
"ru_RU": "Нефтепродукт, получаемый из [[непредельных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах.",
"zh_CN": "一种石化产品,衍生自[[不饱和烃|Unsaturated Hydrocarbons]]和[[硫|Sulfur]]。至少需要一台[[催化裂化塔|Catalytic Cracking Tower]]才能制作。可在所有配方中替代[[乳胶|Latex]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Silicon", "name": "Silicon",
"icon": ["hbm:item.billet_silicon", 1, 0], "icon": ["hbm:item.billet_silicon", 1, 0],
"trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]],
"title": { "title": {
"en_US": "Silicon", "en_US": "Silicon",
"ru_RU": "Кремний" "uk_UA": "Кремній",
}, "ru_RU": "Кремний",
"zh_CN": "硅"
},
"content": { "content": {
"en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.",
"ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, незер-кварц, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]]." "uk_UA": "Важливий матеріал для виробництва інтегральних плат та будь-якої електроніки, складнішої за аналогову плату. Виготовляється в [[електричній дуговій печі|Electric Arc Furnace]] використанням матеріалів, що містять діоксид кремнію, наприклад звичайного піску, пекельного кварцу, скловолокна, кременю або [[азбесту|Asbestos]]. Використовується переважно як пластини (тобто заготовки) які [[пресуються|Burner Press]] за допомогою штампа схеми, а потім перетворюються на різні типи мікрочіпів. Через необхідність у дуговій печі, кремній стає доступний після отримання [[полімеру|Polymer]], що вимагає переробки [[нафти|Crude Oil]].",
"ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, кварц незера, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]].",
"zh_CN": "生产集成电路以及其他比模拟电路更加复杂的电路的重要材料。可通过使用[[电弧炉|Electric Arc Furnace]]冶炼含二氧化硅的物品(如普通沙子、下界石英、玻璃纤维、燧石和[[石棉|Asbestos]])获取。主要的应用形式为在[[锻压机|Burner Press]]中经电路板锻模锻压的晶圆(即坯料),这些晶圆随后被用来制作多种微处理器。 因为其制作需要电弧炉,硅只能在获得[[聚合物|Polymer]]后制作,因此需要[[原油处理|Crude Oil]]。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Sodium", "name": "Sodium",
"icon": ["hbm:item.powder_sodium", 1, 0], "icon": ["hbm:item.powder_sodium", 1, 0],
"trigger": [["hbm:item.powder_sodium"]], "trigger": [["hbm:item.powder_sodium"]],
"title": { "title": {
"en_US": "Sodium", "en_US": "Sodium",
"ru_RU": "Натрий" "uk_UA": "Натрій",
}, "ru_RU": "Натрий",
"zh_CN": "钠"
},
"content": { "content": {
"en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.",
"ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифуги|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]]." "uk_UA": "В основному отримується з содаліту, дорогоцінного каменю, який зустрічається як побічний продукт [[центрифугування|Centrifuge]] багатьох руд. Використовується в рідкому вигляді як потужний охолоджувач для [[ВВЕР|PWR]].",
"ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифугования|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]].",
"zh_CN": "主要通过方钠石获取,方钠石可作为多种矿石的[[离心|Centrifuge]]副产物获得。其液体形式可用作强力的[[PWR]]冷却剂。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Steel", "name": "Steel",
"icon": ["hbm:item.ingot_steel", 1, 0], "icon": ["hbm:item.ingot_steel", 1, 0],
"trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]],
"title": { "title": {
"en_US": "Steel", "en_US": "Steel",
"ru_RU": "Сталь" "uk_UA": "Сталь",
}, "ru_RU": "Сталь",
"zh_CN": "钢"
},
"content": { "content": {
"en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].",
"ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путём комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]]." "uk_UA": "Покращена версія заліза, базовий матеріал. Використовується майже в усьому. Спочатку отримується шляхом поєднання вугілля та заліза в [[доменній печі|Blast Furnace]]. Покращені рецепти доступні пізніше в [[ливарні|Crucible]] та [[роторній печі|Rotary Furnace]].",
"ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путём комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]].",
"zh_CN": "铁的升级版,是一种基础金属,几乎所有东西都要用到钢。最初可通过在[[高炉|Blast Furnace]]中混合煤炭和铁获取,而之后也有通过[[坩埚|Crucible]]和[[回转炉|Rotary Furnace]]制作的高级配方。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Sulfur", "name": "Sulfur",
"icon": ["hbm:item.sulfur", 1, 0], "icon": ["hbm:item.sulfur", 1, 0],
"trigger": [["hbm:item.sulfur"]], "trigger": [["hbm:item.sulfur"]],
"title": { "title": {
"en_US": "Sulfur", "en_US": "Sulfur",
"ru_RU": "Сера" "uk_UA": "Сірка",
}, "ru_RU": "Сера",
"zh_CN": "硫"
},
"content": { "content": {
"en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.",
"ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя." "uk_UA": "Звичайна руда, зустрічається у великих кількостях в пеклі. Використовується в різних речах, таких як [[сірчана кислота|Sulfuric Acid]], [[гума|Rubber]] та єлоукейку для отримання гексафториду [[урану|Uranium]]. Також може використовуватися для виготовлення пороху, сірників або як жовтий барвник.",
"ru_RU": "Распространённая руда, в больших количествах встречается в Незере. Используется для различных вещей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в жёлтом кеке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.",
"zh_CN": "常见矿物,在下界的生成量更多。用于多种配方,例如制作[[硫酸|Sulfuric Acid]]和 [[橡胶|Rubber]],也用于制作黄饼,作为合成六氟化[[铀|Uranium]]的原料。 也可用于制作火药、火柴,以及用作黄色染料。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Tantalium", "name": "Tantalium",
"icon": ["hbm:item.ingot_tantalium", 1, 0], "icon": ["hbm:item.ingot_tantalium", 1, 0],
"trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]],
"title": { "title": {
"en_US": "Tantalium", "en_US": "Tantalium",
"ru_RU": "Тантал" "uk_UA": "Тантал",
}, "ru_RU": "Тантал",
"zh_CN": "钽"
},
"content": { "content": {
"en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.",
"ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб." "uk_UA": "Тантал ('Танталій') можна отримати з [[колтану|Coltan]] який зустрічається лише в одному конкретному регіоні світу. Використовується переважно для танталових конденсаторів, які є критично важливими для блоків керування, що використовуються в більшості ядерних бомб.",
"ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одной определённой области мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб.",
"zh_CN": "钽可从仅生成在特定区域的[[钶钽铁矿|Coltan]]中提取。 主要用于制作钽电容器,钽电容器可作为大多数核弹所需的控制单元的重要原料。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Technetium", "name": "Technetium",
"icon": ["hbm:item.ingot_technetium", 1, 0], "icon": ["hbm:item.ingot_technetium", 1, 0],
"trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]],
"title": { "title": {
"en_US": "Technetium", "en_US": "Technetium",
"ru_RU": "Технеций" "uk_UA": "Технецій-99",
}, "ru_RU": "Технеций",
"zh_CN": "锝"
},
"content": { "content": {
"en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.<br><br>Primarily used for [[technetium steel|Technetium Steel]].<br><br>Moderately radioactive.", "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.<br><br>Primarily used for [[technetium steel|Technetium Steel]].<br><br>Moderately radioactive.",
"ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых топлив [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.<br><br>В основном используется для [[технециевой стали|Technetium Steel]].<br><br>Умеренно радиоактивен." "uk_UA": "Синтетичний метал, перероблений з палива [[ЦИРНОКС|ZIRNOX]] або [[ВВЕР|PWR]] на ранніх етапах. також може бути отриманий з деяких видів палива [[РБМК|RBMK]] або [[корінної руди|Bedrock Ore]] за допомогою високоефективного розчинника.<br><br>В основному використовується для [[технецієвої сталі|Technetium Steel]].<br><br>Помірно радіоактивний.",
"ru_RU": "Синтетический металл, получаемый в результате переработки топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых видов топлива [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.<br><br>В основном используется для [[технециевой стали|Technetium Steel]].<br><br>Умеренно радиоактивен.",
"zh_CN": "人工合成的金属元素,初期可通过再处理[[锆诺克斯|ZIRNOX]]和[[PWR]]的枯竭燃料获取。也可通过回收某些[[RBMK]]燃料或使用高性能溶剂处理[[基岩矿石|Bedrock Ore]]获取。<br><br>主要用于制作[[锝钢|Technetium Steel]]。<br><br>放射性中等。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Technetium Steel", "name": "Technetium Steel",
"icon": ["hbm:item.ingot_tcalloy", 1, 0], "icon": ["hbm:item.ingot_tcalloy", 1, 0],
"trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]],
"title": { "title": {
"en_US": "Technetium Steel", "en_US": "Technetium Steel",
"ru_RU": "Технециевая сталь" "uk_UA": "Технецієва сталь",
}, "ru_RU": "Технециевая сталь",
"zh_CN": "锝钢"
},
"content": { "content": {
"en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.<br><br>Fully interchangeable with [[cadmium steel|Cadmium Steel]].", "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.<br><br>Fully interchangeable with [[cadmium steel|Cadmium Steel]].",
"ru_RU": "Сплав из [[стали|Steel]] и [[технеция|Technetium]]. Устойчив к коррозии, используется в более прочных резервуарах для жидкостей и во многих продвинутых машинах. Доступен после [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]], так как технеций является синтетическим.<br><br>Полностью взаимозаменяем с [[кадмиевой сталью|Cadmium Steel]]." "uk_UA": "Сплав, виготовлений зі [[сталі|Steel]] та [[технецію|Technetium]]. Стійкий до корозії, використовується в більш міцних резервуарах для рідини та в багатьох передових машинах. Одержується після [[ЦИРНОКС|ZIRNOX]] або [[ВВЕР|PWR]], оскільки технецій є синтетичним.<br><br>Повністю взаємозамінний з [[кадмієвою сталлю|Cadmium Steel]].",
"ru_RU": "Сплав из [[стали|Steel]] и [[технеция|Technetium]]. Устойчив к коррозии, используется в более прочных резервуарах для жидкостей и во многих продвинутых машинах. Доступен после [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]], так как технеций является синтетическим.<br><br>Полностью взаимозаменяем с [[кадмиевой сталью|Cadmium Steel]].",
"zh_CN": "[[钢|Steel]]和[[锝|Technetium]]的合金,耐腐蚀,用于制作强度更高的液体储罐和多种高级机器。 由于锝需要人工制造,因此只能在建造[[锆诺克斯|ZIRNOX]]或[[PWR]]之后获取。<br><br>和[[镉钢|Cadmium Steel]]完全通用。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Thorium-232", "name": "Thorium-232",
"icon": ["hbm:item.billet_th232", 1, 0], "icon": ["hbm:item.billet_th232", 1, 0],
"trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]],
"title": { "title": {
"en_US": "Thorium-232", "en_US": "Thorium-232",
"ru_RU": "Торий-232" "uk_UA": "Торій-232",
}, "ru_RU": "Торий-232",
"zh_CN": "钍-232"
},
"content": { "content": {
"en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.<br><br>Slightly radioactive.", "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.<br><br>Slightly radioactive.",
"ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топлива, производные от тория, обычно экономичны, но не очень мощные. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.<br><br>Слабо радиоактивен." "uk_UA": "Фертильний (тобто придатний до розмноження) ізотоп який дає [[уран-233|Uranium-233]]. Може бути опромінений в [[РБМК|RBMK]] для отримання [[торієвого палива|Thorium Fuel]] або поєднаний з ураном-233. Паливо, отримане з торію, зазвичай економічне, але не дуже потужне. Також використовується у вигляді [[рідкої торієвої солі|Liquid Thorium Salt]], потужному теплоносію [[ВВЕР|PWR]] (перетворюючи його у реактор на розплавах солей) який швидко дає тонни урану-233.<br><br>Слабко радіоактивний.",
"ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топливо, производное от тория, обычно экономично, но не очень мощное. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.<br><br>Слабо радиоактивен.",
"zh_CN": "可增殖的同位素,增殖后产生[[铀-233|Uranium-233]]。可通过在[[RBMK]]中辐照或与铀-233混合得到[[钍燃料|Thorium Fuel]]。 总体来讲,由钍衍生的燃料成本较低,但能量不高。 也可用于[[液态钍盐|Liquid Thorium Salt]],其可作为一种强力的[[PWR]]冷却剂(同时将反应堆变成熔盐堆),同时快速产生大量铀-233。<br><br>略有放射性。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Uranium-233", "name": "Uranium-233",
"icon": ["hbm:item.billet_u233", 1, 0], "icon": ["hbm:item.billet_u233", 1, 0],
"trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]],
"title": { "title": {
"en_US": "Uranium-233", "en_US": "Uranium-233",
"ru_RU": "Уран-233" "uk_UA": "Уран-233",
}, "ru_RU": "Уран-233",
"zh_CN": "铀-233"
},
"content": { "content": {
"en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].<br><br>Moderately radioactive.", "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].<br><br>Moderately radioactive.",
"ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].<br><br>Умеренно радиоактивен." "uk_UA": "Штучний ізотоп урану здатного до розщеплення (тобто придатного для реакторів), отримується шляхом переробки [[палива на основі торію|Thorium Fuel]]. Високозбагачене паливо з урану-233, як правило, потужніше, ніж паливо, отримане з [[урану-235|Uranium-235]].<br><br>Помірно радіоактивний.",
"ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащённое топливо из урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].<br><br>Умеренно радиоактивен.",
"zh_CN": "人工制造的易裂变(即能够用于反应堆)的铀同位素,可通过再处理[[钍基燃料|Thorium Fuel]]获取。总体来讲,高浓缩度的铀-233较基于铀-235的燃料更加强力。<br><br>放射性中等。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Uranium-235", "name": "Uranium-235",
"icon": ["hbm:item.billet_u235", 1, 0], "icon": ["hbm:item.billet_u235", 1, 0],
"trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]],
"title": { "title": {
"en_US": "Uranium-235", "en_US": "Uranium-235",
"ru_RU": "Уран-235" "uk_UA": "Уран-235",
}, "ru_RU": "Уран-235",
"zh_CN": "铀-235"
},
"content": { "content": {
"en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].<br><br>Moderately radioactive.", "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].<br><br>Moderately radioactive.",
"ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].<br><br>Умеренно радиоактивен." "uk_UA": "Збагачений уран. Придатний до розщеплення, використовується в деяких реакторах безпосередньо як високозбагачене паливо або змішується з [[ураном-238|Uranium-238]] для отримання середньозбагаченого уранового палива. Збройового класу. Спочатку отримується шялхом переробки [[гексафториду урану|Uranium Hexafluoride]] у каскаді з чотирьох [[газових центрифуг|Gas Centriuge]], пізніше доступний шляхом розділення [[природного урану|Uranium]] за допомогою [[камери лазерного розділення ізотопів|SILEX]].<br><br>Помірно радіоактивний.",
"ru_RU": "Обогащённый уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенного уранового топлива. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].<br><br>Умеренно радиоактивен.",
"zh_CN": "浓缩的铀,容易裂变,可直接作为高浓缩度燃料用于某些反应堆,也可与[[铀-238|Uranium-238]]混合回中浓缩度的铀燃料。 也是一种武器级的同位素。最初可通过在四台串联的[[气体离心机|Gas Centrifuge]]中处理[[六氟化铀|Uranium Hexafluoride]]获取,之后也可直接在[[SILEX]]中 分离[[天然铀|Uranium]]获取。<br><br>放射性中等。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Uranium-238", "name": "Uranium-238",
"icon": ["hbm:item.billet_u238", 1, 0], "icon": ["hbm:item.billet_u238", 1, 0],
"trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]],
"title": { "title": {
"en_US": "Uranium-238", "en_US": "Uranium-238",
"ru_RU": "Уран-238" "uk_UA": "Уран-238",
}, "ru_RU": "Уран-238",
"zh_CN": "铀-238"
},
"content": { "content": {
"en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.<br><br>Slightly radioactive.", "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.<br><br>Slightly radioactive.",
"ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроурание|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].<br><br>Слабо радиоактивен." "uk_UA": "Збіднений уран, не ділиться (тобто не придатний для безпосереднього використання в реакторах). В основному побічний продукт збагачення [[урану|Uranium]]. Використовується у виготовленні [[фероурану|Ferrouranium]], [[боєприпасів зі збідненим ураном|Depleted Uranium Ammo]] та для певного низькозбагаченого палива. Паливо, що містить уран-238 зазвичай дає корисний [[плутоній-239|Plutonium-239]] під час переробки.<br><br>Слабо радіоактивний.",
"ru_RU": "Обеднённый уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроуране|Ferrouranium]], для [[боеприпасов с обеднённым ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных видов топлива. Виды топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].<br><br>Слабо радиоактивен.",
"zh_CN": "贫铀,不能作为燃料(即无法直接被反应堆使用)。通常作为[[铀|Uranium]]浓缩过程中的副产品。用于制造[[铀铁合金|Ferrouranium]][[贫铀弹药|Depleted Uranium Ammo]]和低浓缩度燃料。含有铀-238的燃料在再处理时会产生有用的[[钚-239|Plutonium-239]]。<br><br>略有放射性。"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Uranium", "name": "Uranium",
"icon": ["hbm:item.ingot_uranium", 1, 0], "icon": ["hbm:item.ingot_uranium", 1, 0],
"trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]],
"title": { "title": {
"en_US": "Uranium", "en_US": "Uranium",
"ru_RU": "Уран" "uk_UA": "Уран",
}, "ru_RU": "Уран",
"zh_CN": "铀"
},
"content": { "content": {
"en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.<br><br>See also:<br>[[Uranium-233]]<br>[[Uranium-235]]<br>[[Uranium-238]]", "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.<br><br>See also:<br>[[Uranium-233]]<br>[[Uranium-235]]<br>[[Uranium-238]]",
"ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.<br><br>См. также:<br>[[Уран-233|Uranium-233]]<br>[[Уран-235|Uranium-235]]<br>[[Уран-238|Uranium-238]]" "uk_UA": "Природний уран, слабо радіоактивний. Сам по собі не дуже ділиться, його можна збагачувати, перетворюючи на [[гексафторид урану|Uranium Hexafluoride]] та оброблюючи в [[газових центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] та [[Чиказька дровітня|Chigago Pile]] можуть використовувати природний уран як паливо без збагачення.<br><br>Див. також:<br>[[Уран-233|Uranium-233]]<br>[[Уран-235|Uranium-235]]<br>[[Уран-238|Uranium-238]]",
"ru_RU": "Природный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащён путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать природный уран как топливо без обогащения.<br><br>См. также:<br>[[Уран-233|Uranium-233]]<br>[[Уран-235|Uranium-235]]<br>[[Уран-238|Uranium-238]]",
"zh_CN": "天然铀,具有微弱放射性。本身不太容易裂变,但可通过将其变为[[六氟化铀|Uranium Hexafluoride]]并在[[气体离心机|Gas Centrifuge]]中处理以将其浓缩。[[锆诺克斯|ZIRNOX]][[RBMK]]和[[芝加哥反应堆|Chigago Pile]]可直接将未浓缩铀用作燃料。<br><br>另见:<br>[[铀-233|Uranium-233]]<br>[[铀-235|Uranium-235]]<br>[[铀-238|Uranium-238]]"
} }
} }

View File

@ -1,13 +1,17 @@
{ {
"name": "Weapon Steel", "name": "Weapon Steel",
"icon": ["hbm:item.ingot_weaponsteel", 1, 0], "icon": ["hbm:item.ingot_weaponsteel", 1, 0],
"trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]],
"title": { "title": {
"en_US": "Weapon Steel", "en_US": "Weapon Steel",
"ru_RU": "Оружейная сталь" "uk_UA": "Збройова сталь",
}, "ru_RU": "Оружейная сталь",
"zh_CN": "武器级钢"
},
"content": { "content": {
"en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads.", "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads.",
"ru_RU": "Высококачественная версия [[стали|Steel]], изготовленная в [[роторной печи|Rotary Furnace]]. Требует [[коксовый газ|Coker Gas]] и, следовательно, [[коксовую установку|Coker Unit]]. Используется во многих оружиях среднего этапа игры, модификациях оружия и боеголовках ракет." "uk_UA": "Високочиста версія [[сталі|Steel]] виготовлена в [[роторній печі|Rotary Furnace]]. Потребує [[коксовий газ|Coker Gas]], тому і [[коксову установку|Coker Unit]]. Використовується в багатьох видах мідгеймової зброї, модифікаціях зброї та ракетних боєголовках.",
"ru_RU": "Высококачественная версия [[стали|Steel]], изготовленная в [[роторной печи|Rotary Furnace]]. Требует [[коксовый газ|Coker Gas]] и, следовательно, [[коксовую установку|Coker Unit]]. Используется во многих оружиях среднего этапа игры, модификациях оружия и боеголовках ракет.",
"zh_CN": "在[[回转炉|Rotary Furnace]]中制作的高纯度[[钢|Steel]]。需要[[焦化气|Coker Gas]],焦化气则需要[[焦化装置|Coker Unit]]来制作。用于游戏中期的武器制作和改装以及导弹弹头的制作。"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 B

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 B

After

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 403 B

After

Width:  |  Height:  |  Size: 404 B

Some files were not shown because too many files have changed in this diff Show More