Compare commits

...

76 Commits

Author SHA1 Message Date
Boblet
6498777602 wheels of pussy 2026-03-20 14:24:36 +01:00
Bob
399f51097d mh yes plas ma 2026-03-19 23:56:55 +01:00
Boblet
6c68778fd0 watch the fuck out i smoke weed, on grandma's grave i have peed 2026-03-19 16:08:01 +01:00
Boblet
da0d355565 homosexual garfield be like: "i love lasagna.....and cock!" 2026-03-18 16:32:18 +01:00
Boblet
94d37e3910 mhhhh, donuts 2026-03-17 15:16:27 +01:00
HbmMods
f50f93ec6c
Merge pull request #2788 from sten104/master
well i guess i'm committing this too
2026-03-17 08:09:35 +01:00
Boblet
25271de81c can i have uhhhhhh labels 2026-03-16 16:39:07 +01:00
Stefano
24f53f4997 plate stamps and siren tracks moved to the anvil 2026-03-15 23:09:16 +01:00
Bob
59d5db4f66 balls (reverb) 2026-03-15 21:30:49 +01:00
sten104
274aaede2b
oops 2026-03-15 17:51:21 +01:00
sten104
abe6efc52e
consistency? in this economy???
the steel sword is now consistent with every single other ntm sword, and now looks like a medieval longsword
2026-03-15 17:42:09 +01:00
Bob
c408a66e97 i cast: ovorial obliteration 2026-03-14 13:42:19 +01:00
HbmMods
0bf5a82391
Merge pull request #2782 from WolfEclipses/master
Why is the floor wet (Texture modification)
2026-03-14 13:40:57 +01:00
Wolf
037f2a636b Displays fluid location for ore acidizer. 2026-03-13 17:07:32 -04:00
Boblet
e8bbc53e36 RoR gauges 2026-03-13 13:45:06 +01:00
HbmMods
2e27763092
Merge pull request #2776 from Creeper-banner/bob
Update simplified Chinese localization
2026-03-13 08:09:57 +01:00
HbmMods
b97970404a
Merge pull request #2777 from arantirnecrolord/master
update uk_UA
2026-03-13 08:09:36 +01:00
HbmMods
827aaf13e6
Merge pull request #2779 from Xavier-Apoapsis/rbmk-qmaw-patches
Rbmk qmaw patches
2026-03-13 08:09:15 +01:00
Xavier-Apoapsis
bf0ad9be66
Update heater.json 2026-03-12 17:21:28 -06:00
Xavier-Apoapsis
185c049635
Update crane.json
bluh
2026-03-12 17:16:19 -06:00
Xavier-Apoapsis
b8cccbca16
Update cooler.json 2026-03-12 17:14:37 -06:00
Xavier-Apoapsis
eaacba72c8
Update controlrod.json 2026-03-12 17:11:20 -06:00
Xavier-Apoapsis
6678b76187
Update boiler.json 2026-03-12 17:05:43 -06:00
Xavier-Apoapsis
132bc10e50
Update controlauto.json 2026-03-12 16:48:10 -06:00
Xavier-Apoapsis
2d9e645f9e
Update controlauto.json 2026-03-12 16:46:06 -06:00
Bob
f81adc816b yeag 2026-03-12 23:43:08 +01:00
Xavier-Apoapsis
bfc7790cae
Update console.json 2026-03-12 16:36:19 -06:00
Xavier-Apoapsis
92706fdba3
Update absorber.json 2026-03-12 16:22:50 -06:00
arantirnecrolord
4d28c091e1
yup, this is an update 2026-03-12 18:42:56 +02:00
Creeper-banner
6d3aaaf045
Update zh_CN.lang 2026-03-12 22:35:06 +08:00
Boblet
06c8928229 but-on, press but-on, yep yep yep yep yep 2026-03-12 15:25:16 +01:00
HbmMods
2049a05649
Merge pull request #2751 from nuhyuh/master
New door textures but fixed
2026-03-11 14:54:22 +01:00
HbmMods
d80c0767d6
Merge pull request #2773 from sten104/master
less hideous steel tools
2026-03-11 14:53:50 +01:00
Boblet
816ead946d configurable RoR button panel 2026-03-11 11:44:03 +01:00
sten104
7303ecbff6
less hideous steel tools 2026-03-10 19:50:43 +01:00
Boblet
a95b3761c6 challenge pissing 2026-03-10 16:52:19 +01:00
Bob
d9353f5cc8 eee 2026-03-09 22:35:21 +01:00
HbmMods
e9f59c7920
Merge pull request #2761 from legendarydoge30/branch
files
2026-03-09 16:53:06 +01:00
Boblet
892e844f49 wheels of pussy
my dick's stuck in a car door
the exhaust pipe, a hole so tight
handjob by toyota
2026-03-09 15:47:48 +01:00
LegendaryDoge30
8bc5cf1c9d files
files
2026-03-09 13:55:24 +01:00
HbmMods
6ffc310f9a
Merge pull request #2758 from RayzerHan/master
Update ru_RU lang
2026-03-09 08:30:25 +01:00
Bob
93e9f35f05 fuck you lex 2026-03-08 22:36:53 +01:00
Raaaaaaaaaay
1ccad02a73
Merge branch 'HbmMods:master' into master 2026-03-08 23:04:22 +02:00
Raaaaaaaaaay
2396b23288
боль я ее чувствую 2026-03-08 15:00:04 +02:00
Raaaaaaaaaay
e3f43a5dc2
ладно 2026-03-08 14:27:14 +02:00
Raaaaaaaaaay
f6cca3fda6
Merge branch 'HbmMods:master' into master 2026-03-08 14:12:41 +02:00
nuhyuh
f721b321fc
66% more trefoil per trefoil 2026-03-07 12:34:02 +01:00
nuhyuh
09dd62b71d
65% more trefoil per trefoil 2026-03-07 12:33:40 +01:00
nuhyuh
7ecafd73fc
Unblowing my shi smoove off 2026-03-07 12:32:31 +01:00
nuhyuh
0b418c2f51
Account for new doors 2 2026-03-07 11:38:24 +01:00
nuhyuh
ae5f5d0ac1
Account for new doors 2026-03-07 11:37:48 +01:00
nuhyuh
2766bb5b73
doorening part one 2026-03-07 11:29:24 +01:00
Raaaaaaaaaay
60f7541a8d
Снова из за вас 2026-03-06 23:41:12 +02:00
Raaaaaaaaaay
aa23ba19bc
Фух. 2026-03-06 23:23:38 +02:00
Raaaaaaaaaay
3c01133374
дауш 2026-03-06 23:01:12 +02:00
Raaaaaaaaaay
be1ef22576
RTG 2026-03-06 20:20:40 +02:00
Raaaaaaaaaay
7ecdb61226
Merge branch 'HbmMods:master' into master 2026-03-06 16:01:01 +02:00
Raaaaaaaaaay
be9373e652
Merge branch 'HbmMods:master' into master 2026-03-06 15:13:50 +02:00
Raaaaaaaaaay
e123b37a35
пока чтооооооо 2026-03-06 14:28:33 +02:00
Raaaaaaaaaay
5d7fe1ac66
I'm going to rip your arm and head off, who did this? 2026-03-06 14:04:13 +02:00
Raaaaaaaaaay
5253f9e818
Merge branch 'HbmMods:master' into master 2026-03-06 12:43:59 +02:00
Raaaaaaaaaay
1bd1c325be
Крутость не нужна. 2026-03-05 23:00:38 +02:00
Raaaaaaaaaay
e547ee5b79
Bismuth Fast Breeding 2026-03-05 21:40:25 +02:00
Raaaaaaaaaay
7577ffd665
Merge branch 'HbmMods:master' into master 2026-03-05 21:38:13 +02:00
Raaaaaaaaaay
73cb0e1db4
апчхи 2026-03-05 15:49:39 +02:00
Raaaaaaaaaay
c8bfa6edcc
Two 2026-03-05 15:40:49 +02:00
Raaaaaaaaaay
96ae2a9a9c
One 2026-03-05 15:35:48 +02:00
Raaaaaaaaaay
8146e68eaa
Merge branch 'HbmMods:master' into master 2026-03-05 15:27:14 +02:00
Raaaaaaaaaay
b108bc1f57
Фиксики 2026-03-03 17:39:30 +02:00
Raaaaaaaaaay
21cd3a9eeb
Merge branch 'HbmMods:master' into master 2026-03-03 17:03:15 +02:00
Raaaaaaaaaay
a1fc206006
its no fine 2026-02-27 09:46:14 +02:00
Raaaaaaaaaay
2fc4e04b4c
its fine 2026-02-27 09:23:22 +02:00
Raaaaaaaaaay
c98c83aa5d
Merge branch 'HbmMods:master' into master 2026-02-27 09:22:12 +02:00
Raaaaaaaaaay
4f8b43ac89
Блять 2026-02-26 23:51:37 +02:00
Raaaaaaaaaay
f7e271629d
Merge branch 'HbmMods:master' into master 2026-02-26 23:49:58 +02:00
Raaaaaaaaaay
82dd6f6358
Я забыл, и потерялся 2026-02-25 15:58:29 +02:00
131 changed files with 14125 additions and 3104 deletions

View File

@ -1,84 +1,19 @@
## Added
* Reasim RBMK control rods
* Come in manual and auto variants, but not moderated
* The same as standard control rods, except they need 5kHE/t
* Have only a single cable connection at the bottom
* Replace standard RBMK control rods when 528 mode is enabled
* New RBMK fuels
* UZrH
* Made from MEU, zirconium and hydrogen in the PUREX
* More efficient than MEU but with less durability
* Has a new thermal coefficient mechanic, once the core heat exceeds 1000°C, reactivity drops down
* Very high diffusion, meaning the core is considerably colder than on most fuels
* RBMK Display panel
* Single block that shows a 7x7 view of a linked RBMK
* Doesn't have a GUI or tooltips or anything, only acts as a monitor
* Ideal for >15x15 reactor monitoring, since the displays are tileable
* Plasma forge
* Plasma-powered assembly machine
* Used to produce lategame items that until now were regular assembler recipes
## Changed
* Updated RBMK visuals
* The indentations on most RBMK passive elements have been removed, heavily reducing tri count and allowing face culling, making RBMKs render much more efficiently
* The caps no longer render as part of the TESR and instead use much more performant ISBRH rendering
* Due to most passive elements no longer needing TESRs for their caps, most parts no longer use any TESRs at all
* This should fix various issues regarding lower-end hardware (especially Pojav) as well as issues with TESRs getting skipped due to the sheer number of things to render
* Control rods now show their set color as part of the model
* Improved buzzsaw tree detection
* Instead of just clearing a pillar, it now tries to detect branches
* The max size of trees that can be successfully harvested is now way bigger
* This means that things like 2x2 jungle trees can now be automated
* Annihilating radioactive items now creates that item's radiation value x5 as chunk radiation
* The maximum per tick is a 1000 RAD/s increase to prevent world-destroying radiation levels from annihilating demon cores
* The water door now has a skin that isn't rusted with less contrast
* The containment door now has a lead-colored skin with a trefoil on it
* Using a screwdriver on a beamline now toggles a window which flashes if a particle passes
* Particles now start slowly and accelerate, instead of passing a fixed 10 components per tick, particles only do 1 component per tick, which increases by 1 every 1,000 momentum
* RBMK absorber columns now heat up when exposed to neutrons
* The type of neutron does not matter, only the quantity
* 20 flux equals 1°C heatup
* RBMK passive cooling has changed
* The default value is now 2.5°C/t instead of 1
* This value only applies to rods that have exposed sides, i.e. the edges of a reactor
* There is now a second passive cooling variable used for rods on the inside (`dialPassiveCoolingInner`, 0.1°C/t by default)
* The effective passive cooling value is scaled smoothly depending on how many sides are exposed, using `dialPassiveCoolingInner` with no exposed sides and `dialPassiveCooling` for rods with four exposed sides
* Simply put, spindly RBMKs are now way less desirable, structural columns no longer just debuff the reactor and reactors that actually look like reactors are now more powerful
* Chanced the way RBMK coolers work
* Instead of using cryogel, coolers use 50mB of cold PFM per tick and return an equal amount of warm PFM
* In a 5x5 square around the cooler, all components are cooled down by 200°C per tick, down to a minimum of 20°C
* This renders that section of the reactor unsuitable for boiling water, however it means very high heat fuels can be used
* Cold PFM is used up at a steady rate, even if the reactor is already cold
* The RBMK structural column recipe now uses only half as many metal plates, and rubber instead of insulator
* Changed the way reasim RBMK fuel channels work
* Instead of six randomized neutron streams, reasim rods now use eight 75% strength streams in an even star pattern
* The pattern is rotated in a random multiple of 9° (i.e. four possible angle variations)
* RBMK steam channels now spawn steam particles if water is voided due to the steam buffer not being emptied in time
* Rebalanced 528 mode
* Increased the chance for most precision assembler recipes to succeed
* Increased the chance for items to be salvaged by recycling
* In expensive mode, the chances have been increased drastically compared to the old values
* Added RoR functionality to some RBMK columns
* Manual control rods can have their target height set, allowing them to be remote controlled without a console
* All fuel channels can now provide values such as column heat, fuel skin heat, depletion and xenon poison
* RBMK consoles and displays no longer show the temperature value of control rods as a red gradient, instead they show the control rods' color grouping
* RBMK fuel rods can no longer be removed by hand if the skin temp exceeds 200°C
* RBMK fuel rods can no longer be cycled via autoloader if the skin temp exceeds 1,000°C
* For fully automated high powered reactors, it may now be necessary to read the depletion via RoR and then throttle the reactor with control rods
* RBMK cranes can still remove any fuel, no matter how hot it is
* RBMK fuel channels will now undergo meltdown if it is broken when a fuel rod is still loaded with a heat temperature of at least 1,500°C
* The annihilator now creates pollution when destroying fluids, with a 200% pollution modifier
* MOX fuel now uses plutonium-239 instead of RGP, and more uranium-238
* This makes it a decent option for pu239 from the chicago pile without having to use HEP239
* Doubled bismuth and tantalum yields from high-performance solvent bedrock ore processing
* Hoppers and buckets can now be made out of steel
* RoR gauges now show the lowest and highest configured value on the actual gauge
* The steel sword now looks like a medival broad sword with the appropriate scale
* All remaining items have been removed from the template folder, siren tracks and plate stamps are now made in the anvil
* Gerald assembly now requires stellar flux
* The restrictions for firing Folly (using the scope, waiting for the startup) no longer apply to NPCs (which can never fulfill them anyway), allowing them to actually use it
## Fixed
* Fixed NBTStack serialization omitting the stack size most of the time, preventing deserialization (mainly in the precision assembler config)
* Fixed precision assembler not being listed in the creative inventory
* Fixed OpenComputers integration for the CCGT
* Fixed tool abilities switching when clicking on a block with a special interaction
* Fixed outdated info on the QMAW pages involving AA and BSCCO due to the fusion reactor update
* Fixed ammo container giving 9mm instead of .22 for the akimbo target pistols
* Fixed RBMK control rods incorrectly showing up in the red group when no group is set
* Fixed fluid output direction being incorrect on boilers, causing them to break with pipe anchors
* Fixed an issue where the industrial turbine's tendency to round up the possible operation counter would cause it to use up steam it doesn't actually have
* Fixed yet another issue with the settings tool when copying automatic control rod settings
* Fixed quad rocket launcher steering not working right
* Fixed standard and industrial boilers not respecting the heating efficiency value of the fluid trait
* Fixed copy tool integration for RBMK automatic control rods (again)
* Fixed size 15 dual kerosene thruster not rendering at all
* Fixed HUD/jetpack toggle popup not working at all on multiplayer servers
* Fixed assembly machine NEI handler not being able to handle all thirteen inputs at once
* Fixed RBMK fuel channels playing the meltdown sound when broken while hot with meltdowns disabled

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=5628
mod_build_number=5634
credits=HbMinecraft,\
\ rodolphito (explosion algorithms),\

View File

@ -8,14 +8,7 @@ import com.hbm.blocks.generic.*;
import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect;
import com.hbm.blocks.machine.*;
import com.hbm.blocks.machine.albion.*;
import com.hbm.blocks.machine.fusion.MachineFusionBoiler;
import com.hbm.blocks.machine.fusion.MachineFusionBreeder;
import com.hbm.blocks.machine.fusion.MachineFusionCollector;
import com.hbm.blocks.machine.fusion.MachineFusionCoupler;
import com.hbm.blocks.machine.fusion.MachineFusionKlystron;
import com.hbm.blocks.machine.fusion.MachineFusionKlystronCreative;
import com.hbm.blocks.machine.fusion.MachineFusionMHDT;
import com.hbm.blocks.machine.fusion.MachineFusionTorus;
import com.hbm.blocks.machine.fusion.*;
import com.hbm.blocks.machine.pile.*;
import com.hbm.blocks.machine.rbmk.*;
import com.hbm.blocks.network.*;
@ -887,6 +880,7 @@ public class ModBlocks {
public static Block fusion_boiler;
public static Block fusion_mhdt;
public static Block fusion_coupler;
public static Block fusion_plasma_forge;
public static Block machine_icf_press;
public static Block icf_component;
@ -1097,6 +1091,8 @@ public class ModBlocks {
public static Block rbmk_console;
public static Block rbmk_crane_console;
public static Block rbmk_display;
public static Block rbmk_key_pad;
public static Block rbmk_gauge;
public static Block rbmk_autoloader;
public static Block rbmk_loader;
public static Block rbmk_steam_inlet;
@ -2001,6 +1997,7 @@ public class ModBlocks {
fusion_boiler = new MachineFusionBoiler().setBlockName("fusion_boiler").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_mhdt = new MachineFusionMHDT().setBlockName("fusion_mhdt").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_coupler = new MachineFusionCoupler().setBlockName("fusion_coupler").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_plasma_forge = new MachineFusionPlasmaForge().setBlockName("fusion_plasma_forge").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_icf_press = new MachineICFPress().setBlockName("machine_icf_press").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
icf = new MachineICF().setBlockName("icf").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -2117,6 +2114,8 @@ public class ModBlocks {
rbmk_console = new RBMKConsole().setBlockName("rbmk_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_console");
rbmk_crane_console = new RBMKCraneConsole().setBlockName("rbmk_crane_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_crane_console");
rbmk_display = new RBMKDisplay().setBlockName("rbmk_display").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display");
rbmk_key_pad = new RBMKKeyPad().setBlockName("rbmk_key_pad").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display");
rbmk_gauge = new RBMKGauge().setBlockName("rbmk_gauge").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display");
rbmk_autoloader = new RBMKAutoloader().setBlockName("rbmk_autoloader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_autoloader");
rbmk_loader = new RBMKLoader(Material.iron).setBlockName("rbmk_loader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_loader");
rbmk_steam_inlet = new RBMKInlet(Material.iron).setBlockName("rbmk_steam_inlet").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_steam_inlet");
@ -3109,6 +3108,8 @@ public class ModBlocks {
GameRegistry.registerBlock(rbmk_console, rbmk_console.getUnlocalizedName());
GameRegistry.registerBlock(rbmk_crane_console, rbmk_crane_console.getUnlocalizedName());
register(rbmk_display);
register(rbmk_key_pad);
register(rbmk_gauge);
register(rbmk_autoloader);
register(rbmk_loader);
register(rbmk_steam_inlet);
@ -3358,6 +3359,7 @@ public class ModBlocks {
register(fusion_boiler);
register(fusion_mhdt);
register(fusion_coupler);
register(fusion_plasma_forge);
register(watz_element);
register(watz_cooler);

View File

@ -0,0 +1,38 @@
package com.hbm.blocks.machine.fusion;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.fusion.TileEntityFusionPlasmaForge;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionPlasmaForge extends BlockDummyable {
public MachineFusionPlasmaForge() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionPlasmaForge();
if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid();
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override public int[] getDimensions() { return new int[] { 4, 0, 5, 5, 5, 5 }; }
@Override public int getOffset() { return 5; }
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
}
}

View File

@ -225,7 +225,9 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo
world.spawnEntityInWorld(new EntityItem(world, pos[0] + 0.5, pos[1] + 0.5 + RBMKDials.getColumnHeight(world), pos[2] + 0.5, new ItemStack(ModItems.rbmk_lid_glass)));
}
rbmk.explodeOnBroken = false;
world.setBlockMetadataWithNotify(pos[0], pos[1], pos[2], DIR_NO_LID.ordinal() + offset, 3);
rbmk.explodeOnBroken = true;
}
return true;

View File

@ -1,57 +1,19 @@
package com.hbm.blocks.machine.rbmk;
import org.lwjgl.opengl.GL11;
import com.hbm.render.block.ISBRHUniversal;
import com.hbm.render.util.RenderBlocksNT;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKDisplay;
import api.hbm.block.IToolable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class RBMKDisplay extends BlockContainer implements ISBRHUniversal, IToolable {
public RBMKDisplay() {
super(Material.iron);
}
@Override public int getRenderType() { return renderID; }
@Override public boolean isOpaqueCube() { return false; }
@Override public boolean renderAsNormalBlock() { return false; }
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) {
return true;
}
public class RBMKDisplay extends RBMKMiniPanelBase implements IToolable {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityRBMKDisplay();
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) {
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2);
if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2);
if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2);
if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if(tool != ToolType.SCREWDRIVER)
@ -64,33 +26,4 @@ public class RBMKDisplay extends BlockContainer implements ISBRHUniversal, ITool
}
return true;
}
@Override
public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) {
GL11.glPushMatrix();
RenderBlocks renderer = (RenderBlocks) renderBlocks;
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
renderer.setRenderBounds(0.25D, 0D, 0D, 1D, 1D, 1D);
RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks) {
RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world);
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
int meta = world.getBlockMetadata(x, y, z);
renderer.setRenderBounds(meta == 4 ? 0.25D : 0D, 0D, meta == 2 ? 0.25D : 0D, meta == 5 ? 0.75D : 1D, 1D, meta == 3 ? 0.75D : 1D);
renderer.renderStandardBlock(block, x, y, z);
return true;
}
}

View File

@ -0,0 +1,25 @@
package com.hbm.blocks.machine.rbmk;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKGauge;
import api.hbm.block.IToolable;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class RBMKGauge extends RBMKMiniPanelBase implements IToolable {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityRBMKGauge();
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if(tool != ToolType.SCREWDRIVER) return false;
if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
return true;
}
}

View File

@ -0,0 +1,51 @@
package com.hbm.blocks.machine.rbmk;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKKeyPad;
import api.hbm.block.IToolable;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class RBMKKeyPad extends RBMKMiniPanelBase implements IToolable {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityRBMKKeyPad();
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if(tool != ToolType.SCREWDRIVER) return false;
if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
return true;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) return true;
if(player.isSneaking()) return false;
if(hitX != 0 && hitX != 1 && hitZ != 0 && hitZ != 1 && side != 0 && side != 1) {
TileEntityRBMKKeyPad tile = (TileEntityRBMKKeyPad) world.getTileEntity(x, y, z);
int meta = world.getBlockMetadata(x, y, z);
int indexHit = 0;
if(meta == 2 && hitX < 0.5) indexHit = 1;
if(meta == 3 && hitX > 0.5) indexHit = 1;
if(meta == 4 && hitZ > 0.5) indexHit = 1;
if(meta == 5 && hitZ < 0.5) indexHit = 1;
if(hitY < 0.5) indexHit += 2;
if(!tile.keys[indexHit].active) return false;
tile.keys[indexHit].click();
}
return true;
}
}

View File

@ -0,0 +1,87 @@
package com.hbm.blocks.machine.rbmk;
import org.lwjgl.opengl.GL11;
import com.hbm.lib.Library;
import com.hbm.render.block.ISBRHUniversal;
import com.hbm.render.util.RenderBlocksNT;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public abstract class RBMKMiniPanelBase extends BlockContainer implements ISBRHUniversal {
public RBMKMiniPanelBase() {
super(Material.iron);
}
@Override public int getRenderType() { return renderID; }
@Override public boolean isOpaqueCube() { return false; }
@Override public boolean renderAsNormalBlock() { return false; }
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) {
return true;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
int meta = world.getBlockMetadata(x, y, z);
setBlockBounds(0, 0, 0, 1, 1, 1);
if(meta == Library.POS_X.ordinal()) setBlockBounds(0, 0, 0, 0.75F, 1, 1);
if(meta == Library.POS_Z.ordinal()) setBlockBounds(0, 0, 0, 1, 1, 0.75F);
if(meta == Library.NEG_X.ordinal()) setBlockBounds(0.25F, 0, 0, 1, 1, 1);
if(meta == Library.NEG_Z.ordinal()) setBlockBounds(0, 0, 0.25F, 1, 1, 1);
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) {
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2);
if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2);
if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2);
if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
@Override
public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) {
GL11.glPushMatrix();
RenderBlocks renderer = (RenderBlocks) renderBlocks;
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
renderer.setRenderBounds(0.25D, 0D, 0D, 1D, 1D, 1D);
RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks) {
RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world);
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
int meta = world.getBlockMetadata(x, y, z);
renderer.setRenderBounds(meta == 4 ? 0.25D : 0D, 0D, meta == 2 ? 0.25D : 0D, meta == 5 ? 0.75D : 1D, 1D, meta == 3 ? 0.75D : 1D);
renderer.renderStandardBlock(block, x, y, z);
return true;
}
}

View File

@ -5,6 +5,7 @@ import com.hbm.items.machine.ItemRBMKLid;
import com.hbm.items.machine.ItemRBMKRod;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.rbmk.RBMKDials;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRod;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
@ -41,9 +42,9 @@ public class RBMKRod extends RBMKBase {
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
if(meta >= this.offset) {
if(meta >= this.offset && !RBMKDials.getMeltdownsDisabled(world)) {
TileEntityRBMKRod tile = (TileEntityRBMKRod) world.getTileEntity(x, y, z);
if(tile != null) {
if(tile != null && tile.explodeOnBroken) {
if(tile.slots[0] != null && tile.slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getHullHeat(tile.slots[0]) >= 1500) {
tile.meltdown();
}
@ -81,7 +82,7 @@ public class RBMKRod extends RBMKBase {
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemRBMKRod && rbmk.slots[0] == null) {
rbmk.slots[0] = player.getHeldItem().copy();
rbmk.slots[0].stackSize = 1;
player.getHeldItem().stackSize--;
if(!player.capabilities.isCreativeMode) player.getHeldItem().stackSize--;
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F);
return false;
}

View File

@ -1,6 +1,6 @@
package com.hbm.blocks.machine.rbmk;
import com.hbm.tileentity.TileEntityProxyInventory;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRodReaSim;
import net.minecraft.tileentity.TileEntity;
@ -14,13 +14,8 @@ public class RBMKRodReaSim extends RBMKRod {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= this.offset)
return new TileEntityRBMKRodReaSim();
if(hasExtra(meta))
return new TileEntityProxyInventory();
if(meta >= this.offset) return new TileEntityRBMKRodReaSim();
if(hasExtra(meta)) return new TileEntityProxyCombo().inventory();
return null;
}
}

View File

@ -9,17 +9,15 @@ import li.cil.oc.api.machine.Arguments;
import li.cil.oc.api.machine.Callback;
import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.SimpleComponent;
import org.lwjgl.input.Keyboard;
import com.hbm.blocks.ILookOverlay;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.gui.GUIPump;
import com.hbm.items.machine.IItemFluidIdentifier;
import com.hbm.main.MainRegistry;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.BobMathUtil;
@ -35,10 +33,6 @@ import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
@ -50,7 +44,6 @@ import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
@ -346,98 +339,4 @@ public class FluidPump extends BlockContainer implements INBTBlockTransformable,
throw new NoSuchMethodException();
}
}
@SideOnly(Side.CLIENT)
public static class GUIPump extends GuiScreen {
protected final TileEntityFluidPump pump;
private GuiTextField textPlacementPriority;
private GuiButton buttonPressure;
private GuiButton buttonPriority;
private int pressure;
private int priority;
public GUIPump(TileEntityFluidPump pump) {
this.pump = pump;
this.pressure = pump.tank[0].getPressure();
this.priority = pump.priority.ordinal();
}
@Override
public void initGui() {
Keyboard.enableRepeatEvents(true);
textPlacementPriority = new GuiTextField(fontRendererObj, this.width / 2 - 150, 100, 90, 20);
textPlacementPriority.setText("" + pump.bufferSize);
textPlacementPriority.setMaxStringLength(5);
buttonPressure = new GuiButton(0, this.width / 2 - 50, 100, 90, 20, pressure + " PU");
buttonPriority = new GuiButton(1, this.width / 2 + 50, 100, 90, 20, pump.priority.name());
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
drawDefaultBackground();
drawString(fontRendererObj, "Throughput:", this.width / 2 - 150, 80, 0xA0A0A0);
drawString(fontRendererObj, "(max. 10,000mB)", this.width / 2 - 150, 90, 0xA0A0A0);
textPlacementPriority.drawTextBox();
drawString(fontRendererObj, "Pressure:", this.width / 2 - 50, 80, 0xA0A0A0);
buttonPressure.drawButton(mc, mouseX, mouseY);
drawString(fontRendererObj, "Priority:", this.width / 2 + 50, 80, 0xA0A0A0);
buttonPriority.drawButton(mc, mouseX, mouseY);
super.drawScreen(mouseX, mouseY, partialTicks);
}
@Override
public void onGuiClosed() {
Keyboard.enableRepeatEvents(false);
NBTTagCompound data = new NBTTagCompound();
data.setByte("pressure", (byte) pressure);
data.setByte("priority", (byte) priority);
try { data.setInteger("capacity", Integer.parseInt(textPlacementPriority.getText())); } catch(Exception ex) {}
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, pump.xCoord, pump.yCoord, pump.zCoord));
}
@Override
protected void keyTyped(char typedChar, int keyCode) {
super.keyTyped(typedChar, keyCode);
if(textPlacementPriority.textboxKeyTyped(typedChar, keyCode)) return;
if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.thePlayer.closeScreen();
}
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
textPlacementPriority.mouseClicked(mouseX, mouseY, mouseButton);
if(buttonPressure.mousePressed(mc, mouseX, mouseY)) {
this.pressure++;
if(pressure > 5) pressure = 0;
buttonPressure.displayString = pressure + " PU";
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
}
if(buttonPriority.mousePressed(mc, mouseX, mouseY)) {
this.priority++;
if(priority >= ConnectionPriority.values().length) priority = 0;
buttonPriority.displayString = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority).name();
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
}
}
@Override public boolean doesGuiPauseGame() { return false; }
}
}

View File

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

View File

@ -174,8 +174,8 @@ public class MineralRecipes {
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_neptunium_fuel, 3), new Object[] { ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_neptunium });
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_neptunium_fuel, 1), new Object[] { "nuggetNeptunium237", "nuggetNeptunium237", "nuggetUranium238", "nuggetUranium238", "nuggetUranium238", "nuggetUranium238" }));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_neptunium_fuel, 1), new Object[] { "tinyNp237", "tinyNp237", "tinyU238", "tinyU238", "tinyU238", "tinyU238" }));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_mox_fuel, 3), new Object[] { ModItems.billet_uranium_fuel, "billetUranium238", "billetPlutonium239" });
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_mox_fuel, 1), new Object[] { "nuggetPlutonium239", "nuggetPlutonium239", "nuggetUranium238", "nuggetUranium238", ModItems.nugget_uranium_fuel, ModItems.nugget_uranium_fuel }));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_mox_fuel, 3), new Object[] { ModItems.billet_uranium_fuel, ModItems.billet_uranium_fuel, "billetPlutonium239" }));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_mox_fuel, 1), new Object[] { "nuggetPlutonium239", "nuggetPlutonium239", ModItems.nugget_uranium_fuel, ModItems.nugget_uranium_fuel, ModItems.nugget_uranium_fuel, ModItems.nugget_uranium_fuel }));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_schrabidium_fuel, 3), new Object[] { ModItems.billet_schrabidium, ModItems.billet_neptunium, ModItems.billet_beryllium });
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_schrabidium_fuel, 1), new Object[] { ModItems.nugget_schrabidium, ModItems.nugget_schrabidium, "nuggetNeptunium237", "nuggetNeptunium237", ModItems.nugget_beryllium, ModItems.nugget_beryllium }));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_schrabidium_fuel, 1), new Object[] { ModItems.nugget_schrabidium, ModItems.nugget_schrabidium, "tinyNp237", "tinyNp237", ModItems.nugget_beryllium, ModItems.nugget_beryllium }));

View File

@ -5,12 +5,15 @@ import com.hbm.handler.ArmorModHandler;
import com.hbm.handler.HbmKeybinds.EnumKeybind;
import com.hbm.items.armor.ItemModShield;
import com.hbm.main.MainRegistry;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.PlayerInformPacket;
import com.hbm.tileentity.IGUIProvider;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
@ -86,9 +89,9 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
this.enableBackpack = !this.enableBackpack;
if(this.enableBackpack)
MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "Jetpack ON", MainRegistry.proxy.ID_JETPACK);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(EnumChatFormatting.GREEN + "Jetpack ON", MainRegistry.proxy.ID_JETPACK, 1000), (EntityPlayerMP) player);
else
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Jetpack OFF", MainRegistry.proxy.ID_JETPACK);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(EnumChatFormatting.RED + "Jetpack OFF", MainRegistry.proxy.ID_JETPACK, 1000), (EntityPlayerMP) player);
}
}
if (key == EnumKeybind.TOGGLE_MAGNET){
@ -96,9 +99,9 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
this.enableMagnet = !this.enableMagnet;
if(this.enableMagnet)
MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "Magnet ON", MainRegistry.proxy.ID_MAGNET);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(EnumChatFormatting.GREEN + "Magnet ON", MainRegistry.proxy.ID_MAGNET, 1000), (EntityPlayerMP) player);
else
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Magnet OFF", MainRegistry.proxy.ID_MAGNET);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(EnumChatFormatting.GREEN + "Magnet ON", MainRegistry.proxy.ID_MAGNET, 1000), (EntityPlayerMP) player);
}
}
if(key == EnumKeybind.TOGGLE_HEAD) {
@ -107,9 +110,9 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
this.enableHUD = !this.enableHUD;
if(this.enableHUD)
MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "HUD ON", MainRegistry.proxy.ID_HUD);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(EnumChatFormatting.GREEN + "HUD ON", MainRegistry.proxy.ID_HUD, 1000), (EntityPlayerMP) player);
else
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "HUD OFF", MainRegistry.proxy.ID_HUD);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(EnumChatFormatting.GREEN + "HUD ON", MainRegistry.proxy.ID_HUD, 1000), (EntityPlayerMP) player);
}
}

View File

@ -3,6 +3,9 @@ package com.hbm.handler.nei;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.recipes.AssemblyMachineRecipes;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.inventory.recipes.loader.GenericRecipes;
import net.minecraft.block.Block;
public class AssemblyMachineRecipeHandler extends NEIGenericRecipeHandler {
@ -10,9 +13,20 @@ public class AssemblyMachineRecipeHandler extends NEIGenericRecipeHandler {
super(ModBlocks.machine_assembly_machine.getLocalizedName(), AssemblyMachineRecipes.INSTANCE, ModBlocks.machine_assembly_machine);
}
public AssemblyMachineRecipeHandler(String displayName, GenericRecipes recipeSet, Block... machines) { super(displayName, recipeSet, machines); }
@Override public String getRecipeID() { return "ntmAssemblyMachine"; }
@Override public int getInputXOffset(GenericRecipe recipe, int inputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; }
@Override public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; }
@Override public int getMachineXOffset(GenericRecipe recipe) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; }
@Override public int getInputXOffset(GenericRecipe recipe, int inputCount) { return inputCount > 12 ? -9 : inputCount > 9 ? 18 : 0; }
@Override public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return getOffset(recipe); }
@Override public int getMachineXOffset(GenericRecipe recipe) { return getOffset(recipe); }
public int getOffset(GenericRecipe recipe) {
int length = 0;
if(recipe.inputItem != null) length += recipe.inputItem.length;
if(recipe.inputFluid != null) length += recipe.inputFluid.length;
if(length > 12) return 27;
if(length > 9) return 18;
return 0;
}
}

View File

@ -0,0 +1,13 @@
package com.hbm.handler.nei;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.recipes.PlasmaForgeRecipes;
public class PlasmaForgeRecipeHandler extends AssemblyMachineRecipeHandler {
public PlasmaForgeRecipeHandler() {
super(ModBlocks.fusion_plasma_forge.getLocalizedName(), PlasmaForgeRecipes.INSTANCE, ModBlocks.fusion_plasma_forge);
}
@Override public String getRecipeID() { return "ntmPlasmaForge"; }
}

View File

@ -271,6 +271,11 @@ public class RecipesCommon {
public List<ItemStack> extractForNEI() {
return Arrays.asList(new ItemStack[] {this.toStack()});
}
@Override
public String toString() {
return this.stacksize + "x" + (this.item != null ? this.item.getUnlocalizedName() : "null") + "@" + this.meta;
}
}
public static class NBTStack extends ComparableStack {
@ -374,6 +379,11 @@ public class RecipesCommon {
return 0;
}
@Override
public String toString() {
return this.stacksize + "x" + (this.item != null ? this.item.getUnlocalizedName() : "null") + "@" + this.meta + "?" + this.nbt;
}
}
public static class OreDictStack extends AStack {
@ -490,6 +500,11 @@ public class RecipesCommon {
return false;
return true;
}
@Override
public String toString() {
return this.stacksize + "x" + this.name;
}
}
public static class MetaBlock {

View File

@ -0,0 +1,70 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotCraftingOutput;
import com.hbm.inventory.SlotNonRetarded;
import com.hbm.items.ModItems;
import com.hbm.util.InventoryUtil;
import api.hbm.energymk2.IBatteryItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerMachinePlasmaForge extends ContainerBase {
public ContainerMachinePlasmaForge(InventoryPlayer invPlayer, IInventory assembler) {
super(invPlayer, assembler);
// Battery
this.addSlotToContainer(new SlotNonRetarded(assembler, 0, 152, 82));
// Schematic
this.addSlotToContainer(new SlotNonRetarded(assembler, 1, 35, 81));
// Booster
this.addSlotToContainer(new SlotNonRetarded(assembler, 2, 98, 116));
// Input
this.addSlots(assembler, 3, 8, 18, 3, 4);
// Output
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, assembler, 15, 116, 36));
this.playerInv(invPlayer, 8, 162);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack slotOriginal = null;
Slot slot = (Slot) this.inventorySlots.get(index);
if(slot != null && slot.getHasStack()) {
ItemStack slotStack = slot.getStack();
slotOriginal = slotStack.copy();
if(index <= tile.getSizeInventory() - 1) {
SlotCraftingOutput.checkAchievements(player, slotStack);
if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else {
if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) {
if(!this.mergeItemStack(slotStack, 0, 1, false)) return null;
} else if(slotOriginal.getItem() == ModItems.blueprints) {
if(!this.mergeItemStack(slotStack, 1, 2, false)) return null;
} else {
if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 2, 15, false)) return null;
}
}
if(slotStack.stackSize == 0) {
slot.putStack(null);
} else {
slot.onSlotChanged();
}
slot.onPickupFromSlot(player, slotStack);
}
return slotOriginal;
}
}

View File

@ -31,7 +31,7 @@ public class ContainerRBMKRod extends Container {
@Override
public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) {
if(index == 0) {
if(index == 0 && !player.capabilities.isCreativeMode) {
if(rbmk.coldEnoughForManual()) {
return super.slotClick(index, button, mode, player);
@ -58,7 +58,7 @@ public class ContainerRBMKRod extends Container {
var3 = var5.copy();
if(par2 <= rbmk.getSizeInventory() - 1) {
if(!rbmk.coldEnoughForManual()) return null;
if(!rbmk.coldEnoughForManual() && !player.capabilities.isCreativeMode) return null;
if(!this.mergeItemStack(var5, rbmk.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}

View File

@ -1,66 +1,21 @@
package com.hbm.inventory.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
//@invtweaks.api.container.ChestContainer(rowSize = 5)
public class ContainerSafe extends Container {
@invtweaks.api.container.ChestContainer(rowSize = 5, isLargeChest = false)
public class ContainerSafe extends ContainerCrateBase {
private IInventory diFurnace;
public ContainerSafe(InventoryPlayer invPlayer, IInventory tedf) {
diFurnace = tedf;
public ContainerSafe(InventoryPlayer invPlayer, IInventory te) {
super(invPlayer,te);
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 5; j++) {
this.addSlotToContainer(new Slot(tedf, j + i * 5, 8 + j * 18 + 18 * 2, 18 + i * 18));
this.addSlotToContainer(new Slot(te, j + i * 5, 8 + j * 18 + 18 * 2, 18 + i * 18));
}
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18 + 2));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 2));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) {
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if(var4 != null && var4.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if(par2 <= diFurnace.getSizeInventory() - 1) {
if(!this.mergeItemStack(var5, diFurnace.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else if(!this.mergeItemStack(var5, 0, diFurnace.getSizeInventory(), false)) {
return null;
}
if(var5.stackSize == 0) {
var4.putStack((ItemStack) null);
} else {
var4.onSlotChanged();
}
}
return var3;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return diFurnace.isUseableByPlayer(player);
this.playerInv(invPlayer, 8, 32 + 18 * 3, 90 + (18 * 3));
}
}

View File

@ -0,0 +1,140 @@
package com.hbm.inventory.gui;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerMachinePlasmaForge;
import com.hbm.inventory.recipes.PlasmaForgeRecipe;
import com.hbm.inventory.recipes.PlasmaForgeRecipes;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.items.machine.ItemBlueprints;
import com.hbm.lib.RefStrings;
import com.hbm.render.util.GaugeUtil;
import com.hbm.tileentity.machine.fusion.TileEntityFusionPlasmaForge;
import com.hbm.util.BobMathUtil;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
public class GUIMachinePlasmaForge extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/reactors/gui_fusion_plasmaforge.png");
private TileEntityFusionPlasmaForge forge;
public GUIMachinePlasmaForge(InventoryPlayer invPlayer, TileEntityFusionPlasmaForge tedf) {
super(new ContainerMachinePlasmaForge(invPlayer, tedf));
forge = tedf;
this.xSize = 176;
this.ySize = 244;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
forge.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 18, 16, 52);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 62, forge.power, forge.maxPower);
if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 80 < mouseY && guiTop + 80 + 18 >= mouseY) {
if(this.forge.plasmaModule.recipe != null && PlasmaForgeRecipes.INSTANCE.recipeNameMap.containsKey(this.forge.plasmaModule.recipe)) {
GenericRecipe recipe = (GenericRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(this.forge.plasmaModule.recipe);
this.func_146283_a(recipe.print(), mouseX, mouseY);
} else {
this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY);
}
}
PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(forge.plasmaModule.recipe);
if(recipe != null) {
drawCustomInfoStat(mouseX, mouseY, guiLeft + 25, guiTop + 115, 18, 18, mouseX, mouseY, EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(forge.plasmaEnergySync) + "KyU / " + BobMathUtil.getShortNumber(recipe.ignitionTemp) + "KyU");
} else {
drawCustomInfoStat(mouseX, mouseY, guiLeft + 25, guiTop + 115, 18, 18, mouseX, mouseY, "0TU / 0TU");
}
}
@Override
protected void mouseClicked(int x, int y, int button) {
super.mouseClicked(x, y, button);
if(this.checkClick(x, y, 7, 80, 18, 18)) GUIScreenRecipeSelector.openSelector(PlasmaForgeRecipes.INSTANCE, forge, forge.plasmaModule.recipe, 0, ItemBlueprints.grabPool(forge.slots[1]), this);
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.forge.hasCustomInventoryName() ? this.forge.getInventoryName() : I18n.format(this.forge.getInventoryName());
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);
}
@Override
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);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int p = (int) (forge.power * 61 / forge.maxPower);
drawTexturedModalRect(guiLeft + 152, guiTop + 80 - p, 176, 62 - p, 16, p);
if(forge.plasmaModule.progress > 0) {
int j = (int) Math.ceil(70 * forge.plasmaModule.progress);
drawTexturedModalRect(guiLeft + 62, guiTop + 81, 176, 62, j, 16);
}
PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(forge.plasmaModule.recipe);
/// LEFT LED
if(forge.didProcess) {
drawTexturedModalRect(guiLeft + 51, guiTop + 76, 195, 0, 3, 6);
} else if(recipe != null) {
drawTexturedModalRect(guiLeft + 51, guiTop + 76, 192, 0, 3, 6);
}
/// RIGHT LED
if(forge.didProcess) {
drawTexturedModalRect(guiLeft + 56, guiTop + 76, 195, 0, 3, 6);
} else if(recipe != null && forge.power >= recipe.power) {
drawTexturedModalRect(guiLeft + 56, guiTop + 76, 192, 0, 3, 6);
}
double inputGauge = recipe == null ? 0 : Math.min(((double) forge.plasmaEnergySync / (double) recipe.ignitionTemp), 1.5) / 1.5D;
double boosterGauge = 0;
// input energy
GaugeUtil.drawSmoothGauge(guiLeft + 34, guiTop + 124, this.zLevel, inputGauge, 5, 2, 1, 0xA00000);
// output genergy
GaugeUtil.drawSmoothGauge(guiLeft + 70, guiTop + 124, this.zLevel, boosterGauge, 5, 2, 1, 0xA00000);
this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 81);
if(recipe != null && recipe.inputItem != null) {
for(int i = 0; i < recipe.inputItem.length; i++) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(forge.plasmaModule.inputSlots[i]);
if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F);
}
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glColor4f(1F, 1F, 1F, 0.5F);
GL11.glEnable(GL11.GL_BLEND);
this.zLevel = 300F;
for(int i = 0; i < recipe.inputItem.length; i++) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(forge.plasmaModule.inputSlots[i]);
if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16);
}
this.zLevel = 0F;
GL11.glColor4f(1F, 1F, 1F, 1F);
GL11.glDisable(GL11.GL_BLEND);
}
forge.inputTank.renderTank(guiLeft + 80, guiTop + 70, this.zLevel, 16, 52);
}
}

View File

@ -0,0 +1,112 @@
package com.hbm.inventory.gui;
import org.lwjgl.input.Keyboard;
import com.hbm.blocks.network.FluidPump.TileEntityFluidPump;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.util.EnumUtil;
import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
@SideOnly(Side.CLIENT)
public class GUIPump extends GuiScreen {
protected final TileEntityFluidPump pump;
private GuiTextField textPlacementPriority;
private GuiButton buttonPressure;
private GuiButton buttonPriority;
private int pressure;
private int priority;
public GUIPump(TileEntityFluidPump pump) {
this.pump = pump;
this.pressure = pump.tank[0].getPressure();
this.priority = pump.priority.ordinal();
}
@Override
public void initGui() {
Keyboard.enableRepeatEvents(true);
textPlacementPriority = new GuiTextField(fontRendererObj, this.width / 2 - 150, 100, 90, 20);
textPlacementPriority.setText("" + pump.bufferSize);
textPlacementPriority.setMaxStringLength(5);
buttonPressure = new GuiButton(0, this.width / 2 - 50, 100, 90, 20, pressure + " PU");
buttonPriority = new GuiButton(1, this.width / 2 + 50, 100, 90, 20, pump.priority.name());
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
drawDefaultBackground();
drawString(fontRendererObj, "Throughput:", this.width / 2 - 150, 80, 0xA0A0A0);
drawString(fontRendererObj, "(max. 10,000mB)", this.width / 2 - 150, 90, 0xA0A0A0);
textPlacementPriority.drawTextBox();
drawString(fontRendererObj, "Pressure:", this.width / 2 - 50, 80, 0xA0A0A0);
buttonPressure.drawButton(mc, mouseX, mouseY);
drawString(fontRendererObj, "Priority:", this.width / 2 + 50, 80, 0xA0A0A0);
buttonPriority.drawButton(mc, mouseX, mouseY);
super.drawScreen(mouseX, mouseY, partialTicks);
}
@Override
public void onGuiClosed() {
Keyboard.enableRepeatEvents(false);
NBTTagCompound data = new NBTTagCompound();
data.setByte("pressure", (byte) pressure);
data.setByte("priority", (byte) priority);
try { data.setInteger("capacity", Integer.parseInt(textPlacementPriority.getText())); } catch(Exception ex) {}
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, pump.xCoord, pump.yCoord, pump.zCoord));
}
@Override
protected void keyTyped(char typedChar, int keyCode) {
super.keyTyped(typedChar, keyCode);
if(textPlacementPriority.textboxKeyTyped(typedChar, keyCode)) return;
if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.thePlayer.closeScreen();
}
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
textPlacementPriority.mouseClicked(mouseX, mouseY, mouseButton);
if(buttonPressure.mousePressed(mc, mouseX, mouseY)) {
this.pressure++;
if(pressure > 5) pressure = 0;
buttonPressure.displayString = pressure + " PU";
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
}
if(buttonPriority.mousePressed(mc, mouseX, mouseY)) {
this.priority++;
if(priority >= ConnectionPriority.values().length) priority = 0;
buttonPriority.displayString = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority).name();
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
}
}
@Override public boolean doesGuiPauseGame() { return false; }
}

View File

@ -0,0 +1,175 @@
package com.hbm.inventory.gui;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKGauge;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
public class GUIScreenRBMKGauge extends GuiScreen {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rbmk_gauge.png");
public TileEntityRBMKGauge keypad;
protected int xSize = 256;
protected int ySize = 204;
protected int guiLeft;
protected int guiTop;
protected GuiTextField[] color = new GuiTextField[4];
protected GuiTextField[] label = new GuiTextField[4];
protected GuiTextField[] rtty = new GuiTextField[4];
protected GuiTextField[] min = new GuiTextField[4];
protected GuiTextField[] max = new GuiTextField[4];
protected boolean[] active = new boolean[4];
protected boolean[] polling = new boolean[4];
public GUIScreenRBMKGauge(TileEntityRBMKGauge keypad) {
this.keypad = keypad;
this.xSize = 256;
this.ySize = 204;
}
@Override
public void initGui() {
super.initGui();
this.guiLeft = (this.width - this.xSize) / 2;
this.guiTop = (this.height - this.ySize) / 2;
Keyboard.enableRepeatEvents(true);
int oX = 4;
int oY = 4;
for(int i = 0; i < 4; i++) {
String col = Integer.toHexString(keypad.gauges[i].color);
while(col.length() < 6) col = "0" + col;
color[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(color[i], 6, col);
label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(label[i], 15, keypad.gauges[i].label);
rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 73 + oY + i * 36, 72 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], 10, keypad.gauges[i].rtty);
min[i] = new GuiTextField(this.fontRendererObj, guiLeft + 121 + oX, guiTop + 73 + oY + i * 36, 52 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(min[i], 32, keypad.gauges[i].min + "");
max[i] = new GuiTextField(this.fontRendererObj, guiLeft + 195 + oX, guiTop + 73 + oY + i * 36, 52 - oX * 2, 14);
GUIScreenRBMKKeyPad.setupTextFieldStandard(max[i], 32, keypad.gauges[i].max + "");
active[i] = keypad.gauges[i].active;
polling[i] = keypad.gauges[i].polling;
}
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
this.drawDefaultBackground();
this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
GL11.glDisable(GL11.GL_LIGHTING);
this.drawGuiContainerForegroundLayer(mouseX, mouseY);
GL11.glEnable(GL11.GL_LIGHTING);
}
private void drawGuiContainerForegroundLayer(int x, int y) {
String name = I18nUtil.resolveKey("container.rbmkGauge");
this.fontRendererObj.drawString(name, this.guiLeft + this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, this.guiTop + 6, 4210752);
}
private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
for(int i = 0; i < 4; i++) {
if(this.active[i]) drawTexturedModalRect(guiLeft + 111, guiTop + i * 36 + 54, 18, 204, 16, 16);
if(this.polling[i]) drawTexturedModalRect(guiLeft + 128, guiTop + i * 36 + 53, 0, 204, 18, 18);
}
for(int i = 0; i < 4; i++) {
this.color[i].drawTextBox();
this.label[i].drawTextBox();
this.rtty[i].drawTextBox();
this.min[i].drawTextBox();
this.max[i].drawTextBox();
}
}
@Override
protected void mouseClicked(int x, int y, int b) {
super.mouseClicked(x, y, b);
for(int i = 0; i < 4; i++) {
if(guiLeft + 111 <= x && guiLeft + 111 + 16 > x && guiTop + i * 36 + 54 < y && guiTop + i * 36 + 54 + 16 >= y) {
this.active[i] = !this.active[i];
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F + (this.active[i] ? 0.25F : 0F)));
return;
}
if(guiLeft + 128 <= x && guiLeft + 128 + 18 > x && guiTop + i * 36 + 53 < y && guiTop + i * 36 + 53 + 18 >= y) {
this.polling[i] = !this.polling[i];
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F + (this.polling[i] ? 0.25F : 0F)));
return;
}
}
if(guiLeft + 209 <= x && guiLeft + 209 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
NBTTagCompound data = new NBTTagCompound();
byte active = 0;
byte polling = 0;
for(int i = 0; i < 4; i++) {
if(this.active[i]) active |= 1 << i;
if(this.polling[i]) polling |= 1 << i;
}
data.setByte("active", active);
data.setByte("polling", polling);
for(int i = 0; i < 4; i++) {
try { data.setInteger("color" + i, Integer.parseInt(this.color[i].getText(), 16)); } catch(Exception ex) { }
data.setString("label" + i, this.label[i].getText());
data.setString("rtty" + i, this.rtty[i].getText());
try { data.setInteger("min" + i, Integer.parseInt(this.min[i].getText())); } catch(Exception ex) { }
try { data.setInteger("max" + i, Integer.parseInt(this.max[i].getText())); } catch(Exception ex) { }
}
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, keypad.xCoord, keypad.yCoord, keypad.zCoord));
return;
}
for(int i = 0; i < 4; i++) {
this.color[i].mouseClicked(x, y, b);
this.label[i].mouseClicked(x, y, b);
this.rtty[i].mouseClicked(x, y, b);
this.min[i].mouseClicked(x, y, b);
this.max[i].mouseClicked(x, y, b);
}
}
@Override
protected void keyTyped(char c, int b) {
for(int i = 0; i < 4; i++) {
if(this.color[i].textboxKeyTyped(c, b)) return;
if(this.label[i].textboxKeyTyped(c, b)) return;
if(this.rtty[i].textboxKeyTyped(c, b)) return;
if(this.min[i].textboxKeyTyped(c, b)) return;
if(this.max[i].textboxKeyTyped(c, b)) return;
}
if(b == 1 || b == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.thePlayer.closeScreen();
this.mc.setIngameFocus();
}
}
@Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); }
@Override public boolean doesGuiPauseGame() { return false; }
}

View File

@ -0,0 +1,176 @@
package com.hbm.inventory.gui;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKKeyPad;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
public class GUIScreenRBMKKeyPad extends GuiScreen {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rbmk_keypad.png");
public TileEntityRBMKKeyPad keypad;
protected int xSize = 256;
protected int ySize = 204;
protected int guiLeft;
protected int guiTop;
protected GuiTextField[] color = new GuiTextField[4];
protected GuiTextField[] label = new GuiTextField[4];
protected GuiTextField[] rtty = new GuiTextField[4];
protected GuiTextField[] cmd = new GuiTextField[4];
protected boolean[] active = new boolean[4];
protected boolean[] polling = new boolean[4];
public GUIScreenRBMKKeyPad(TileEntityRBMKKeyPad keypad) {
this.keypad = keypad;
this.xSize = 256;
this.ySize = 204;
}
public static void setupTextFieldStandard(GuiTextField field, int length, String def) {
field.setTextColor(0x00ff00);
field.setDisabledTextColour(0x00ff00);
field.setEnableBackgroundDrawing(false);
field.setMaxStringLength(length);
field.setText(def != null ? def : "");
}
@Override
public void initGui() {
super.initGui();
this.guiLeft = (this.width - this.xSize) / 2;
this.guiTop = (this.height - this.ySize) / 2;
Keyboard.enableRepeatEvents(true);
int oX = 4;
int oY = 4;
for(int i = 0; i < 4; i++) {
String col = Integer.toHexString(keypad.keys[i].color);
while(col.length() < 6) col = "0" + col;
color[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14);
setupTextFieldStandard(color[i], 6, col);
label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14);
setupTextFieldStandard(label[i], 15, keypad.keys[i].label);
rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 73 + oY + i * 36, 72 - oX * 2, 14);
setupTextFieldStandard(rtty[i], 10, keypad.keys[i].rtty);
cmd[i] = new GuiTextField(this.fontRendererObj, guiLeft + 121 + oX, guiTop + 73 + oY + i * 36, 126 - oX * 2, 14);
setupTextFieldStandard(cmd[i], 32, keypad.keys[i].command);
active[i] = keypad.keys[i].active;
polling[i] = keypad.keys[i].polling;
}
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
this.drawDefaultBackground();
this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
GL11.glDisable(GL11.GL_LIGHTING);
this.drawGuiContainerForegroundLayer(mouseX, mouseY);
GL11.glEnable(GL11.GL_LIGHTING);
}
private void drawGuiContainerForegroundLayer(int x, int y) {
String name = I18nUtil.resolveKey("container.rbmkKeyPad");
this.fontRendererObj.drawString(name, this.guiLeft + this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, this.guiTop + 6, 4210752);
}
private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
for(int i = 0; i < 4; i++) {
if(this.active[i]) drawTexturedModalRect(guiLeft + 111, guiTop + i * 36 + 54, 18, 204, 16, 16);
if(this.polling[i]) drawTexturedModalRect(guiLeft + 128, guiTop + i * 36 + 53, 0, 204, 18, 18);
}
for(int i = 0; i < 4; i++) {
this.color[i].drawTextBox();
this.label[i].drawTextBox();
this.rtty[i].drawTextBox();
this.cmd[i].drawTextBox();
}
}
@Override
protected void mouseClicked(int x, int y, int b) {
super.mouseClicked(x, y, b);
for(int i = 0; i < 4; i++) {
if(guiLeft + 111 <= x && guiLeft + 111 + 16 > x && guiTop + i * 36 + 54 < y && guiTop + i * 36 + 54 + 16 >= y) {
this.active[i] = !this.active[i];
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F + (this.active[i] ? 0.25F : 0F)));
return;
}
if(guiLeft + 128 <= x && guiLeft + 128 + 18 > x && guiTop + i * 36 + 53 < y && guiTop + i * 36 + 53 + 18 >= y) {
this.polling[i] = !this.polling[i];
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F + (this.polling[i] ? 0.25F : 0F)));
return;
}
}
if(guiLeft + 209 <= x && guiLeft + 209 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
NBTTagCompound data = new NBTTagCompound();
byte active = 0;
byte polling = 0;
for(int i = 0; i < 4; i++) {
if(this.active[i]) active |= 1 << i;
if(this.polling[i]) polling |= 1 << i;
}
data.setByte("active", active);
data.setByte("polling", polling);
for(int i = 0; i < 4; i++) {
try { data.setInteger("color" + i, Integer.parseInt(this.color[i].getText(), 16)); } catch(Exception ex) { }
data.setString("label" + i, this.label[i].getText());
data.setString("rtty" + i, this.rtty[i].getText());
data.setString("cmd" + i, this.cmd[i].getText());
}
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, keypad.xCoord, keypad.yCoord, keypad.zCoord));
return;
}
for(int i = 0; i < 4; i++) {
this.color[i].mouseClicked(x, y, b);
this.label[i].mouseClicked(x, y, b);
this.rtty[i].mouseClicked(x, y, b);
this.cmd[i].mouseClicked(x, y, b);
}
}
@Override
protected void keyTyped(char c, int b) {
for(int i = 0; i < 4; i++) {
if(this.color[i].textboxKeyTyped(c, b)) return;
if(this.label[i].textboxKeyTyped(c, b)) return;
if(this.rtty[i].textboxKeyTyped(c, b)) return;
if(this.cmd[i].textboxKeyTyped(c, b)) return;
}
if(b == 1 || b == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.thePlayer.closeScreen();
this.mc.setIngameFocus();
}
}
@Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); }
@Override public boolean doesGuiPauseGame() { return false; }
}

View File

@ -71,7 +71,6 @@ public class GUIScreenRadioTorchController extends GuiScreen {
GL11.glEnable(GL11.GL_LIGHTING);
}
private void drawGuiContainerForegroundLayer(int x, int y) {
String name = I18nUtil.resolveKey("container.rttyController");
this.fontRendererObj.drawString(name, this.guiLeft + this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, this.guiTop + 6, 4210752);

View File

@ -12,9 +12,6 @@ import org.lwjgl.opengl.GL12;
import com.hbm.inventory.recipes.CrucibleRecipes;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemCassette;
import com.hbm.items.machine.ItemStamp;
import com.hbm.items.machine.ItemStamp.StampType;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.packet.PacketDispatcher;
@ -56,17 +53,7 @@ public class GUIScreenTemplateFolder extends GuiScreen {
this.isJournal = item != ModItems.template_folder;
if(!this.isJournal) {
// Stamps
for(ItemStack i : ItemStamp.stamps.get(StampType.PLATE)) allStacks.add(i.copy());
for(ItemStack i : ItemStamp.stamps.get(StampType.WIRE)) allStacks.add(i.copy());
for(ItemStack i : ItemStamp.stamps.get(StampType.CIRCUIT)) allStacks.add(i.copy());
// Tracks
for(int i = 1; i < ItemCassette.TrackType.values().length; i++) {
allStacks.add(new ItemStack(ModItems.siren_track, 1, i));
}
}
if(!this.isJournal) {

View File

@ -140,7 +140,7 @@ public class Mats {
public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setAutogen(WIRE, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK).m();
public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x82A59C, 0x06281E, 0x42665C).setAutogen(BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, GRIP).m();
public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setAutogen(DUST, CASTPLATE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, STOCK, GRIP).m();
public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setAutogen(DUST, DENSEWIRE, BLOCK).m();
public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setAutogen(DUST, DENSEWIRE, CASTPLATE, BLOCK).m();
public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).setAutogen(CASTPLATE, HEAVYBARREL, HEAVYRECEIVER).m();
public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setAutogen(DUST, CASTPLATE, WELDEDPLATE, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m();
public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setAutogen(CASTPLATE, WELDEDPLATE, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m();

View File

@ -8,7 +8,6 @@ import static com.hbm.inventory.OreDictManager.*;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockCap.EnumCapBlock;
import com.hbm.blocks.machine.BlockICFLaserComponent.EnumICFPart;
import com.hbm.config.GeneralConfig;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.OreDictManager;
@ -83,10 +82,6 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
.inputItems(new OreDictStack(DESH.ingot(), 4), new OreDictStack(ANY_PLASTIC.dust(), 2), new OreDictStack(DURA.ingot(), 1)));
this.register(new GenericRecipe("ass.platebismuth").setup(200, 100).outputItems(new ItemStack(ModItems.plate_bismuth, 1))
.inputItems(new ComparableStack(ModItems.nugget_bismuth, 2), new OreDictStack(U238.billet(), 2), new OreDictStack(NB.dust(), 1)));
this.register(new GenericRecipe("ass.plateeuphemium").setup(600, 100).outputItems(new ItemStack(ModItems.plate_euphemium, 1))
.inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new OreDictStack(OSMIRIDIUM.ingot())));
this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4))
.inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1)));
// expensive parts
this.register(new GenericRecipe("ass.exsteelplating").setup(200, 400).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING.ordinal()))
@ -424,32 +419,6 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP_QUANTUM))
.inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 8_000))
.outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 8_000)));
this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_battery_redd, 1))
.inputItems(new ComparableStack(ModItems.ingot_electronium, 64),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64),
new OreDictStack(CMB.plateCast(), 32),
new OreDictStack(MAGTUNG.wireDense(), 32),
new ComparableStack(ModItems.plate_dineutronium, 64),
new ComparableStack(ModItems.powder_magic, 64),
new ComparableStack(ModItems.ingot_u238m2),
new ComparableStack(ModItems.ingot_cft, 64),
new ComparableStack(ModItems.ingot_cft, 64))
.inputItemsEx(new ComparableStack(ModItems.ingot_electronium, 64),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.FERRO_PLATING),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64),
new OreDictStack(CMB.plateCast(), 64),
new ComparableStack(ModItems.ingot_u238m2),
new ComparableStack(ModItems.ingot_cft, 64),
new ComparableStack(ModItems.ingot_cft, 64)));
// fluid tanks
this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1))
@ -603,55 +572,6 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_RESISTANTALLOY.plateWelded()))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "tcalloy"));
// ICF
this.register(new GenericRecipe("ass.icfcell").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal()))
.inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModBlocks.glass_quartz, 16))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfemitter").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal()))
.inputItems(new OreDictStack(W.plateWelded(), 4), new OreDictStack(MAGTUNG.wireDense(), 16))
.inputItemsEx(new OreDictStack(W.plateWelded(), 8), new OreDictStack(MAGTUNG.wireDense(), 16))
.inputFluids(new FluidStack(Fluids.XENON, 16_000))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfcapacitor").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal()))
.inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfturbo").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal()))
.inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.wireDense(), 4))
.inputItemsEx(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(DNT.wireDense(), 8), new OreDictStack(SBD.wireDense(), 4))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfcasing").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal()))
.inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfport").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal()))
.inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfcontroller").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_controller, 1))
.inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfscaffold").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0))
.inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfvessel").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1))
.inputItems(new ComparableStack(ModItems.ingot_cft, 1), new OreDictStack(CMB.plateCast(), 1), new OreDictStack(W.plateWelded(), 2))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfstructural").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3))
.inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(STEEL.plateWelded(), 8))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfcore").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1))
.inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.COMPUTER))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register(new GenericRecipe("ass.icfpress").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1))
.inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte"));
// upgrades
if(no528) {
this.register(new GenericRecipe("ass.overdrive1").setup(200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_1, 1))
@ -982,22 +902,6 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
.inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(WEAPONSTEEL.plate(), 32), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 16), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER))
.setPools528(GenericRecipes.POOL_PREFIX_528 + "controller"));
// weapons
this.register(new GenericRecipe("ass.schrabhammer").setup(6_000, 100).outputItems(new ItemStack(ModItems.schrabidium_hammer, 1))
.inputItems(
new OreDictStack(SA326.block(), 35),
new ComparableStack(ModItems.billet_yharonite, 64),
new ComparableStack(ModItems.billet_yharonite, 64),
new ComparableStack(ModItems.coin_ufo, 1),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64)));
// ammo
this.register(new GenericRecipe("ass.50bmgsm").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_standard, 6, EnumAmmo.BMG50_SM.ordinal()))
.inputItems(new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 6), new OreDictStack(STAR.ingot(), 3))
@ -1102,30 +1006,6 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
new ComparableStack(ModItems.thruster_small, 1),
new ComparableStack(ModItems.photo_panel, 12),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM)));
this.register(new GenericRecipe("ass.gerald").setup(6_000, 100).outputItems(new ItemStack(ModItems.sat_gerald, 1))
.inputItems(new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(BSCCO.wireDense(), 64),
new OreDictStack(BSCCO.wireDense(), 64),
new ComparableStack(ModBlocks.det_nuke, 64),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM),
new ComparableStack(ModItems.coin_ufo, 1))
.inputItemsEx(new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(BSCCO.wireDense(), 64),
new ComparableStack(ModBlocks.det_nuke, 64),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.COMPUTER),
new ComparableStack(ModItems.coin_ufo, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "gerald"));
this.register(new GenericRecipe("ass.emptypackage").setup(40, 100).outputItems(new ItemStack(ModItems.fluid_pack_empty, 1))
.inputItems(new OreDictStack(TI.plate(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 2)));
@ -1154,7 +1034,6 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
new ComparableStack(ModItems.motor_bismuth, 3)));
}
}
}
public static HashMap getRecipes() {

View File

@ -0,0 +1,33 @@
package com.hbm.inventory.recipes;
import java.util.ArrayList;
import java.util.List;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.util.BobMathUtil;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.util.EnumChatFormatting;
public class PlasmaForgeRecipe extends GenericRecipe {
// minimum plasma energy to perform the recipe
public long ignitionTemp;
public PlasmaForgeRecipe(String name) { super(name); }
public PlasmaForgeRecipe setInputEnergy(long ignitionTemp) { this.ignitionTemp = ignitionTemp; return this; }
public List<String> print() {
List<String> list = new ArrayList();
list.add(EnumChatFormatting.YELLOW + this.getLocalizedName());
duration(list);
power(list);
list.add(EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("gui.recipe.fusionIn") + ": " + BobMathUtil.getShortNumber(ignitionTemp) + "TU/t");
input(list);
output(list);
return list;
}
}

View File

@ -0,0 +1,206 @@
package com.hbm.inventory.recipes;
import static com.hbm.inventory.OreDictManager.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.BlockICFLaserComponent.EnumICFPart;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.RecipesCommon.AStack;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.inventory.recipes.loader.GenericRecipes;
import com.hbm.items.ModItems;
import com.hbm.items.ItemEnums.EnumExpensiveType;
import com.hbm.items.ItemGenericPart.EnumPartType;
import com.hbm.items.machine.ItemFluidIcon;
import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack;
import com.hbm.items.machine.ItemCircuit.EnumCircuitType;
import net.minecraft.item.ItemStack;
public class PlasmaForgeRecipes extends GenericRecipes<PlasmaForgeRecipe> {
public static final PlasmaForgeRecipes INSTANCE = new PlasmaForgeRecipes();
@Override public int inputItemLimit() { return 12; }
@Override public int inputFluidLimit() { return 1; }
@Override public int outputItemLimit() { return 1; }
@Override public int outputFluidLimit() { return 0; }
@Override public String getFileName() { return "hbmPlasmaForge.json"; }
@Override public PlasmaForgeRecipe instantiateRecipe(String name) { return new PlasmaForgeRecipe(name); }
@Override
public void registerDefaults() {
// Plates
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.plateeuphemium").setInputEnergy(1_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModItems.plate_euphemium, 1))
.inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new OreDictStack(OSMIRIDIUM.ingot())));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.platednt").setInputEnergy(1_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModItems.plate_dineutronium, 4))
.inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1)));
// ICF
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcell").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal()))
.inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModBlocks.glass_quartz, 16))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfemitter").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal()))
.inputItems(new OreDictStack(W.plateWelded(), 4), new OreDictStack(MAGTUNG.wireDense(), 16))
.inputItemsEx(new OreDictStack(W.plateWelded(), 8), new OreDictStack(MAGTUNG.wireDense(), 16))
.inputFluids(new FluidStack(Fluids.XENON, 16_000))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcapacitor").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal()))
.inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfturbo").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal()))
.inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.wireDense(), 4))
.inputItemsEx(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(DNT.wireDense(), 8), new OreDictStack(SBD.wireDense(), 4))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcasing").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal()))
.inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfport").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal()))
.inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcontroller").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_controller, 1))
.inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfscaffold").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0))
.inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfvessel").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1))
.inputItems(new ComparableStack(ModItems.ingot_cft, 1), new OreDictStack(CMB.plateCast(), 1), new OreDictStack(W.plateWelded(), 2))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfstructural").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3))
.inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(STEEL.plateWelded(), 8))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcore").setInputEnergy(1_000_000).setup(1_200, 10_000_000).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1))
.inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.COMPUTER))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfpress").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1))
.inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
// weapons
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.schrabhammer").setInputEnergy(25_000_000).setup(6_000, 10_000_000).outputItems(new ItemStack(ModItems.schrabidium_hammer, 1))
.inputItems(
new OreDictStack(SA326.block(), 35),
new ComparableStack(ModItems.billet_yharonite, 64),
new ComparableStack(ModItems.billet_yharonite, 64),
new ComparableStack(ModItems.coin_ufo, 1),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("ass.fensusan").setInputEnergy(50_000_000).setup(1_200, 50_000_000).outputItems(new ItemStack(ModBlocks.machine_battery_redd, 1))
.inputItems(new ComparableStack(ModItems.ingot_electronium, 64),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64),
new OreDictStack(CMB.plateCast(), 32),
new OreDictStack(MAGTUNG.wireDense(), 32),
new ComparableStack(ModItems.plate_dineutronium, 64),
new ComparableStack(ModItems.powder_magic, 64),
new ComparableStack(ModItems.ingot_u238m2),
new ComparableStack(ModItems.ingot_cft, 64),
new ComparableStack(ModItems.ingot_cft, 64))
.inputItemsEx(new ComparableStack(ModItems.ingot_electronium, 64),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.FERRO_PLATING),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64),
new OreDictStack(CMB.plateCast(), 64),
new ComparableStack(ModItems.ingot_u238m2),
new ComparableStack(ModItems.ingot_cft, 64),
new ComparableStack(ModItems.ingot_cft, 64)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.gerald").setInputEnergy(25_000_000).setup(6_000, 50_000_000).outputItems(new ItemStack(ModItems.sat_gerald, 1))
.inputItems(new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(BSCCO.wireDense(), 64),
new OreDictStack(BSCCO.wireDense(), 64),
new ComparableStack(ModBlocks.det_nuke, 64),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM),
new ComparableStack(ModItems.coin_ufo, 1))
.inputItemsEx(new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(BSCCO.wireDense(), 64),
new ComparableStack(ModBlocks.det_nuke, 64),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE),
new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM),
new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.COMPUTER),
new ComparableStack(ModItems.coin_ufo, 1)).setPools(PlasmaForgeRecipes.POOL_PREFIX_DISCOVER + "gerald"));
// really, really boring fucking temp recipes
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfccore").setInputEnergy(50_000_000).setup(1_200, 100_000_000).outputItems(new ItemStack(ModBlocks.dfc_core)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 12_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(DNT.wireDense(), 16), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CONTROLLER_QUANTUM), new ComparableStack(ModItems.singularity_spark), new ComparableStack(ModItems.powder_chlorophyte, 64)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcemitter").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_emitter)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(STAR.wireDense(), 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_QUANTUM)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcreceiver").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_receiver)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(STAR.plateCast(), 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_QUANTUM)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcinjector").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_injector)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(BIGMT.plateCast(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcstabilizer").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_stabilizer)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_QUANTUM)));
}
@Override
public void readExtraData(JsonElement element, PlasmaForgeRecipe recipe) {
JsonObject obj = (JsonObject) element;
recipe.ignitionTemp = obj.get("ignitionTemp").getAsLong();
}
@Override
public void writeExtraData(PlasmaForgeRecipe recipe, JsonWriter writer) throws IOException {
writer.name("ignitionTemp").value(recipe.ignitionTemp);
}
public static HashMap getRecipes() {
HashMap<Object, Object> recipes = new HashMap<Object, Object>();
for(GenericRecipe recipe : INSTANCE.recipeOrderedList) {
List input = new ArrayList();
if(recipe.inputItem != null) for(AStack stack : recipe.inputItem) input.add(stack);
if(recipe.inputFluid != null) for(FluidStack stack : recipe.inputFluid) input.add(ItemFluidIcon.make(stack));
List output = new ArrayList();
if(recipe.outputItem != null) for(IOutput stack : recipe.outputItem) output.add(stack.getAllPossibilities());
recipes.put(input.toArray(), output.toArray());
}
return recipes;
}
}

View File

@ -274,20 +274,18 @@ public class SILEXRecipes {
// MOX //
recipes.put(new ComparableStack(ModItems.rbmk_pellet_mox, 1, i), new SILEXRecipe(600, 100, 1)
.addOut(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20)
.addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)
.addOut(new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)
.addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i)
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i)
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i) );
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 5 + 8 * i) );
//TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly
recipes.put(new ComparableStack(ModItems.rbmk_pellet_mox, 1, i + 5), new SILEXRecipe(600, 100, 1) //Plutonium processing isn't possible w/o fucking up the NEI handler or removing xenon
.addOut(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20) //To prevent people from taking advantage of differing waste types, conform to the latter
.addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)
recipes.put(new ComparableStack(ModItems.rbmk_pellet_mox, 1, i + 5), new SILEXRecipe(600, 100, 1)
.addOut(new ItemStack(ModItems.powder_xe135_tiny), 1)
.addOut(new ItemStack(ModItems.nugget_mox_fuel), 83 - i * 20)
.addOut(new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)
.addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i)
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i)
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i) );
.addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 5 + 8 * i) );
// LEAUS //
recipes.put(new ComparableStack(ModItems.rbmk_pellet_leaus, 1, i), new SILEXRecipe(600, 100, 2)

View File

@ -166,7 +166,9 @@ public class AnvilRecipes extends SerializableRecipe {
constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(EMERALD.dust()), new AnvilOutput(new ItemStack(Items.emerald))).setTier(3));
registerConstructionRecipes();
registerConstructionStamps();
registerConstructionAmmo();
registerConstructionSirens();
registerConstructionUpgrades();
registerConstructionRecycling();
}
@ -578,6 +580,34 @@ public class AnvilRecipes extends SerializableRecipe {
}
}
public static void registerConstructionStamps() {
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_stone_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_stone_plate))).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_stone_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_stone_wire))).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_stone_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_stone_circuit))).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_iron_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_iron_plate))).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_iron_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_iron_wire))).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_iron_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_iron_circuit))).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_steel_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_steel_plate))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_steel_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_steel_wire))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_steel_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_steel_circuit))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_titanium_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_titanium_plate))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_titanium_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_titanium_wire))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_titanium_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_titanium_circuit))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_obsidian_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_obsidian_plate))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_obsidian_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_obsidian_wire))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_obsidian_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_obsidian_circuit))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_desh_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_desh_plate))).setTier(3));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_desh_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_desh_wire))).setTier(3));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModItems.stamp_desh_flat, 1),new AnvilOutput(new ItemStack(ModItems.stamp_desh_circuit))).setTier(3));
}
public static void registerConstructionAmmo() {
constructionRecipes.add(new AnvilConstructionRecipe(new AStack[]{new ComparableStack(ModItems.stamp_iron_flat), new OreDictStack(GUNMETAL.ingot(), 2)}, new AnvilOutput(new ItemStack(ModItems.stamp_9))).setTier(2));
@ -597,6 +627,14 @@ public class AnvilRecipes extends SerializableRecipe {
constructionRecipes.add(new AnvilConstructionRecipe(new AStack[]{new ComparableStack(ModItems.mold_base), new OreDictStack(STEEL.ingot(), 4)}, new AnvilOutput(new ItemStack(ModItems.mold, 1, 28))).setTier(2));
}
public static void registerConstructionSirens() {
for(int i = 1; i < 21; i++) {
constructionRecipes.add(new AnvilConstructionRecipe(new AStack[] {new OreDictStack(STEEL.plate()), new ComparableStack(ModItems.plate_polymer)}, new AnvilOutput(new ItemStack(ModItems.siren_track, 1, i))).setTier(2).setOverlay(OverlayType.CONSTRUCTION));
}
}
public static void registerConstructionUpgrades() { }
public static void registerConstructionRecycling() {

View File

@ -74,17 +74,20 @@ public class GenericRecipe {
public GenericRecipe setPools528(String... pools) { if(GeneralConfig.enable528) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); } return this; }
public GenericRecipe setGroup(String autoSwitch, GenericRecipes set) { this.autoSwitchGroup = autoSwitch; set.addToGroup(autoSwitch, this); return this; }
public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(exceedsStackLimit(stack)) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; }
public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(exceedsStackLimit(stack)) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; }
public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) checkStackLimit(stack); return this; }
public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) checkStackLimit(stack); return this; }
public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; }
public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; }
public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; }
public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; }
private boolean exceedsStackLimit(AStack stack) {
if(stack instanceof ComparableStack && stack.stacksize > ((ComparableStack) stack).item.getItemStackLimit(((ComparableStack) stack).toStack())) return true;
if(stack.stacksize > 64) return true;
return false;
private void checkStackLimit(AStack stack) {
int max = 64;
if(stack instanceof ComparableStack) {
ComparableStack comp = (ComparableStack) stack;
max = comp.item.getItemStackLimit(comp.toStack());
}
if(stack.stacksize > max) throw new IllegalArgumentException("AStack " + stack + " in " + this.name + " exceeds stack limit of " + max + "!");
}
public GenericRecipe outputItems(ItemStack... output) {

View File

@ -94,6 +94,7 @@ public abstract class SerializableRecipe {
recipeHandlers.add(PUREXRecipes.INSTANCE);
recipeHandlers.add(FusionRecipes.INSTANCE);
recipeHandlers.add(PrecAssRecipes.INSTANCE);
recipeHandlers.add(PlasmaForgeRecipes.INSTANCE);
recipeHandlers.add(new MatDistribution());
recipeHandlers.add(new CustomMachineRecipes());

View File

@ -2061,7 +2061,6 @@ public class ModItems {
public static Item hazmat_grey_kit;
public static Item kit_custom;
public static Item legacy_toolbox;
public static Item toolbox;
public static Item loot_10;
@ -3956,9 +3955,8 @@ public class ModItems {
hazmat_kit = new ItemStarterKit().setUnlocalizedName("hazmat_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_kit");
hazmat_red_kit = new ItemStarterKit().setUnlocalizedName("hazmat_red_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_red_kit");
hazmat_grey_kit = new ItemStarterKit().setUnlocalizedName("hazmat_grey_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_grey_kit");
kit_custom = new ItemKitCustom().setUnlocalizedName("kit_custom").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit");
kit_custom = new ItemKitCustom().setUnlocalizedName("kit_custom").setCreativeTab(null).setTextureName(RefStrings.MODID + ":kit");
toolbox = new ItemToolBox().setUnlocalizedName("toolbox").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit_toolbox");
legacy_toolbox = new ItemKitNBT().setUnlocalizedName("toolbox_legacy").setContainerItem(toolbox).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit_toolbox");
loot_10 = new ItemLootCrate().setUnlocalizedName("loot_10").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_10");
loot_15 = new ItemLootCrate().setUnlocalizedName("loot_15").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_15");
@ -6671,7 +6669,6 @@ public class ModItems {
GameRegistry.registerItem(hazmat_grey_kit, hazmat_grey_kit.getUnlocalizedName());
GameRegistry.registerItem(kit_custom, kit_custom.getUnlocalizedName());
GameRegistry.registerItem(euphemium_kit, euphemium_kit.getUnlocalizedName());
GameRegistry.registerItem(legacy_toolbox, legacy_toolbox.getUnlocalizedName());
GameRegistry.registerItem(toolbox, toolbox.getUnlocalizedName());
//Misile Loot Boxes

View File

@ -2,9 +2,6 @@ package com.hbm.items.machine;
import java.util.List;
import com.hbm.items.ModItems;
import com.hbm.util.i18n.I18nUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
@ -12,7 +9,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
@ -97,36 +93,27 @@ public class ItemCassette extends Item {
SOUND;
};
public ItemCassette()
{
this.setHasSubtypes(true);
this.setMaxDamage(0);
}
public ItemCassette() {
this.setHasSubtypes(true);
this.setMaxDamage(0);
}
@Override
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tabs, List list)
{
for (int i = 1; i < TrackType.values().length; ++i)
{
list.add(new ItemStack(item, 1, i));
}
}
public void getSubItems(Item item, CreativeTabs tabs, List list) {
for(int i = 1; i < TrackType.values().length; ++i) {
list.add(new ItemStack(item, 1, i));
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool)
{
if(!(stack.getItem() instanceof ItemCassette))
return;
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
if(!(stack.getItem() instanceof ItemCassette)) return;
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("info.templatefolder", I18nUtil.resolveKey(ModItems.template_folder.getUnlocalizedName() + ".name")));
list.add("");
list.add("Siren sound cassette:");
list.add(" Name: " + TrackType.getEnum(stack.getItemDamage()).getTrackTitle());
list.add(" Type: " + TrackType.getEnum(stack.getItemDamage()).getType().name());
list.add(" Volume: " + TrackType.getEnum(stack.getItemDamage()).getVolume());
list.add("Siren sound cassette:");
list.add(" Name: " + TrackType.getEnum(stack.getItemDamage()).getTrackTitle());
list.add(" Type: " + TrackType.getEnum(stack.getItemDamage()).getType().name());
list.add(" Volume: " + TrackType.getEnum(stack.getItemDamage()).getVolume());
}
public static TrackType getType(ItemStack stack) {
@ -136,47 +123,31 @@ public class ItemCassette extends Item {
return TrackType.NULL;
}
@Override
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses()
{
return true;
}
public boolean requiresMultipleRenderPasses() {
return true;
}
@Override
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister p_94581_1_)
{
super.registerIcons(p_94581_1_);
public void registerIcons(IIconRegister p_94581_1_) {
super.registerIcons(p_94581_1_);
this.overlayIcon = p_94581_1_.registerIcon("hbm:cassette_overlay");
}
this.overlayIcon = p_94581_1_.registerIcon("hbm:cassette_overlay");
}
@Override
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_)
{
return p_77618_2_ == 1 ? this.overlayIcon : super.getIconFromDamageForRenderPass(p_77618_1_, p_77618_2_);
}
public IIcon getIconFromDamageForRenderPass(int meta, int pass) {
return pass == 1 ? this.overlayIcon : super.getIconFromDamageForRenderPass(meta, pass);
}
@Override
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int p_82790_2_)
{
if (p_82790_2_ == 0)
{
return 16777215;
}
else
{
int j = TrackType.getEnum(stack.getItemDamage()).getColor();
if (j < 0)
{
j = 16777215;
}
return j;
}
}
public int getColorFromItemStack(ItemStack stack, int pass) {
if(pass == 0) return 16777215;
int j = TrackType.getEnum(stack.getItemDamage()).getColor();
if(j < 0) j = 16777215;
return j;
}
}

View File

@ -54,7 +54,9 @@ public class ItemRBMKLid extends Item {
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, ModBlocks.concrete_smooth.stepSound.func_150496_b(), (ModBlocks.concrete_smooth.stepSound.getVolume() + 1.0F) / 2.0F, ModBlocks.concrete_smooth.stepSound.getPitch() * 0.8F);
}
tile.explodeOnBroken = false;
world.setBlockMetadataWithNotify(pos[0], pos[1], pos[2], meta + RBMKBase.offset, 3);
tile.explodeOnBroken = true;
stack.stackSize--;
return true;

View File

@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@ -34,11 +33,7 @@ public class ItemStamp extends Item {
stamps.put(type, list);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
if(this.type == StampType.PLATE || this.type == StampType.WIRE || this.type == StampType.CIRCUIT)
list.add("[CREATED USING TEMPLATE FOLDER]");
}
/** Params can't take an ItemStack, for some reason it crashes during init */
public StampType getStampType(Item item, int meta) {

View File

@ -130,7 +130,7 @@ public class ItemBedrockOreNew extends Item {
public static enum BedrockOreType {
// primary sulfuric solvent radsolvent
LIGHT_METAL( 0xFFFFFF, 0x353535, "light", o(MAT_IRON, 9), o(MAT_COPPER, 9), o(MAT_TITANIUM, 6), o(MAT_BAUXITE, 9), o(MAT_CRYOLITE, 3), o(MAT_CHLOROCALCITE, 5), o(MAT_LITHIUM, 5), o(MAT_SODIUM, 3), o(MAT_CHLOROCALCITE, 6), o(MAT_LITHIUM, 6), o(MAT_SODIUM, 6)),
HEAVY_METAL( 0x868686, 0x000000, "heavy", o(MAT_TUNGSTEN, 9), o(MAT_LEAD, 9), o(MAT_GOLD, 2), o(MAT_GOLD, 2), o(MAT_BERYLLIUM, 3), o(MAT_TUNGSTEN, 9), o(MAT_LEAD, 9), o(MAT_GOLD, 5), o(MAT_BISMUTH, 1), o(MAT_TANTALIUM, 1), o(MAT_GOLD, 6)),
HEAVY_METAL( 0x868686, 0x000000, "heavy", o(MAT_TUNGSTEN, 9), o(MAT_LEAD, 9), o(MAT_GOLD, 2), o(MAT_GOLD, 2), o(MAT_BERYLLIUM, 3), o(MAT_TUNGSTEN, 9), o(MAT_LEAD, 9), o(MAT_GOLD, 5), o(MAT_BISMUTH, 2), o(MAT_TANTALIUM, 2), o(MAT_GOLD, 6)),
RARE_EARTH( 0xE6E6B6, 0x1C1C00, "rare", o(MAT_COBALT, 5), o(MAT_RAREEARTH, 5),o(MAT_BORON, 5), o(MAT_LANTHANIUM, 3), o(MAT_NIOBIUM, 4), o(MAT_NEODYMIUM, 3), o(MAT_STRONTIUM, 3), o(MAT_ZIRCONIUM, 3), o(MAT_NIOBIUM, 5), o(MAT_NEODYMIUM, 5), o(MAT_STRONTIUM, 3)),
ACTINIDE( 0xC1C7BD, 0x2B3227, "actinide", o(MAT_URANIUM, 4), o(MAT_THORIUM, 4), o(MAT_RADIUM, 2), o(MAT_RADIUM, 2), o(MAT_POLONIUM, 2), o(MAT_RADIUM, 2), o(MAT_RADIUM, 2), o(MAT_POLONIUM, 2), o(MAT_TECHNETIUM, 1), o(MAT_TECHNETIUM, 1), o(MAT_U238, 1)),
NON_METAL( 0xAFAFAF, 0x0F0F0F, "nonmetal", o(MAT_COAL, 9), o(MAT_SULFUR, 9), o(MAT_LIGNITE, 9), o(MAT_KNO, 6), o(MAT_FLUORITE, 6), o(MAT_PHOSPHORUS, 5), o(MAT_FLUORITE, 6), o(MAT_SULFUR, 6), o(MAT_CHLOROCALCITE, 6), o(MAT_SILICON, 2), o(MAT_SILICON, 2)),

View File

@ -68,7 +68,7 @@ public class ItemKitNBT extends Item {
}
public static ItemStack create(ItemStack... contents) {
ItemStack stack = new ItemStack(ModItems.legacy_toolbox);
ItemStack stack = new ItemStack(ModItems.kit_custom);
stack.stackTagCompound = new NBTTagCompound();
ItemStackUtil.addStacksToNBT(stack, contents);

View File

@ -36,6 +36,7 @@ import com.hbm.util.DamageResistanceHandler.DamageClass;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@ -128,9 +129,11 @@ public class XFactoryFolly {
};
public static BiFunction<ItemStack, LambdaContext, Boolean> LAMBDA_CAN_FIRE = (stack, ctx) -> {
if(!ItemGunBaseNT.getIsAiming(stack)) return false;
if(ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) != GunAnimation.SPINUP) return false;
if(ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex) < 100) return false;
if(ctx.entity instanceof EntityPlayer) {
if(!ItemGunBaseNT.getIsAiming(stack)) return false;
if(ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) != GunAnimation.SPINUP) return false;
if(ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex) < 100) return false;
}
return ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmount(stack, ctx.inventory) > 0;
};

View File

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

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings {
public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod";
public static final String VERSION = "1.0.27 BETA (5628)";
public static final String VERSION = "1.0.27 BETA (5634)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -411,6 +411,8 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCraneConsole.class, new RenderCraneConsole());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKConsole.class, new RenderRBMKConsole());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKDisplay.class, new RenderRBMKDisplay());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKKeyPad.class, new RenderRBMKKeyPad());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKGauge.class, new RenderRBMKGauge());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRod.class, new RenderRBMKFuelChannel());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRodReaSim.class, new RenderRBMKFuelChannel());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKAutoloader.class, new RenderRBMKAutoloader());
@ -429,6 +431,7 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionBoiler.class, new RenderFusionBoiler());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionMHDT.class, new RenderFusionMHDT());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionCoupler.class, new RenderFusionCoupler());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionPlasmaForge.class, new RenderFusionPlasmaForge());
//Watz
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatz.class, new RenderWatz());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatzPump.class, new RenderWatzPump());
@ -485,6 +488,7 @@ public class ClientProxy extends ServerProxy {
double[] tir = new double[] {0, 0, 0};
double[] sir = new double[] {1, 1, 1};
MinecraftForgeClient.registerItemRenderer(ModItems.steel_sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir));
MinecraftForgeClient.registerItemRenderer(ModItems.titanium_sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir));
MinecraftForgeClient.registerItemRenderer(ModItems.alloy_sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir));
MinecraftForgeClient.registerItemRenderer(ModItems.desh_sword, new ItemRenderTransformer(rtp, ttp_low, stp, rfp, tfp, sfp, rir, tir, sir));

View File

@ -293,6 +293,8 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.machine_autocrafter, 1), new Object[] { "SCS", "MWM", "SCS", 'S', STEEL.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'M', ModItems.motor, 'W', Blocks.crafting_table });
addRecipeAuto(new ItemStack(ModBlocks.machine_funnel, 1), new Object[] { "S S", "SRS", " S ", 'S', STEEL.ingot(), 'R', REDSTONE.dust() });
addRecipeAuto(new ItemStack(Blocks.hopper, 1), new Object[] { "S S", "S S", " S ", 'S', STEEL.ingot() });
addRecipeAuto(new ItemStack(Items.bucket, 1), new Object[] { "S S", " S ", 'S', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.machine_waste_drum, 1), new Object[] { "LRL", "BRB", "LRL", 'L', PB.ingot(), 'B', Blocks.iron_bars, 'R', ModItems.rod_quad_empty });
addRecipeAuto(new ItemStack(ModBlocks.machine_press, 1), new Object[] { "IRI", "IPI", "IBI", 'I', IRON.ingot(), 'R', Blocks.furnace, 'B', IRON.block(), 'P', Blocks.piston });
addRecipeAuto(new ItemStack(ModBlocks.machine_ammo_press, 1), new Object[] { "IPI", "C C", "SSS", 'I', IRON.ingot(), 'P', Blocks.piston, 'C', CU.ingot(), 'S', Blocks.stone });
@ -723,11 +725,6 @@ public class CraftingManager {
addShapelessAuto(new ItemStack(ModItems.ams_catalyst_euphemium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_dagaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, EUPH.dust(), EUPH.dust(), EUPH.dust(), EUPH.dust() });
addShapelessAuto(new ItemStack(ModItems.ams_catalyst_schrabidium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, SA326.dust(), SA326.dust(), SA326.dust(), SA326.dust() });
addShapelessAuto(new ItemStack(ModItems.ams_catalyst_dineutronium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_hagalaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, DNT.dust(), DNT.dust(), DNT.dust(), DNT.dust() });
addRecipeAuto(new ItemStack(ModBlocks.dfc_core, 1), new Object[] { "DLD", "LML", "DLD", 'D', ModItems.ingot_bismuth, 'L', DNT.block(), 'M', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID) });
addRecipeAuto(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM.ordinal()), 'X', ModItems.crystal_xen, 'L', ModItems.sat_head_laser });
addRecipeAuto(new ItemStack(ModBlocks.dfc_receiver, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM.ordinal()), 'X', ModBlocks.block_dineutronium, 'L', STEEL.shell() });
addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', STEEL.pipe() });
addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModBlocks.hadron_coil_alloy, 'L', ModItems.crystal_xen });
addRecipeAuto(new ItemStack(ModBlocks.barrel_plastic, 1), new Object[] { "IPI", "I I", "IPI", 'I', ModItems.plate_polymer, 'P', AL.plate() });
addRecipeAuto(new ItemStack(ModBlocks.barrel_steel, 1), new Object[] { "IPI", "I I", "IPI", 'I', STEEL.plate(), 'P', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.barrel_tcalloy, 1), new Object[] { "IPI", "I I", "IPI", 'I', "ingotTcAlloy", 'P', TI.plate() });
@ -792,7 +789,8 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.rbmk_steam_inlet, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', IRON.plate(), 'B', ModItems.tank_steel });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_steam_outlet, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', CU.plate(), 'B', ModItems.tank_steel });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_display, 1), new Object[] { "B", "C", "D", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
//addRecipeAuto(new ItemStack(ModBlocks.rbmk_heatex, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', CU.plate(), 'B', ModItems.pipes_steel });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_key_pad, 1), new Object[] { "B", "C", "D", 'B', ModBlocks.radio_torch_sender, 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_gauge, 1), new Object[] { "B", "C", "D", 'B', ModBlocks.radio_torch_receiver, 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
addRecipeAuto(new ItemStack(ModBlocks.deco_rbmk, 8), new Object[] { "R", 'R', ModBlocks.rbmk_blank });
addRecipeAuto(new ItemStack(ModBlocks.deco_rbmk_smooth, 1), new Object[] { "R", 'R', ModBlocks.deco_rbmk });

View File

@ -258,7 +258,6 @@ public class MainRegistry {
polaroidID = rand.nextInt(18) + 1;
}
ShadyUtil.test();
loadConfig(PreEvent);
HbmPotion.init();
@ -1516,6 +1515,7 @@ public class MainRegistry {
ignoreMappings.add("hbm:item.tritium_deuterium_cake");
ignoreMappings.add("hbm:item.redcoil_capacitor");
ignoreMappings.add("hbm:item.euphemium_capacitor");
ignoreMappings.add("hbm:item.toolbox_legacy");
/// REMAP ///
remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses);
@ -1523,7 +1523,6 @@ public class MainRegistry {
remapItems.put("hbm:item.briquette_lignite", ModItems.briquette);
remapItems.put("hbm:item.antiknock", ModItems.fuel_additive);
remapItems.put("hbm:item.kit_toolbox_empty", ModItems.toolbox);
remapItems.put("hbm:item.kit_toolbox", ModItems.legacy_toolbox);
for(MissingMapping mapping : event.get()) {

View File

@ -42,6 +42,7 @@ public class NEIRegistry {
handlers.add(new CrystallizerRecipeHandler());
handlers.add(new BookRecipeHandler());
handlers.add(new FusionRecipeHandler());
handlers.add(new PlasmaForgeRecipeHandler());
handlers.add(new SILEXRecipeHandler());
handlers.add(new FuelPoolHandler());
handlers.add(new RBMKRodDisassemblyHandler());

View File

@ -136,7 +136,7 @@ public class ResourceManager {
public static final IModelCustom epress_head = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/epress_head.obj"));
public static final IModelCustom conveyor_press = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/conveyor_press.obj"));
public static final IModelCustom ammo_press = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/ammo_press.obj")).asVBO();
//Annihilator
public static final IModelCustom annihilator = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/annihilator.obj")).asVBO();
@ -249,6 +249,7 @@ public class ResourceManager {
public static final IModelCustom fusion_boiler = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/boiler.obj")).asVBO();
public static final IModelCustom fusion_mhdt = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/mhdt.obj")).asVBO();
public static final IModelCustom fusion_coupler = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/coupler.obj")).asVBO();
public static final IModelCustom fusion_plasma_forge = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/plasma_forge.obj")).asVBO();
//ICF
public static final IModelCustom icf = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/reactors/icf.obj")).asVBO();
@ -320,11 +321,13 @@ public class ResourceManager {
//Doors
public static AnimatedModel transition_seal = ColladaLoader.load(new ResourceLocation(RefStrings.MODID, "models/doors/seal.dae"), true);
public static Animation transition_seal_anim = ColladaLoader.loadAnim(24040, new ResourceLocation(RefStrings.MODID, "models/doors/seal.dae"));
//PheoDoors
public static final ResourceLocation pheo_fire_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/fire_door.png");
public static final ResourceLocation pheo_fire_door_black_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/fire_door_black.png");
public static final ResourceLocation pheo_fire_door_orange_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/fire_door_orange.png");
public static final ResourceLocation pheo_fire_door_yellow_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/fire_door_yellow.png");
public static final ResourceLocation pheo_fire_door_trefoil_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/fire_door_trefoil.png");
public static IModelCustomNamed pheo_fire_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/fire_door.obj")).asVBO();
public static final ResourceLocation pheo_airlock_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/airlock_door.png");
public static final ResourceLocation pheo_airlock_door_clean_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/airlock_door_clean.png");
@ -334,11 +337,14 @@ public class ResourceManager {
public static IModelCustomNamed pheo_blast_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/blast_door.obj")).asVBO();
public static final ResourceLocation pheo_containment_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/containment_door.png");
public static final ResourceLocation pheo_containment_door_trefoil_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/containment_door_trefoil.png");
public static final ResourceLocation pheo_containment_door_trefoil_yellow_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/containment_door_trefoil_yellow.png");
public static IModelCustomNamed pheo_containment_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/containment_door.obj")).asVBO();
public static final ResourceLocation pheo_seal_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/seal_door.png");
public static IModelCustomNamed pheo_seal_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/seal_door.obj")).asVBO();
public static final ResourceLocation pheo_secure_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/secure_door.png");
public static final ResourceLocation pheo_secure_door_grey_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/secure_door_grey.png");
public static final ResourceLocation pheo_secure_door_black_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/secure_door_black.png");
public static final ResourceLocation pheo_secure_door_yellow_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/secure_door_yellow.png");
public static IModelCustomNamed pheo_secure_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/secure_door.obj")).asVBO();
public static final ResourceLocation pheo_sliding_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/sliding_door.png");
public static IModelCustomNamed pheo_sliding_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/sliding_door.obj")).asVBO();
@ -573,7 +579,7 @@ public class ResourceManager {
public static final ResourceLocation conveyor_press_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/conveyor_press.png");
public static final ResourceLocation conveyor_press_belt_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/conveyor_press_belt.png");
public static final ResourceLocation ammo_press_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/ammo_press.png");
//Annihilator
public static final ResourceLocation annihilator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/annihilator.png");
public static final ResourceLocation annihilator_belt_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/annihilator_belt.png");
@ -718,6 +724,7 @@ public class ResourceManager {
public static final ResourceLocation fusion_boiler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/boiler.png");
public static final ResourceLocation fusion_mhdt_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/mhdt.png");
public static final ResourceLocation fusion_coupler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/coupler.png");
public static final ResourceLocation fusion_plasma_forge_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/plasma_forge.png");
//ICF
public static final ResourceLocation icf_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/icf.png");
@ -852,7 +859,7 @@ public class ResourceManager {
public static final ResourceLocation substation_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/substation.png");
public static final ResourceLocation wire_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/wire.png");
public static final ResourceLocation wire_greyscale_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/wire_greyscale.png");
//Pipes
public static final ResourceLocation pipe_anchor_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pipe_anchor.png");
public static final ResourceLocation fluid_pump_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/fluid_diode.png");
@ -1613,11 +1620,15 @@ public class ResourceManager {
public static final HFRWavefrontObjectVBO rbmk_crane = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane.obj")).asVBO();
public static final HFRWavefrontObjectVBO rbmk_autoloader = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/autoloader.obj")).asVBO();
public static final HFRWavefrontObjectVBO rbmk_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_console.obj")).asVBO();
public static final HFRWavefrontObjectVBO rbmk_button = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/button.obj")).asVBO();
public static final HFRWavefrontObjectVBO rbmk_gauge = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/gauge.obj")).asVBO();
public static final HFRWavefrontObject rbmk_debris = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/debris.obj")).noSmooth();
public static final ResourceLocation rbmk_crane_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/crane_console.png");
public static final ResourceLocation rbmk_crane_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_crane.png");
public static final ResourceLocation rbmk_autoloader_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_autoloader.png");
public static final ResourceLocation rbmk_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_control.png");
public static final ResourceLocation rbmk_keypad_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/keypad.png");
public static final ResourceLocation rbmk_gauge_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/gauge.png");
public static final HFRWavefrontObject hev_battery = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/battery.obj")).noSmooth();
public static final HFRWavefrontObject anvil = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/anvil.obj")).noSmooth();
public static final HFRWavefrontObject crystal_power = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_power.obj")).noSmooth();

View File

@ -0,0 +1,37 @@
package com.hbm.module.machine;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.recipes.PlasmaForgeRecipes;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.inventory.recipes.loader.GenericRecipes;
import com.hbm.util.BobMathUtil;
import api.hbm.energymk2.IEnergyHandlerMK2;
import net.minecraft.item.ItemStack;
public class ModuleMachinePlasma extends ModuleMachineBase {
public ModuleMachinePlasma(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) {
super(index, battery, slots);
this.inputSlots = new int[12];
this.outputSlots = new int[1];
this.inputTanks = new FluidTank[1];
this.outputTanks = new FluidTank[0];
}
@Override
public GenericRecipes getRecipeSet() {
return PlasmaForgeRecipes.INSTANCE;
}
@Override
public void setupTanks(GenericRecipe recipe) {
super.setupTanks(recipe);
if(recipe == null) return;
for(int i = 0; i < inputTanks.length; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].changeTankSize(BobMathUtil.max(inputTanks[i].getFill(), recipe.inputFluid[i].fill * 2, 16_000));
}
public ModuleMachinePlasma itemInput(int from) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = from + i; return this; }
public ModuleMachinePlasma itemOutput(int a) { outputSlots[0] = a; return this; }
public ModuleMachinePlasma fluidInput(FluidTank a) { inputTanks[0] = a; return this; }
}

View File

@ -0,0 +1,186 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.tileentity.machine.fusion.TileEntityFusionPlasmaForge;
import com.hbm.util.BobMathUtil;
import com.hbm.util.Clock;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
public class RenderFusionPlasmaForge extends TileEntitySpecialRenderer implements IItemRendererProvider {
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y, z + 0.5);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glRotatef(90, 0F, 1F, 0F);
switch(tile.getBlockMetadata() - BlockDummyable.offset) {
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 4: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(270, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(0, 0F, 1F, 0F); break;
}
TileEntityFusionPlasmaForge forge = (TileEntityFusionPlasmaForge) tile;
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.fusion_plasma_forge_tex);
ResourceManager.fusion_plasma_forge.renderPart("Body");
GL11.glPushMatrix();
GL11.glRotated(20, 0, 1, 0);
GL11.glPushMatrix();
ResourceManager.fusion_plasma_forge.renderPart("SliderStriker");
GL11.glTranslated(-2.75, 2.5, 0);
GL11.glRotated(-20, 0, 0, 1);
GL11.glTranslated(2.75, -2.5, 0);
ResourceManager.fusion_plasma_forge.renderPart("ArmLowerStriker");
GL11.glTranslated(-2.75, 3.75, 0);
GL11.glRotated(30, 0, 0, 1);
GL11.glTranslated(2.75, -3.75, 0);
ResourceManager.fusion_plasma_forge.renderPart("ArmUpperStriker");
GL11.glTranslated(-1.5, 3.75, 0);
GL11.glRotated(20, 0, 0, 1);
GL11.glTranslated(1.5, -3.75, 0);
ResourceManager.fusion_plasma_forge.renderPart("StrikerMount");
GL11.glPushMatrix();
GL11.glTranslated(0, 3.375, 0.5);
GL11.glRotated(30, 1, 0, 0);
GL11.glTranslated(0, -3.375, -0.5);
ResourceManager.fusion_plasma_forge.renderPart("StrikerRight");
GL11.glTranslated(0, -0.5, 0);
ResourceManager.fusion_plasma_forge.renderPart("PistonRight");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(0, 3.375, -0.5);
GL11.glRotated(-30, 1, 0, 0);
GL11.glTranslated(0, -3.375, 0.5);
ResourceManager.fusion_plasma_forge.renderPart("StrikerLeft");
GL11.glTranslated(0, -0.5, 0);
ResourceManager.fusion_plasma_forge.renderPart("PistonLeft");
GL11.glPopMatrix();
GL11.glPopMatrix();
GL11.glPushMatrix();
ResourceManager.fusion_plasma_forge.renderPart("SliderJet");
GL11.glTranslated(2.75, 2.5, 0);
GL11.glRotated(20, 0, 0, 1);
GL11.glTranslated(-2.75, -2.5, 0);
ResourceManager.fusion_plasma_forge.renderPart("ArmLowerJet");
GL11.glTranslated(2.75, 3.75, 0);
GL11.glRotated(-20, 0, 0, 1);
GL11.glTranslated(-2.75, -3.75, 0);
ResourceManager.fusion_plasma_forge.renderPart("ArmUpperJet");
GL11.glTranslated(1.5, 3.75, 0);
GL11.glRotated(-30, 0, 0, 1);
GL11.glTranslated(-1.5, -3.75, 0);
ResourceManager.fusion_plasma_forge.renderPart("Jet");
GL11.glPopMatrix();
GL11.glPopMatrix();
if(forge.plasmaEnergySync <= 0) {
GL11.glColor3f(0F, 0F, 0F);
GL11.glDisable(GL11.GL_TEXTURE_2D);
ResourceManager.fusion_plasma_forge.renderPart("Plasma");
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glColor3f(1F, 1F, 1F);
} else {
RenderArcFurnace.fullbright(true);
long time = Clock.get_ms() + forge.timeOffset;
float alpha = 0.5F + (float) (Math.sin(time / 500D) * 0.25F);
double mainOsc = BobMathUtil.sps(time / 750D) % 1D;
double glowOsc = Math.sin(time / 1000D) % 1D;
double glowExtra = time / 10000D % 1D;
GL11.glColor3f(forge.plasmaRed * alpha, forge.plasmaGreen * alpha, forge.plasmaBlue * alpha);
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
bindTexture(ResourceManager.fusion_plasma_tex);
GL11.glTranslated(0, mainOsc, 0);
ResourceManager.fusion_plasma_forge.renderPart("Plasma");
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glDepthMask(false);
GL11.glColor3f(forge.plasmaRed * 2, forge.plasmaGreen * 2, forge.plasmaBlue * 2);
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
bindTexture(ResourceManager.fusion_plasma_glow_tex);
GL11.glTranslated(0, glowOsc + glowExtra, 0);
ResourceManager.fusion_plasma_forge.renderPart("Plasma");
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
glowOsc = Math.sin(time / 600D + 2) % 1D;
glowExtra = time / 5000D % 1D;
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
bindTexture(ResourceManager.fusion_plasma_glow_tex);
GL11.glTranslated(0, glowOsc + glowExtra, 0);
ResourceManager.fusion_plasma_forge.renderPart("Plasma");
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glDisable(GL11.GL_BLEND);
GL11.glDepthMask(true);
RenderArcFurnace.fullbright(false);
}
GL11.glColor3f(1F, 1F, 1F);
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
}
@Override
public Item getItemForRenderer() {
return Item.getItemFromBlock(ModBlocks.fusion_plasma_forge);
}
@Override
public IItemRenderer getRenderer() {
return new ItemRenderBase() {
public void renderInventory() {
GL11.glTranslated(0, -1, 0);
GL11.glScaled(2.75, 2.75, 2.75);
GL11.glRotated(90, 0, 1, 0);
}
public void renderCommon() {
GL11.glScaled(0.5, 0.5, 0.5);
GL11.glRotatef(90, 0F, 1F, 0F);
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.fusion_plasma_forge_tex);
ResourceManager.fusion_plasma_forge.renderAllExcept("Plasma");
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glColor3f(0F, 0F, 0F);
ResourceManager.fusion_plasma_forge.renderPart("Plasma");
GL11.glColor3f(1F, 1F, 1F);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(GL11.GL_FLAT);
}};
}
}

View File

@ -73,6 +73,8 @@ public class RenderRBMKConsole extends TileEntitySpecialRenderer {
double color = 0.65D + (i % 2) * 0.05D;
tess.setColorOpaque_F((float) (color + ((1 - color) * heat)), (float) color, (float) color);
}
if(col.data.getByte("indicator") > 0) tess.setColorOpaque_F(1F, 1F, 0F);
drawColumn(tess, kx, ky, kz, 0, 0);

View File

@ -61,6 +61,8 @@ public class RenderRBMKDisplay extends TileEntitySpecialRenderer {
tess.setColorOpaque_F((float) (color + ((1 - color) * heat)), (float) color, (float) color);
}
if(col.data.getByte("indicator") > 0) tess.setColorOpaque_F(1F, 1F, 0F);
drawColumn(tess, kx, ky, kz);
switch(col.type) {

View File

@ -0,0 +1,113 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKGauge;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKGauge.GaugeUnit;
import com.hbm.util.BobMathUtil;
import com.hbm.util.ColorUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
public class RenderRBMKGauge extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y, z + 0.5);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_LIGHTING);
switch(te.getBlockMetadata()) {
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 4: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(270, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(0, 0F, 1F, 0F); break;
}
TileEntityRBMKGauge gauge = (TileEntityRBMKGauge) te;
for(int i = 0; i < 4; i++) {
GaugeUnit unit = gauge.gauges[i];
if(!unit.active) continue;
GL11.glPushMatrix();
GL11.glTranslated(0.25, (i / 2) * -0.5 + 0.25, (i % 2) * -0.5 + 0.25);
GL11.glColor3f(1F, 1F, 1F);
this.bindTexture(ResourceManager.rbmk_gauge_tex);
ResourceManager.rbmk_gauge.renderPart("Gauge");
GL11.glPushMatrix();
GL11.glColor3f(ColorUtil.fr(unit.color), ColorUtil.fg(unit.color), ColorUtil.fb(unit.color));
double value = unit.lastRenderValue + (unit.renderValue - unit.lastRenderValue) * interp;
int lower = Math.min(unit.min, unit.max);
int upper = Math.max(unit.min, unit.max);
if(lower == upper) upper += 1;
int range = upper - lower;
double angle = (double) (value - lower) / (double) range * 50D;
if(unit.min > unit.max) angle = 50 - angle;
angle = MathHelper.clamp_double(angle, 0, 80);
GL11.glTranslated(0, 0.4375, -0.125);
GL11.glRotated(angle - 85, -1, 0, 0);
GL11.glTranslated(0, -0.4375, 0.125);
GL11.glDisable(GL11.GL_TEXTURE_2D);
RenderArcFurnace.fullbright(true);
GL11.glEnable(GL11.GL_LIGHTING);
ResourceManager.rbmk_gauge.renderPart("Needle");
RenderArcFurnace.fullbright(false);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
FontRenderer font = Minecraft.getMinecraft().fontRenderer;
int height = font.FONT_HEIGHT;
double lineScale = 0.0025D;
String lineLower = unit.min <= 10_000 ? unit.min + "" : BobMathUtil.getShortNumber(unit.min);
String lineUpper = unit.max <= 10_000 ? unit.max + "" : BobMathUtil.getShortNumber(unit.max);
for(int j = 0; j < 2; j++) {
GL11.glPushMatrix();
GL11.glTranslated(0, 0.4375, -0.125);
GL11.glRotated(10 + j * 50, -1, 0, 0);
GL11.glTranslated(0, -0.4375, 0.125);
GL11.glTranslated(0.032, 0.4375, 0.125);
GL11.glScaled(lineScale, -lineScale, lineScale);
GL11.glNormal3f(0.0F, 0.0F, -1.0F);
GL11.glRotatef(90, 0, 1, 0);
font.drawString(j == 0 ? lineLower : lineUpper, 0, -height / 2, 0x000000);
GL11.glPopMatrix();
}
if(unit.label != null && !unit.label.isEmpty()) {
GL11.glTranslated(0.01, 0.3125, 0);
int width = font.getStringWidth(unit.label);
float f3 = Math.min(0.0125F, 0.4F / Math.max(width, 1));
GL11.glScalef(f3, -f3, f3);
GL11.glNormal3f(0.0F, 0.0F, -1.0F);
GL11.glRotatef(90, 0, 1, 0);
RenderArcFurnace.fullbright(true);
font.drawString(unit.label, - width / 2, - height / 2, 0x00ff00);
RenderArcFurnace.fullbright(false);
}
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
}

View File

@ -0,0 +1,81 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKKeyPad;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKKeyPad.KeyUnit;
import com.hbm.util.ColorUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
public class RenderRBMKKeyPad extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y, z + 0.5);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_LIGHTING);
switch(te.getBlockMetadata()) {
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 4: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(270, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(0, 0F, 1F, 0F); break;
}
TileEntityRBMKKeyPad keypad = (TileEntityRBMKKeyPad) te;
for(int i = 0; i < 4; i++) {
KeyUnit key = keypad.keys[i];
if(!key.active) continue;
boolean glow = key.isPressed;
float mult = glow ? 1F : 0.65F;
GL11.glPushMatrix();
GL11.glTranslated(0.25, (i / 2) * -0.5 + 0.25, (i % 2) * -0.5 + 0.25);
GL11.glColor3f(1F, 1F, 1F);
this.bindTexture(ResourceManager.rbmk_keypad_tex);
ResourceManager.rbmk_button.renderPart("Socket");
GL11.glPushMatrix();
GL11.glTranslated(key.isPressed ? -0.03125 : 0, 0, 0);
GL11.glColor3f(ColorUtil.fr(key.color) * mult, ColorUtil.fg(key.color) * mult, ColorUtil.fb(key.color) * mult);
if(glow) {
RenderArcFurnace.fullbright(true);
GL11.glEnable(GL11.GL_LIGHTING); // we want a glow, but normal lighting should still apply
}
ResourceManager.rbmk_button.renderPart("Button");
if(glow) RenderArcFurnace.fullbright(false);
GL11.glPopMatrix();
FontRenderer font = Minecraft.getMinecraft().fontRenderer;
int height = font.FONT_HEIGHT;
if(key.label != null && !key.label.isEmpty()) {
GL11.glTranslated(0.01, 0.3125, 0);
int width = font.getStringWidth(key.label);
float f3 = Math.min(0.0125F, 0.4F / Math.max(width, 1));
GL11.glScalef(f3, -f3, f3);
GL11.glNormal3f(0.0F, 0.0F, -1.0F);
GL11.glRotatef(90, 0, 1, 0);
RenderArcFurnace.fullbright(true);
font.drawString(key.label, - width / 2, - height / 2, 0x00ff00);
RenderArcFurnace.fullbright(false);
}
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
}

View File

@ -38,6 +38,7 @@ public class MissilePart {
MissilePart.registerPart(ModItems.mp_thruster_10_xenon, PartType.THRUSTER, 0.5, 1, ResourceManager.mp_t_10_xenon, ResourceManager.mp_t_10_xenon_tex);
//
MissilePart.registerPart(ModItems.mp_thruster_15_kerosene, PartType.THRUSTER, 1.5, 1.5, ResourceManager.mp_t_15_kerosene, ResourceManager.mp_t_15_kerosene_tex);
MissilePart.registerPart(ModItems.mp_thruster_15_kerosene_dual, PartType.THRUSTER, 1, 1.5, ResourceManager.mp_t_15_kerosene_dual, ResourceManager.mp_t_15_kerosene_dual_tex);
MissilePart.registerPart(ModItems.mp_thruster_15_kerosene_triple, PartType.THRUSTER, 1, 1.5, ResourceManager.mp_t_15_kerosene_triple, ResourceManager.mp_t_15_kerosene_dual_tex);
MissilePart.registerPart(ModItems.mp_thruster_15_solid, PartType.THRUSTER, 0.5, 1, ResourceManager.mp_t_15_solid, ResourceManager.mp_t_15_solid_tex);
MissilePart.registerPart(ModItems.mp_thruster_15_solid_hexdecuple, PartType.THRUSTER, 0.5, 1, ResourceManager.mp_t_15_solid_hexdecuple, ResourceManager.mp_t_15_solid_hexdecuple_tex);

View File

@ -105,12 +105,12 @@ public abstract class DoorDecl {
};
public static final DoorDecl VAULT_DOOR = new DoorDecl() {
@Override
public IRenderDoors getSEDNARenderer() {
return RenderVaultDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation()
@ -121,13 +121,13 @@ public abstract class DoorDecl {
.addBus("SLIDE", new BusAnimationSequence().setPos(1, 0, 0).addPos(0, 0, 0, 4_000));
return null;
}
@Override public int getSkinCount() { return 7; }
@Override public int timeToOpen() { return 120; }
@Override public int[][] getDoorOpenRanges() { return new int[][] { {-1, 1, 0, 3, 3, 2} }; }
@Override public int[] getDimensions() { return new int[] { 4, 0, 0, 0, 2, 2 }; }
@Override public int[][] getExtraDimensions() { return new int[][] { {0, 0, 1, -1, 2, 2} }; };
@Override
@ -135,10 +135,10 @@ public abstract class DoorDecl {
if(!open || y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1);
else return super.getBlockBound(x, y, z, open, forCollision);
}
public Consumer<TileEntityDoorGeneric> onUpdate = (door) -> {
if(door.getWorldObj().isRemote) return;
if(door.state == door.STATE_OPENING) {
if(door.openTicks == 0) door.getWorldObj().playSoundEffect(door.xCoord, door.yCoord, door.zCoord, "hbm:block.vaultScrapeNew", 1.0F, 1.0F);
for(int i = 45; i <= 115; i += 10)
@ -149,22 +149,22 @@ public abstract class DoorDecl {
if(door.openTicks == i) door.getWorldObj().playSoundEffect(door.xCoord, door.yCoord, door.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
}
};
@Override public Consumer<TileEntityDoorGeneric> onDoorUpdate() { return onUpdate; }
};
public static final DoorDecl FIRE_DOOR = new DoorDecl() {
@Override public String getOpenSoundEnd() { return "hbm:door.wghStop"; }
@Override public String getOpenSoundLoop() { return "hbm:door.wghStart"; }
@Override public String getSoundLoop2() { return "hbm:door.alarm6"; }
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderFireDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
@ -173,17 +173,19 @@ public abstract class DoorDecl {
}
public ResourceLocation[] skins;
@SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() {
if(skins == null) skins = new ResourceLocation[] {
ResourceManager.pheo_fire_door_tex,
ResourceManager.pheo_fire_door_black_tex,
ResourceManager.pheo_fire_door_orange_tex,
ResourceManager.pheo_fire_door_yellow_tex,
ResourceManager.pheo_fire_door_trefoil_tex
};
return skins;
}
public int getSkinCount() { return 3; }
public int getSkinCount() { return 5; }
@Override public int timeToOpen() { return 160; }
@Override public int[][] getDoorOpenRanges() { return new int[][] { { -1, 0, 0, 3, 4, 1 } }; }
@ -201,18 +203,18 @@ public abstract class DoorDecl {
};
public static final DoorDecl SLIDE_DOOR = new DoorDecl() {
@Override public String getOpenSoundEnd() { return "hbm:door.sliding_door_opened"; }
@Override public String getCloseSoundEnd() { return "hbm:door.sliding_door_shut"; }
@Override public String getOpenSoundLoop() { return "hbm:door.sliding_door_opening"; }
@Override public String getSoundLoop2() { return "hbm:door.sliding_door_opening"; }
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderSlidingBlastDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation()
@ -245,12 +247,12 @@ public abstract class DoorDecl {
@Override public String getOpenSoundEnd() { return "hbm:door.sliding_seal_stop"; }
@Override public String getOpenSoundStart() { return "hbm:door.sliding_seal_open"; }
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderSealDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
@ -277,12 +279,12 @@ public abstract class DoorDecl {
@Override public String getOpenSoundEnd() { return "hbm:door.garage_stop"; }
@Override public String getOpenSoundLoop() { return "hbm:door.garage_move"; }
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderSecureDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
@ -307,16 +309,18 @@ public abstract class DoorDecl {
}
public ResourceLocation[] skins;
@Override public ResourceLocation[] getSEDNASkins() {
if(skins == null) skins = new ResourceLocation[] {
ResourceManager.pheo_secure_door_tex,
ResourceManager.pheo_secure_door_grey_tex
ResourceManager.pheo_secure_door_grey_tex,
ResourceManager.pheo_secure_door_black_tex,
ResourceManager.pheo_secure_door_yellow_tex
};
return skins;
}
public int getSkinCount() { return 2; }
public int getSkinCount() { return 4; }
};
public static final DoorDecl ROUND_AIRLOCK_DOOR = new DoorDecl() {
@ -324,12 +328,12 @@ public abstract class DoorDecl {
@Override public String getOpenSoundEnd() { return "hbm:door.garage_stop"; }
@Override public String getOpenSoundLoop() { return "hbm:door.garage_move"; }
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderAirlockDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
@ -338,7 +342,7 @@ public abstract class DoorDecl {
}
public ResourceLocation[] skins;
@SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() {
if(skins == null) skins = new ResourceLocation[] {
ResourceManager.pheo_airlock_door_tex,
@ -347,7 +351,7 @@ public abstract class DoorDecl {
};
return skins;
}
public int getSkinCount() { return 3; }
@Override
@ -372,12 +376,12 @@ public abstract class DoorDecl {
@Override public String getOpenSoundLoop() { return "hbm:door.qe_sliding_opening"; };
@Override public float getSoundVolume() { return 2; }
@Override public int timeToOpen() { return 10; };
@Override
public IRenderDoors getSEDNARenderer() {
return RenderSlidingDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
@ -405,12 +409,12 @@ public abstract class DoorDecl {
@Override public String getOpenSoundEnd() { return "hbm:door.wgh_stop"; };
@Override public String getOpenSoundLoop() { return "hbm:door.wgh_start"; };
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderContainmentDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
@ -419,16 +423,17 @@ public abstract class DoorDecl {
}
public ResourceLocation[] skins;
@SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() {
if(skins == null) skins = new ResourceLocation[] {
ResourceManager.pheo_containment_door_tex,
ResourceManager.pheo_containment_door_trefoil_tex
ResourceManager.pheo_containment_door_trefoil_tex,
ResourceManager.pheo_containment_door_trefoil_yellow_tex
};
return skins;
}
@Override public int getSkinCount() { return 2; }
@Override public int getSkinCount() { return 3; }
@Override public int timeToOpen() { return 160; };
@Override public int[][] getDoorOpenRanges() { return new int[][] { { -1, 0, 0, 3, 3, 1 } }; }
@ -452,12 +457,12 @@ public abstract class DoorDecl {
@Override public String getCloseSoundStart() { return null; };
@Override public String getCloseSoundEnd() { return "hbm:door.lever"; };
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderWaterDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation()
@ -470,7 +475,7 @@ public abstract class DoorDecl {
}
public ResourceLocation[] skins;
@SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() {
if(skins == null) skins = new ResourceLocation[] {
ResourceManager.pheo_water_door_tex,
@ -478,7 +483,7 @@ public abstract class DoorDecl {
};
return skins;
}
@Override public int getSkinCount() { return 2; }
@Override
@ -540,7 +545,7 @@ public abstract class DoorDecl {
@Override public int[][] getDoorOpenRanges() { return new int[][] { { 1, 0, 1, -3, 3, 0 }, { 0, 0, 1, -3, 3, 0 }, { -1, 0, 1, -3, 3, 0 } }; }
@Override public float getDoorRangeOpenTime(int ticks, int idx) { return getNormTime(ticks, 20, 20); };
@Override public int getBlockOffset() { return 2; }
@Override public int[] getDimensions() { return new int[] { 0, 0, 2, 2, 2, 2 }; }
@Override @SideOnly(Side.CLIENT) public ResourceLocation getTextureForPart(String partName) { return ResourceManager.silo_hatch_tex; }
@ -594,7 +599,7 @@ public abstract class DoorDecl {
@Override public int[][] getDoorOpenRanges() { return new int[][] { { 2, 0, 1, -3, 3, 0 }, { 1, 0, 2, -5, 3, 0 }, { 0, 0, 2, -5, 3, 0 }, { -1, 0, 2, -5, 3, 0 }, { -2, 0, 1, -3, 3, 0 } }; }
@Override public float getDoorRangeOpenTime(int ticks, int idx) { return getNormTime(ticks, 20, 20); };
@Override public int getBlockOffset() { return 3; }
@Override public int[] getDimensions() { return new int[] { 0, 0, 3, 3, 3, 3 }; }
@Override @SideOnly(Side.CLIENT) public ResourceLocation getTextureForPart(String partName) { return ResourceManager.silo_hatch_large_tex; }
@ -608,12 +613,12 @@ public abstract class DoorDecl {
@Override public String getOpenSoundEnd() { return "hbm:door.garage_stop"; }
@Override public String getOpenSoundLoop() { return "hbm:door.garage_move"; };
@Override public float getSoundVolume() { return 2; }
@Override
public IRenderDoors getSEDNARenderer() {
return RenderVehicleDoor.INSTANCE;
}
@Override
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
@ -643,7 +648,7 @@ public abstract class DoorDecl {
public abstract int[][] getDoorOpenRanges();
public abstract int[] getDimensions();
public int[][] getExtraDimensions() { return null; };
public int getBlockOffset() { return 0; }
public boolean remoteControllable() { return false; }
@ -708,29 +713,29 @@ public abstract class DoorDecl {
public ResourceLocation[] getSEDNASkins() { return null; }
public boolean hasSkins() { return getSkinCount() > 0; }
public int getSkinCount() { return 0; }
public ResourceLocation getCyclingSkins() {
ResourceLocation[] skins = this.getSEDNASkins();
int index = (int) ((Clock.get_ms() % (skins.length * 1000)) / 1000);
return skins[index];
}
public ResourceLocation getSkinFromIndex(int index) {
ResourceLocation[] skins = this.getSEDNASkins();
return skins[Math.abs(index) % skins.length];
}
// keyframe animation system sneakily stitched into the door decl
public IRenderDoors getSEDNARenderer() { return null; }
public BusAnimation getBusAnimation(byte state, byte skinIndex) { return null; }
public com.hbm.render.anim.HbmAnimations.Animation getSEDNAAnim(byte state, byte skinIndex) {
BusAnimation anim = this.getBusAnimation(state, skinIndex);
if(anim != null) return new com.hbm.render.anim.HbmAnimations.Animation("DOOR_ANIM", System.currentTimeMillis(), anim);
return null;
}
public Consumer<TileEntityDoorGeneric> onDoorUpdate() { return null; }
}

View File

@ -403,6 +403,8 @@ public class TileMappings {
put(TileEntityCraneConsole.class, "tileentity_rbmk_crane_console");
put(TileEntityRBMKConsole.class, "tileentity_rbmk_console");
put(TileEntityRBMKDisplay.class, "tileentity_rbmk_display");
put(TileEntityRBMKKeyPad.class, "tileentity_rbmk_keypad");
put(TileEntityRBMKGauge.class, "tileentity_rbmk_gauge");
put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet");
put(TileEntityRBMKOutlet.class, "tileentity_rbmk_outlet");
put(TileEntityRBMKAutoloader.class, "tileentity_rbmk_autoloader");
@ -418,6 +420,7 @@ public class TileMappings {
put(TileEntityFusionBoiler.class, "tileentity_fusion_boiler");
put(TileEntityFusionMHDT.class, "tileentity_fusion_mhdt");
put(TileEntityFusionCoupler.class, "tileentity_fusion_coupler");
put(TileEntityFusionPlasmaForge.class, "tileentity_fusion_plasma_forge");
}
private static void putNetwork() {

View File

@ -12,5 +12,5 @@ public interface IFusionPowerReceiver {
* fusionPower is the per-port output adjusted for the amount of connected receivers (i.e. when boilers share output energy)
* neutronPower is a fixed value provided by the recipe
*/
public void receiveFusionPower(long fusionPower, double neutronPower);
public void receiveFusionPower(long fusionPower, double neutronPower, float r, float g, float b);
}

View File

@ -87,7 +87,7 @@ public class TileEntityFusionBoiler extends TileEntityLoadedBase implements IFlu
@Override public boolean receivesFusionPower() { return true; }
@Override
public void receiveFusionPower(long fusionPower, double neutronPower) {
public void receiveFusionPower(long fusionPower, double neutronPower, float r, float g, float b) {
this.plasmaEnergy = fusionPower;
int waterCycles = Math.min(tanks[0].getFill(), tanks[1].getMaxFill() - tanks[1].getFill());

View File

@ -267,7 +267,7 @@ public class TileEntityFusionBreeder extends TileEntityMachineBase implements IF
}
@Override public boolean receivesFusionPower() { return false; }
@Override public void receiveFusionPower(long fusionPower, double neutronPower) { this.neutronEnergy = neutronPower; doProgress(); }
@Override public void receiveFusionPower(long fusionPower, double neutronPower, float r, float g, float b) { this.neutronEnergy = neutronPower; doProgress(); }
@Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {tanks[0]}; }
@Override public FluidTank[] getSendingTanks() { return new FluidTank[] {tanks[1]}; }

View File

@ -62,7 +62,7 @@ public class TileEntityFusionCoupler extends TileEntityLoadedBase implements IFu
@Override public boolean receivesFusionPower() { return true; }
@Override
public void receiveFusionPower(long fusionPower, double neutronPower) {
public void receiveFusionPower(long fusionPower, double neutronPower, float r, float g, float b) {
// more copy pasted crap code ! ! !
if(klystronNode != null && klystronNode.net != null) {

View File

@ -159,7 +159,7 @@ public class TileEntityFusionMHDT extends TileEntityLoadedBase implements IEnerg
}
@Override public boolean receivesFusionPower() { return true; }
@Override public void receiveFusionPower(long fusionPower, double neutronPower) { this.plasmaEnergy = fusionPower; }
@Override public void receiveFusionPower(long fusionPower, double neutronPower, float r, float g, float b) { this.plasmaEnergy = fusionPower; }
@Override
public void serialize(ByteBuf buf) {

View File

@ -0,0 +1,268 @@
package com.hbm.tileentity.machine.fusion;
import java.util.Map.Entry;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerMachinePlasmaForge;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.gui.GUIMachinePlasmaForge;
import com.hbm.inventory.recipes.PlasmaForgeRecipe;
import com.hbm.inventory.recipes.PlasmaForgeRecipes;
import com.hbm.items.ModItems;
import com.hbm.lib.Library;
import com.hbm.module.machine.ModuleMachinePlasma;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.uninos.GenNode;
import com.hbm.uninos.INetworkProvider;
import com.hbm.uninos.UniNodespace;
import com.hbm.uninos.networkproviders.PlasmaNetworkProvider;
import com.hbm.util.BobMathUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluidmk2.IFluidStandardReceiverMK2;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implements IFusionPowerReceiver, IEnergyReceiverMK2, IFluidStandardReceiverMK2, IControlReceiver, IGUIProvider {
public FluidTank inputTank;
public long power;
public long maxPower = 10_000_000;
public boolean didProcess;
public float plasmaRed;
public float plasmaGreen;
public float plasmaBlue;
public long plasmaEnergy;
public long plasmaEnergySync;
protected GenNode receiverNode;
protected GenNode providerNode;
public int timeOffset = -1;
public ModuleMachinePlasma plasmaModule;
public TileEntityFusionPlasmaForge() {
super(16);
this.inputTank = new FluidTank(Fluids.NONE, 16_000);
this.plasmaModule = new ModuleMachinePlasma(0, this, slots)
.itemInput(3).itemOutput(15).fluidInput(inputTank);
}
@Override
public String getName() {
return "container.machinePlasmaForge";
}
@Override public boolean receivesFusionPower() { return true; }
@Override public void receiveFusionPower(long fusionPower, double neutronPower, float r, float g, float b) {
this.plasmaEnergy = fusionPower;
this.plasmaRed = r;
this.plasmaGreen = g;
this.plasmaBlue = b;
}
@Override
public void updateEntity() {
if(maxPower <= 0) this.maxPower = 1_000_000;
if(!worldObj.isRemote) {
this.plasmaEnergySync = this.plasmaEnergy;
this.plasmaEnergy = 0;
ForgeDirection rot = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getRotation(ForgeDirection.UP);
if(receiverNode == null || receiverNode.expired) receiverNode = this.createNode(PlasmaNetworkProvider.THE_PROVIDER, rot);
if(providerNode == null || providerNode.expired) providerNode = this.createNode(PlasmaNetworkProvider.THE_PROVIDER, rot.getOpposite());
if(receiverNode != null && receiverNode.hasValidNet()) receiverNode.net.addReceiver(this);
if(providerNode != null && providerNode.hasValidNet()) providerNode.net.addProvider(this); // technically unused, but good to have when we do something else with the plasma nets
PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(plasmaModule.recipe);
if(recipe != null) this.maxPower = recipe.power * 100;
this.maxPower = BobMathUtil.max(this.power, this.maxPower, 100_000);
this.power = Library.chargeTEFromItems(slots, 0, power, maxPower);
for(DirPos pos : getConPos()) {
this.trySubscribe(worldObj, pos);
if(inputTank.getTankType() != Fluids.NONE) this.trySubscribe(inputTank.getTankType(), worldObj, pos);
}
double speed = 1D;
double pow = 1D;
boolean ignition = recipe != null ? recipe.ignitionTemp <= this.plasmaEnergySync : true;
this.plasmaModule.update(speed, pow, ignition, slots[1]);
this.didProcess = this.plasmaModule.didProcess;
if(this.plasmaModule.markDirty) this.markDirty();
if(providerNode != null && providerNode.hasValidNet()) {
for(Object o : providerNode.net.receiverEntries.entrySet()) {
Entry<Object, Long> entry = (Entry<Object, Long>) o;
if(entry.getKey() instanceof IFusionPowerReceiver) {
long powerReceived = (long) Math.ceil(this.plasmaEnergySync * 0.75);
((IFusionPowerReceiver) entry.getKey()).receiveFusionPower(powerReceived, 0, plasmaRed, plasmaGreen, plasmaBlue);
}
}
}
this.networkPackNT(100);
} else {
if(timeOffset == -1) this.timeOffset = worldObj.rand.nextInt(30_000);
}
}
public GenNode createNode(INetworkProvider provider, ForgeDirection dir) {
GenNode node = UniNodespace.getNode(worldObj, xCoord + dir.offsetX * 5, yCoord + 2, zCoord + dir.offsetZ * 5, provider);
if(node != null) return node;
node = new GenNode(provider,
new BlockPos(xCoord + dir.offsetX * 5, yCoord + 2, zCoord + dir.offsetZ * 5))
.setConnections(new DirPos(xCoord + dir.offsetX * 6, yCoord + 2, zCoord + dir.offsetZ * 6, dir));
UniNodespace.createNode(worldObj, node);
return node;
}
public DirPos[] getConPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
return new DirPos[] {
new DirPos(xCoord + dir.offsetX * 6 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 6 - rot.offsetZ * 2, dir),
new DirPos(xCoord + dir.offsetX * 6 - rot.offsetX * 1, yCoord, zCoord + dir.offsetZ * 6 - rot.offsetZ * 1, dir),
new DirPos(xCoord + dir.offsetX * 6 + rot.offsetX * 0, yCoord, zCoord + dir.offsetZ * 6 + rot.offsetZ * 0, dir),
new DirPos(xCoord + dir.offsetX * 6 + rot.offsetX * 1, yCoord, zCoord + dir.offsetZ * 6 + rot.offsetZ * 1, dir),
new DirPos(xCoord + dir.offsetX * 6 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 6 + rot.offsetZ * 2, dir),
new DirPos(xCoord - dir.offsetX * 6 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 6 - rot.offsetZ * 2, dir.getOpposite()),
new DirPos(xCoord - dir.offsetX * 6 - rot.offsetX * 1, yCoord, zCoord - dir.offsetZ * 6 - rot.offsetZ * 1, dir.getOpposite()),
new DirPos(xCoord - dir.offsetX * 6 + rot.offsetX * 0, yCoord, zCoord - dir.offsetZ * 6 + rot.offsetZ * 0, dir.getOpposite()),
new DirPos(xCoord - dir.offsetX * 6 + rot.offsetX * 1, yCoord, zCoord - dir.offsetZ * 6 + rot.offsetZ * 1, dir.getOpposite()),
new DirPos(xCoord - dir.offsetX * 6 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 6 + rot.offsetZ * 2, dir.getOpposite()),
};
}
@Override
public void serialize(ByteBuf buf) {
super.serialize(buf);
this.inputTank.serialize(buf);
buf.writeFloat(plasmaRed);
buf.writeFloat(plasmaGreen);
buf.writeFloat(plasmaBlue);
buf.writeLong(plasmaEnergySync);
buf.writeLong(power);
buf.writeLong(maxPower);
buf.writeBoolean(didProcess);
this.plasmaModule.serialize(buf);
}
@Override
public void deserialize(ByteBuf buf) {
super.deserialize(buf);
this.inputTank.deserialize(buf);
this.plasmaRed = buf.readFloat();
this.plasmaGreen = buf.readFloat();
this.plasmaBlue = buf.readFloat();
this.plasmaEnergySync = buf.readLong();
this.power = buf.readLong();
this.maxPower = buf.readLong();
this.didProcess = buf.readBoolean();
this.plasmaModule.deserialize(buf);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.inputTank.readFromNBT(nbt, "i");
this.power = nbt.getLong("power");
this.maxPower = nbt.getLong("maxPower");
this.plasmaModule.readFromNBT(nbt);
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
this.inputTank.writeToNBT(nbt, "i");
nbt.setLong("power", power);
nbt.setLong("maxPower", maxPower);
this.plasmaModule.writeToNBT(nbt);
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
if(slot == 0) return true; // battery
if(slot == 1 && stack.getItem() == ModItems.blueprints) return true;
// TODO booster material
if(this.plasmaModule.isItemValid(slot, stack)) return true; // recipe input crap
return false;
}
@Override
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
return i == 15 || this.plasmaModule.isSlotClogged(i);
}
@Override
public int[] getAccessibleSlotsFromSide(int side) {
return new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
}
@Override public long getPower() { return power; }
@Override public void setPower(long power) { this.power = power; }
@Override public long getMaxPower() { return maxPower; }
@Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {inputTank}; }
@Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTank}; }
@Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); }
@Override
public void receiveControl(NBTTagCompound data) {
if(data.hasKey("index") && data.hasKey("selection")) {
int index = data.getInteger("index");
String selection = data.getString("selection");
if(index == 0) {
this.plasmaModule.recipe = selection;
this.markChanged();
}
}
}
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 5, yCoord, zCoord - 5, xCoord + 5, yCoord + 6, zCoord + 6);
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachinePlasmaForge(player.inventory, this); }
@Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachinePlasmaForge(player.inventory, this); }
}

View File

@ -169,6 +169,9 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP
boolean ignition = recipe != null ? recipe.ignitionTemp <= this.klystronEnergy : true;
float r = 0F;
float g = 0F;
float b = 0F;
this.plasmaEnergy = 0;
this.fuelConsumption = 0;
this.fusionModule.preUpdate(factor, collectors * 0.5D);
@ -178,6 +181,9 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP
if(didProcess && recipe != null) {
this.plasmaEnergy = (long) Math.ceil(recipe.outputTemp * factor);
this.fuelConsumption = factor;
r = recipe.r;
g = recipe.g;
b = recipe.b;
}
double outputIntensity = this.getOuputIntensity(receiverCount);
@ -192,7 +198,7 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP
if(entry.getKey() instanceof IFusionPowerReceiver) {
long powerReceived = (long) Math.ceil(this.plasmaEnergy * outputIntensity);
((IFusionPowerReceiver) entry.getKey()).receiveFusionPower(powerReceived, outputFlux);
((IFusionPowerReceiver) entry.getKey()).receiveFusionPower(powerReceived, outputFlux, r, g, b);
}
}
}

View File

@ -52,16 +52,21 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
public double lastPosLeft = 0;
public double posFront = 0;
public double posLeft = 0;
public double syncFront = 0;
public double syncLeft = 0;
private static final double speed = 0.05D;
private boolean goesDown = false;
public double lastProgress = 1D;
public double progress = 1D;
public double syncProgress = 1D;
private ItemStack loadedItem;
private boolean hasLoaded = false;
public double loadedHeat;
public double loadedEnrichment;
private int turnProgress;
@Override
public void updateEntity() {
@ -69,38 +74,58 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
if(worldObj.isRemote) {
lastTiltFront = tiltFront;
lastTiltLeft = tiltLeft;
}
lastPosFront = posFront;
lastPosLeft = posLeft;
lastProgress = progress;
if(goesDown) {
if(progress > 0) {
progress -= 0.04D;
if(this.turnProgress > 0) {
this.posFront = this.posFront + ((this.syncFront - this.posFront) / (double) this.turnProgress);
this.posLeft = this.posLeft + ((this.syncLeft - this.posLeft) / (double) this.turnProgress);
this.progress = this.progress + ((this.syncProgress - this.progress) / (double) this.turnProgress);
--this.turnProgress;
} else {
progress = 0;
goesDown = false;
if(!worldObj.isRemote && this.canTargetInteract()) {
IRBMKLoadable column = getColumnAtPos();
if(column != null) { // canTargetInteract already assumes this, but there seems to be some freak race conditions that cause the column to be null anyway
if(this.loadedItem != null) {
column.load(this.loadedItem);
this.loadedItem = null;
} else {
this.loadedItem = column.provideNext();
column.unload();
}
this.markDirty();
}
}
this.posFront = this.syncFront;
this.posLeft = this.syncLeft;
this.progress = this.syncProgress;
}
} else if(progress != 1) {
}
if(!worldObj.isRemote) {
TileEntityRBMKBase aboveColumn = this.getColumnAtPos();
if(aboveColumn != null) aboveColumn.craneIndicator = 10;
if(goesDown) {
if(progress > 0) {
progress -= 0.04D;
} else {
progress = 0;
goesDown = false;
if(aboveColumn instanceof IRBMKLoadable && this.canTargetInteract((IRBMKLoadable) aboveColumn)) {
IRBMKLoadable column = (IRBMKLoadable) aboveColumn;
if(column != null) { // canTargetInteract already assumes this, but there seems to be some freak race conditions that cause the column to be null anyway
if(this.loadedItem != null) {
column.load(this.loadedItem);
this.loadedItem = null;
} else {
this.loadedItem = column.provideNext();
column.unload();
}
progress += 0.04D;
if(progress > 1D) {
progress = 1D;
this.markDirty();
}
}
}
} else if(progress != 1) {
progress += 0.04D;
if(progress > 1D) {
progress = 1D;
}
}
}
@ -181,12 +206,10 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
}
public boolean isAboveValidTarget() {
return getColumnAtPos() != null;
return getLoadableAtPos() != null;
}
public boolean canTargetInteract() {
IRBMKLoadable column = getColumnAtPos();
public boolean canTargetInteract(IRBMKLoadable column) {
if(column == null)
return false;
@ -198,7 +221,7 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
}
}
public IRBMKLoadable getColumnAtPos() {
public TileEntityRBMKBase getColumnAtPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection left = dir.getRotation(ForgeDirection.DOWN);
@ -214,15 +237,19 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
int[] pos = ((BlockDummyable)b).findCore(worldObj, x, y, z);
if(pos != null) {
TileEntityRBMKBase column = (TileEntityRBMKBase)worldObj.getTileEntity(pos[0], pos[1], pos[2]);
if(column instanceof IRBMKLoadable) {
return (IRBMKLoadable) column;
}
return column;
}
}
return null;
}
public IRBMKLoadable getLoadableAtPos() {
TileEntityRBMKBase column = this.getColumnAtPos();
if(column instanceof IRBMKLoadable) return (IRBMKLoadable) column;
return null;
}
@Override
public void serialize(ByteBuf buf) {
buf.writeBoolean(this.setUpCrane);
@ -239,6 +266,7 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
buf.writeInt(this.height);
buf.writeDouble(this.posFront);
buf.writeDouble(this.posLeft);
buf.writeDouble(this.progress);
buf.writeBoolean(this.hasItemLoaded());
buf.writeDouble(this.loadedHeat);
buf.writeDouble(this.loadedEnrichment);
@ -247,10 +275,6 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
@Override
public void deserialize(ByteBuf buf) {
lastPosFront = posFront;
lastPosLeft = posLeft;
lastProgress = progress;
this.setUpCrane = buf.readBoolean();
if (this.setUpCrane) {
this.craneRotationOffset = buf.readInt();
@ -262,8 +286,9 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp
this.spanL = buf.readInt();
this.spanR = buf.readInt();
this.height = buf.readInt();
this.posFront = buf.readDouble();
this.posLeft = buf.readDouble();
this.syncFront = buf.readDouble();
this.syncLeft = buf.readDouble();
this.syncProgress = buf.readDouble();
this.hasLoaded = buf.readBoolean();
this.loadedHeat = buf.readDouble();
this.loadedEnrichment = buf.readDouble();

View File

@ -56,6 +56,9 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase {
public static final int maxWater = 16000;
public int reasimSteam;
public static final int maxSteam = 16000;
public int craneIndicator;
public static boolean explodeOnBroken = true;
public boolean hasLid() {
@ -103,6 +106,8 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase {
public void updateEntity() {
if(!worldObj.isRemote) {
if(this.craneIndicator > 0) this.craneIndicator--;
this.worldObj.theProfiler.startSection("rbmkBase_heat_movement");
moveHeat();
@ -286,6 +291,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase {
buf.writeDouble(this.heat);
buf.writeInt(this.reasimWater);
buf.writeInt(this.reasimSteam);
buf.writeByte((byte) this.craneIndicator);
}
@Override
@ -293,6 +299,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase {
this.heat = buf.readDouble();
this.reasimWater = buf.readInt();
this.reasimSteam = buf.readInt();
this.craneIndicator = buf.readByte();
}
public void getDiagData(NBTTagCompound nbt) {

View File

@ -100,6 +100,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole());
columns[index].data.setDouble("heat", rbmk.heat);
columns[index].data.setDouble("maxHeat", rbmk.maxHeat());
columns[index].data.setByte("indicator", (byte) rbmk.craneIndicator);
if(rbmk.isModerated()) columns[index].data.setBoolean("moderated", true); //false is the default anyway and not setting it when we don't need to reduces cruft
if(te instanceof TileEntityRBMKRod) {
@ -136,8 +137,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
RBMKColumn col = this.columns[i];
if(col == null)
continue;
if(col == null) continue;
switch(screen.type) {
case COL_TEMP:

View File

@ -23,7 +23,6 @@ import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase implements SimpleComponent, CompatHandler.OCComponent, IEnergyReceiverMK2 {
@SideOnly(Side.CLIENT)
public double lastLevel;
public double level;
public static final double speed = 0.00277D; // it takes around 18 seconds for the thing to fully extend

View File

@ -198,7 +198,8 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement
@Override
public String[] getFunctionInfo() {
return new String[] {
PREFIX_FUNCTION + "setrods" + NAME_SEPARATOR + "percent"
PREFIX_FUNCTION + "setrods" + NAME_SEPARATOR + "percent",
PREFIX_FUNCTION + "extendrods" + NAME_SEPARATOR + "percent"
};
}
@ -212,6 +213,13 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement
return null;
}
if((PREFIX_FUNCTION + "extendrods").equals(name) && params.length > 0) {
int percent = IRORInteractive.parseInt(params[0], -100, 100);
this.targetLevel = MathHelper.clamp_double(this.targetLevel + percent / 100D, 0D, 1D);
this.markDirty();
return null;
}
return null;
}
}

View File

@ -76,11 +76,12 @@ public class TileEntityRBMKDisplay extends TileEntityLoadedBase {
if(te instanceof TileEntityRBMKBase) {
TileEntityRBMKBase rbmk = (TileEntityRBMKBase)te;
TileEntityRBMKBase rbmk = (TileEntityRBMKBase) te;
columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole());
columns[index].data.setDouble("heat", rbmk.heat);
columns[index].data.setDouble("maxHeat", rbmk.maxHeat());
columns[index].data.setByte("indicator", (byte) rbmk.craneIndicator);
if(te instanceof TileEntityRBMKControlManual) {
TileEntityRBMKControlManual control = (TileEntityRBMKControlManual) te;

View File

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

View File

@ -0,0 +1,199 @@
package com.hbm.tileentity.machine.rbmk;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.GUIScreenRBMKKeyPad;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.tileentity.network.RTTYSystem;
import com.hbm.util.BufferUtil;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class TileEntityRBMKKeyPad extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver {
/* __________
* / /|
* /________ / |
* | __ __ | |
* ||__| |__|| |
* | __ __ | |
* ||__| |__|| /
* |_________|/
*/
public KeyUnit[] keys = new KeyUnit[4];
public TileEntityRBMKKeyPad() {
for(int i = 0; i < 4; i++) this.keys[i] = new KeyUnit(i);
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
for(int i = 0; i < 4; i++) this.keys[i].update();
this.networkPackNT(50);
}
}
@Override
public void serialize(ByteBuf buf) {
super.serialize(buf);
for(int i = 0; i < 4; i++) this.keys[i].serialize(buf);
}
@Override
public void deserialize(ByteBuf buf) {
super.deserialize(buf);
for(int i = 0; i < 4; i++) this.keys[i].deserialize(buf);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
for(int i = 0; i < 4; i++) this.keys[i].readFromNBT(nbt, i);
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
for(int i = 0; i < 4; i++) this.keys[i].writeToNBT(nbt, i);
}
public class KeyUnit {
/** If the output should be per tick, allows the "is pressed" state */
public boolean polling;
/** If the button is toggled, assuming polling is enabled */
public boolean isPressed;
/** Color of the button as rendered on the panel */
public int color;
/** Label on the button as rendered on the panel */
public String label = "";
/** What channel to send the command over */
public String rtty = "";
/** What to send when pressed */
public String command = "";
/** Whether this button is enabled and can be pressed */
public boolean active;
/** For non-polling buttons, the time until the button visually upresses */
public int clickTimer;
public KeyUnit(int initialIndex) {
if(initialIndex == 0) color = 0xff0000;
if(initialIndex == 1) color = 0xffff00;
if(initialIndex == 2) color = 0x0080ff;
if(initialIndex == 3) color = 0x00ff00;
label = "Button " + (initialIndex + 1);
}
public void click() {
if(!active) return;
if(!polling) {
if(canSend()) RTTYSystem.broadcast(worldObj, rtty, command);
this.isPressed = true;
this.clickTimer = 7;
} else {
this.isPressed = !this.isPressed;
TileEntityRBMKKeyPad.this.markDirty();
}
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "random.click", 1F, this.isPressed ? 1F : 0.75F);
}
public void update() {
if(!active) return;
if(polling && isPressed) {
if(canSend()) RTTYSystem.broadcast(worldObj, rtty, command);
}
if(!polling && isPressed) {
if(this.clickTimer-- <= 0) {
this.isPressed = false;
}
}
}
public boolean canSend() {
return rtty != null && !rtty.isEmpty() && command != null && !command.isEmpty();
}
public void serialize(ByteBuf buf) {
buf.writeBoolean(active);
buf.writeBoolean(polling);
buf.writeBoolean(isPressed);
buf.writeInt(color);
BufferUtil.writeString(buf, label);
BufferUtil.writeString(buf, rtty);
BufferUtil.writeString(buf, command);
}
public void deserialize(ByteBuf buf) {
active = buf.readBoolean();
polling = buf.readBoolean();
isPressed = buf.readBoolean();
color = buf.readInt();
label = BufferUtil.readString(buf);
rtty = BufferUtil.readString(buf);
command = BufferUtil.readString(buf);
}
public void readFromNBT(NBTTagCompound nbt, int index) {
this.active = nbt.getBoolean("active" + index);
this.polling = nbt.getBoolean("polling" + index);
this.isPressed = nbt.getBoolean("isPressed" + index);
this.color = nbt.getInteger("color" + index);
this.label = nbt.getString("label" + index);
this.rtty = nbt.getString("rtty" + index);
this.command = nbt.getString("command" + index);
}
public void writeToNBT(NBTTagCompound nbt, int index) {
nbt.setBoolean("active" + index, active);
nbt.setBoolean("polling" + index, polling);
nbt.setBoolean("isPressed" + index, isPressed);
nbt.setInteger("color" + index, color);
nbt.setString("label" + index, label);
nbt.setString("rtty" + index, rtty);
nbt.setString("command" + index, command);
}
}
@Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; }
@Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenRBMKKeyPad(this); }
@Override
public boolean hasPermission(EntityPlayer player) {
return player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 15 * 15;
}
@Override
public void receiveControl(NBTTagCompound data) {
int active = data.getByte("active");
int polling = data.getByte("polling");
for(int i = 0; i < 4; i++) {
this.keys[i].active = (active & (1 << i)) != 0;
this.keys[i].polling = (polling & (1 << i)) != 0;
}
for(int i = 0; i < 4; i++) {
KeyUnit key = this.keys[i];
key.color = MathHelper.clamp_int(data.getInteger("color" + i), 0, 0xffffff);
key.label = data.getString("label" + i);
key.rtty = data.getString("rtty" + i);
key.command = data.getString("cmd" + i);
}
}
}

View File

@ -106,7 +106,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM
public void invalidate() {
super.invalidate();
if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getHullHeat(slots[0]) >= 150) {
if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getHullHeat(slots[0]) >= 150 && !RBMKDials.getMeltdownsDisabled(worldObj)) {
this.meltdown();
}
}
@ -558,11 +558,11 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM
@Override
public String provideRORValue(String name) {
if((PREFIX_VALUE + "columnheat").equals(name)) return "" + this.heat;
if((PREFIX_VALUE + "columnheat").equals(name)) return "" + (int) this.heat;
if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) {
if((PREFIX_VALUE + "rodheat").equals(name)) return "" + ItemRBMKRod.getHullHeat(slots[0]);
if((PREFIX_VALUE + "depletion").equals(name)) return "" + (100 - ItemRBMKRod.getEnrichment(slots[0]) * 100);
if((PREFIX_VALUE + "xenon").equals(name)) return "" + (ItemRBMKRod.getPoison(slots[0]) * 100);
if((PREFIX_VALUE + "rodheat").equals(name)) return "" + (int) ItemRBMKRod.getHullHeat(slots[0]);
if((PREFIX_VALUE + "depletion").equals(name)) return "" + (int) (100 - ItemRBMKRod.getEnrichment(slots[0]) * 100);
if((PREFIX_VALUE + "xenon").equals(name)) return "" + (int) (ItemRBMKRod.getPoison(slots[0]));
}
return null;
}

View File

@ -20,7 +20,7 @@ import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityRadioTorchController extends TileEntityLoadedBase implements IControlReceiver {
public String channel;
public String channel = "";
public String prev;
public boolean polling = false;

View File

@ -8,6 +8,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map.Entry;
import com.google.gson.Gson;
@ -427,7 +428,7 @@ public class DamageResistanceHandler {
@SubscribeEvent
public void onEntityAttacked(LivingAttackEvent event) {
if(event.source.isDamageAbsolute()) return;
EntityLivingBase e = event.entityLiving;
float amount = event.ammount;
@ -443,6 +444,7 @@ public class DamageResistanceHandler {
@SubscribeEvent
public void onEntityDamaged(LivingHurtEvent event) {
event.ammount = calculateDamage(event.entityLiving, event.source, event.ammount, currentPDT, currentPDR);
if(event.entityLiving instanceof IResistanceProvider) {
IResistanceProvider irp = (IResistanceProvider) event.entityLiving;
@ -454,10 +456,10 @@ public class DamageResistanceHandler {
if(source.isExplosion()) return CATEGORY_EXPLOSION;
if(source.isFireDamage()) return CATEGORY_FIRE;
if(source.isProjectile()) return CATEGORY_PHYSICAL;
if(source.damageType.equals(DamageClass.LASER.name())) return CATEGORY_ENERGY;
if(source.damageType.equals(DamageClass.MICROWAVE.name())) return CATEGORY_ENERGY;
if(source.damageType.equals(DamageClass.SUBATOMIC.name())) return CATEGORY_ENERGY;
if(source.damageType.equals(DamageClass.ELECTRIC.name())) return CATEGORY_ENERGY;
if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.LASER.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY;
if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.MICROWAVE.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY;
if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.SUBATOMIC.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY;
if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.ELECTRIC.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY;
if(source == DamageSource.cactus) return CATEGORY_PHYSICAL;
if(source instanceof EntityDamageSource) return CATEGORY_PHYSICAL;
return source.damageType;
@ -546,7 +548,7 @@ public class DamageResistanceHandler {
return source.isUnblockable() ? null : otherResistance;
}
public ResistanceStats addExact(String type, float threshold, float resistance) { exactResistances.put(type, new Resistance(threshold, resistance)); return this; }
public ResistanceStats addExact(String type, float threshold, float resistance) { exactResistances.put(type.toLowerCase(Locale.US), new Resistance(threshold, resistance)); return this; }
public ResistanceStats addCategory(String type, float threshold, float resistance) { categoryResistances.put(type, new Resistance(threshold, resistance)); return this; }
public ResistanceStats setOther(float threshold, float resistance) { otherResistance = new Resistance(threshold, resistance); return this; }

View File

@ -1,11 +1,7 @@
package com.hbm.util;
import com.google.common.collect.Sets;
import com.hbm.config.GeneralConfig;
import com.hbm.main.MainRegistry;
import cpw.mods.fml.relauncher.ReflectionHelper;
import java.lang.reflect.Field;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
@ -60,18 +56,6 @@ public class ShadyUtil {
hashes.add("31da6223a100ed348ceb3254ceab67c9cc102cb2a04ac24de0df3ef3479b1036");
}
public static final int c = 0x3d;
public static String initializer = "Ur bp7mN-@UFZKXBx9N[/>M'k\\7\\9m3b";
public static String signature = "dYPq\\YzrNpfn[ZDxdk7PS2jhTY72cZT7SoH|\\WL3dIznfC";
public static String mask = "E#?V,%l!nb4 ik_wJ@(&k4o>Wq";
public static String checksum = "dpXt\\Xnr\\Yzm";
public static String testCase = "dYPq\\YzrNm3FUH;P[ZTq";
public static String testValue = "WGm?";
public static String smTest1 = "hgwS";
public static String smTest2 = "8Sfw";
public static String smTest3 = "j11D";
public static String smTest4 = "s783";
public static Set<String> contributors = Sets.newHashSet(new String[] {
"06ab7c03-55ce-43f8-9d3c-2850e3c652de", //mustang_rudolf
"5bf069bc-5b46-4179-aafe-35c0a07dee8b", //JMF781
@ -79,18 +63,10 @@ public class ShadyUtil {
});
// simple cryptographic utils
public static String encode(String msg) { return Base64.getEncoder().encodeToString(msg.getBytes()); }
public static String decode(String msg) { return new String(Base64.getDecoder().decode(msg)); }
@Deprecated public static String encode(String msg) { return Base64.getEncoder().encodeToString(msg.getBytes()); }
@Deprecated public static String decode(String msg) { return new String(Base64.getDecoder().decode(msg)); }
public static String offset(String msg, int o) {
byte[] bytes = msg.getBytes();
for(int i = 0; i < bytes.length; i++) {
bytes[i] += o;
}
return new String(bytes);
}
/** Encryptor for the h-cat answer strings */
/** complete fucking shit */
public static String smoosh(String s1, String s2, String s3, String s4) {
Random rand = new Random();
@ -132,23 +108,4 @@ public class ShadyUtil {
} catch(NoSuchAlgorithmException e) { }
return "";
}
public static void test() {
if(!GeneralConfig.enableDebugMode) return; //only run in debug mode
//unit test for smooshing
MainRegistry.logger.debug(smoosh(smTest1, smTest2, smTest3, smTest4));
try {
Class test = Class.forName(decode(offset(signature, -2)));
Field field = ReflectionHelper.findField(test, decode(offset(checksum, -2)));
if(field != null) {
System.out.println("TEST SECTION START");
//Class toLoad = Class.forName(decode(offset(testCase, -2)));
//Field toRead = ReflectionHelper.findField(toLoad, decode(offset(testValue, -2)));
//ModEventHandler.reference = toRead;
System.out.println("TEST SECTION END");
}
} catch(Throwable e) { }
}
}

File diff suppressed because it is too large Load Diff

View File

@ -463,6 +463,7 @@ container.rbmkBoiler=RBMK Dampfkanal
container.rbmkControl=RBMK Steuerstäbe
container.rbmkControlAuto=RBMK Automatische Steuerstäbe
container.rbmkHeater=RBMK Heizer
container.rbmkKeyPad=Redstone-over-Radio Tastenfeld
container.rbmkOutgasser=RBMK Bestrahlungskanal
container.rbmkReaSim=RBMK Brennstäbe (ReaSim)
container.rbmkRod=RBMK Brennstäbe
@ -4888,7 +4889,9 @@ tile.rbmk_control_reasim.name=RBMK Steuerstäbe (ReaSim)
tile.rbmk_control_reasim_auto.name=RBMK Automatische Steuerstäbe (ReaSim)
tile.rbmk_crane_console.name=RBMK Kransteuerung
tile.rbmk_display.name=RBMK Anzeigepanel
tile.rbmk_gauge.name=Redstone-over-Radio Meter
tile.rbmk_heater.name=RBMK-Heizer
tile.rbmk_key_pad.name=Redstone-over-Radio Tastenfeld
tile.rbmk_loader.name=RBMK-Dampfadapter
tile.rbmk_moderator.name=RBMK Graphitmoderator
tile.rbmk_outgasser.name=RBMK Bestrahlungskanal

View File

@ -870,6 +870,7 @@ container.rbmkBoiler=RBMK Steam Channel
container.rbmkControl=RBMK Control Rods
container.rbmkControlAuto=RBMK Automatic Control Rods
container.rbmkHeater=RBMK Fluid Heater
container.rbmkKeyPad=Redstone-over-Radio Keypad
container.rbmkOutgasser=RBMK Irradiation Channel
container.rbmkReaSim=RBMK Fuel Rod (ReaSim)
container.rbmkRod=RBMK Fuel Rod
@ -6167,7 +6168,9 @@ tile.rbmk_control_reasim.name=RBMK Control Rods (ReaSim)
tile.rbmk_control_reasim_auto.name=RBMK Automatic Control Rods (ReaSim)
tile.rbmk_crane_console.name=RBMK Crane Console
tile.rbmk_display.name=RBMK Display Panel
tile.rbmk_gauge.name=Redstone-over-Radio Gauge
tile.rbmk_heater.name=RBMK Fluid Heater
tile.rbmk_key_pad.name=Redstone-over-Radio Keypad
tile.rbmk_loader.name=RBMK Steam Connector
tile.rbmk_loader.desc=Allows RBMKs to have both water and steam connections at the bottom$Place one water pipe below the RBMK column, then the connector,$then connect the steam duct to the connector.
tile.rbmk_moderator.name=RBMK Graphite Moderator

View File

@ -866,7 +866,7 @@ container.rbmkBoiler=Паровой канал РБМК
container.rbmkControl=Регулирующие стержни РБМК
container.rbmkControlAuto=Автоматические регулирующие стержни РБМК
container.rbmkHeater=Жидкостный нагреватель РБМК
container.rbmkOutgasser=Стержень облучения РБМК
container.rbmkOutgasser=Колонна облучение РБМК
container.rbmkReaSim=Топливные стержни РБМК (РеаСим)
container.rbmkRod=Топливные стержни РБМК
container.rbmkStorage=Колонна-хранилище РБМК
@ -1303,134 +1303,6 @@ gui.weapon.quality.utility=Утилитарное
gui.weapon.quality.secret=СЕКРЕТНОЕ
gui.weapon.quality.debug=ОТЛАДКА
gun.make.ARMALITE=Armalite
gun.make.AUTO_ORDINANCE=Корпорация Авто-Орденс
gun.make.BAE=БАЕ Системс
gun.make.BENELLI=Бенелли Арми СПА
gun.make.BLACK_MESA=Исследовательский комплекс Чёрная Меза
gun.make.CERIX=Церикс Магнус
gun.make.COLT=Colt's Manufacturing Company
gun.make.COMBINE=Вселенский Союз
gun.make.CUBE=Куб 2: Sauerbraten
gun.make.DRG=Deep Rock Galactic
gun.make.ENZINGER=Энзингер Юнион
gun.make.EQUESTRIA=Equestria Missile Systems
gun.make.FLIMFLAM=ФлимФлэм Индастриз
gun.make.F_STRONG=Форт Стронг
gun.make.GLORIA=Gloria GmbH
gun.make.HASBRO=Хасбро
gun.make.H_AND_K=Heckler & Koch
gun.make.H_AND_R=Harrington & Richardson
gun.make.IF=Огненные Подковы
gun.make.IMI=Военная Промышленность Израиля
gun.make.IMI_BIGMT=IMI / Большая Гора
gun.make.LANGFORD=Langford Research Laboratories
gun.make.LUNA=Корпус Лунной Обороны
gun.make.MAGNUM_R_IMI=Magnum Research / Israel Military Industries
gun.make.MANN=Манн Ко.
gun.make.MAXIM=Хайрам Максим
gun.make.METRO=Оружейники Метро
gun.make.MWT=Лаборатории прототипов МВТ
gun.make.NAWS=Kayarm Industries
gun.make.ERFURT=Erfurter Maschinenfabrik Geipel
gun.make.NONE=-
gun.make.RAYTHEON=Raytheon Missile Systems
gun.make.REMINGTON=Remington Arms
gun.make.ROCKWELL=Корпорация "Рокуэлл"
gun.make.ROCKWELL_U=Корпорация "Рокуэлл"?
gun.make.RYAN=Ryan Industries
gun.make.SAAB=Saab Bofors Dynamics
gun.make.SACO=Saco Defense / US Ordnance
gun.make.TULSKY=Тульский Оружейный Завод
gun.make.UAC=Объединённая Аэрокосмическая Корпорация
gun.make.UNKNOWN=???
gun.make.WESTTEK=WestTek
gun.make.WGW=Wilhelm-Gustloff-Werke
gun.make.WINCHESTER=Winchester Repeating Arms Company
gun.make.WINCHESTER_BIGMT=Winchester Repeating Arms Company / Большая Гора
gun.name.ar15_50=Модификация AR-15 под .50 BMG
gun.name.baeAR=Стандартная винтовка британнской армии
gun.name.bel=Катапульта для жар-яиц
gun.name.benelli=Benelli M4 Super 90
gun.name.benelliDrum=Benelli M4 Super 90 (Барабанный магазин)
gun.name.bio=RI No. 2 Mark 1
gun.name.bolter=Болтер модели "Мантикора"
gun.name.congoLake=Помповый гранатомет Congo Lake
gun.name.cPython=Colt Python
gun.name.cz53=Персональный миниган CZ53
gun.name.cz57=Миниган "Мститель" CZ57
gun.name.dart=Игломёт
gun.name.deagle=IMI Desert Eagle
gun.name.emp=Проектор ЭМИ-сфер
gun.name.extinguisher=6кг огнетушитель PROTEX
gun.name.ffiV=FFI Viper
gun.name.ffiVInox=FFI Viper Inox
gun.name.ffiVLead=FFI Viper Lead
gun.name.ffiVN1=FFI Viper N1
gun.name.ffiVN2=FFI Viper N2
gun.name.ffiVUltra=FFI Viper Ultra
gun.name.ffivBling=FFI Viper Bling
gun.name.ffivSatur=FFI Viper D-25A
gun.name.g36=Heckler & Koch Gewehr 36
gun.name.gPistol=Granatpistole HK69
gun.name.gustav=Безоткатная винтовка "Карл-Густав" M1
gun.name.ifHorseshoe=IF-18 "Подкова"
gun.name.ifPit=IF-18 "Подкова" - Бездонная яма
gun.name.ifScope=IF-18 "Подкова" с прицелом
gun.name.ifStorm=IF-18 "Подкова" - Сильвер Шторм
gun.name.ifVanity=IF-18 "Подкова" - Ванити
gun.name.karl=M1 Karl-Gerät
gun.name.ks23=KS-23
gun.name.lacunae=Тётушка Лакунэ
gun.name.lasetDet=Hopeville Laser Detonator
gun.name.lunaAR=1936 Bishamonten type Assault Rifle
gun.name.lunaGun=1958 Lunatic Gun (Revised)
gun.name.lunaHLR=1944 Chang'e type LMG
gun.name.lunaShotty=1978 Guan Yu type Scattergun (Revision 1)
gun.name.lunaSMG=1936 Ānanda type SMG
gun.name.lunaSniper=1909 Rāhula type Anti-Material Rifle
gun.name.lunaTWR=Time Warp Rifle
gun.name.m2=Browning machine gun, cal. .50, M2, HB
gun.name.m42=Тактическая ядерная катапульта M-42
gun.name.m42MIRV=Экспериментальная РГН M-42
gun.name.m60=Пулемёт калибра 7.62мм M60
gun.name.maxim=Пулемёт "Максим"
gun.name.maximDouble=Сдвоенный пулемёт "Максим"
gun.name.mg3=Universal-Maschinengewehr Modell 3
gun.name.mp40=Maschinenpistole 40
gun.name.nerf=Неизвестный бластер NERF
gun.name.osipr=Стандартная пульсовая винтовка Патруля
gun.name.panz=Raketenpanzerbüchse 54
gun.name.quadro=Счетверённый переносной ракетный гранатомёт
gun.name.remington870=Remington 870
gun.name.revolverCursed=Стандартный пистолет британнской армии
gun.name.sauer=Дробовик Sauer
gun.name.spas12=Franchi SPAS-12
gun.name.spiw=H&R SPIW
gun.name.stinger=FIM-92 Stinger man-portable air-defense system
gun.name.stingerOneSky=The One Sky Stinger
gun.name.supershotty=Двуствольный дробовик
gun.name.tau=Тау-пушка XVL1456
gun.name.tommy9=Модификация пистолета-пулемёта M1A1 под 9мм
gun.name.tommy=Пистолет-пулемёт M1A1
gun.name.topaz=Тяжёлый огнемёт
gun.name.uacCarbine=UAC-41 Carbine
gun.name.uacDeagle=UAC-H54 "Martian Raptor" Automag
gun.name.uacDMR=UAC-30 Designated Marksman Rifle
gun.name.uacLMG=UAC-49 Light Machine Gun
gun.name.uacPistol=UAC .45 Standard Issue Handgun
gun.name.uacSMG=UAC Compact Sub-Machine Gun
gun.name.uboinik=Револьверный дробовик "Убойник"
gun.name.uzi=IMI Uzi
gun.name.uziSatur=IMI Uzi D-25A
gun.name.win1887=Winchester Model 1887
gun.name.win1887Inox=Winchester Model 1887 Inox
gun.name.win20Inox=Winchester Model 20 Inox
gun.name.win20Poly=Winchester Model 20 Polymer
gun.name.win20Satur=Winchester Model 20 D-25A
gun.name.zomg=Пушка отрицательной энергии EMC101
hadron.analysis=Анализ...
hadron.buttonOn=Камера анализа (если есть) включена
hadron.buttonOff=Камера анализа выключена
@ -1829,106 +1701,6 @@ item.alloy_pickaxe.name=Кирка из продвинутого сплава
item.alloy_plate.name=Нагрудник из продвинутого сплава
item.alloy_shovel.name=Лопата из продвинутого сплава
item.alloy_sword.name=Меч из продвинутого сплава
item.ammo_12gauge.name=Картечь 12 калибра
item.ammo_12gauge_du.name=Картечь 12 калибра (С урановым покрытием)
item.ammo_12gauge_incendiary.name=Картечь 12 калибра (Зажигательная)
item.ammo_12gauge_marauder.name=Тактический противомародёрный снаряд 12 калибра
item.ammo_12gauge_percussion.name=Капсюль 12 калибра
item.ammo_12gauge_shrapnel.name=Картечь 12 калибра (Шрапнельная)
item.ammo_12gauge_sleek.name=Картечь 12 калибра (IF-R&D)
item.ammo_20gauge.name=Картечь 20 калибра
item.ammo_20gauge_caustic.name=Картечь 20 калибра (Токсичная)
item.ammo_20gauge_explosive.name=Картечь 20 калибра (Взрывная)
item.ammo_20gauge_flechette.name=Игольчатые снаряды 20 калибра
item.ammo_20gauge_incendiary.name=Картечь 20 калибра (Зажигательная)
item.ammo_20gauge_shock.name=Картечь 20 калибра (Шоковая)
item.ammo_20gauge_shrapnel.name=Картечь 20 калибра (Шрапнельная)
item.ammo_20gauge_sleek.name=Картечь 20 калибра (IF-R&D)
item.ammo_20gauge_slug.name=Пуля Бреннеке 20 калибра
item.ammo_20gauge_wither.name=Картечь 20 калибра (Иссушающая)
item.ammo_22lr.name=Малокалиберный патрон .22 LR
item.ammo_22lr_ap.name=Малокалиберный патрон .22 LR (Бронебойный)
item.ammo_22lr_chlorophyte.name=Малокалиберный патрон .22 LR (Хлорофит)
item.ammo_357_desh.name=Деш-Пуля калибра .357 Магнум
item.ammo_44.name=Пуля калибра .44 Магнум
item.ammo_44_ap.name=Пуля калибра .44 Магнум (Бронебойный)
item.ammo_44_bj.name=Пуля калибра .44 Магнум (Лодка)
item.ammo_44_chlorophyte.name=Пуля калибра .44 Магнум (Хлорофит)
item.ammo_44_du.name=Пуля калибра .44 Магнум (ДУ)
item.ammo_44_phosphorus.name=Пуля калибра .44 Магнум (БФ)
item.ammo_44_pip.name=Пуля калибра .44 Магнум (Грузовой вагон)
item.ammo_44_rocket.name=Ракета-Пуля .44 Магнум
item.ammo_44_silver.name=Пуля калибра .44 Магнум (Здание)
item.ammo_44_star.name=Пуля калибра .44 Магнум (Звёздный металл)
item.ammo_45.name=.45 ACP Round
item.ammo_45_ap.name=Пуля 45-го калибра ACP (Бронебойная)
item.ammo_45_du.name=Пуля 45-го калибра ACP (С урановым наконечником)
item.ammo_4gauge.name=Картечь 4 калибра
item.ammo_4gauge_balefire.name=23мм Жар-граната
item.ammo_4gauge_canister.name=23мм Ракета (Картечь)
item.ammo_4gauge_claw.name=Картечь 4 калибра (Клешни)
item.ammo_4gauge_explosive.name=23мм граната
item.ammo_4gauge_flechette.name=Игольчатая картечь 4 калибра
item.ammo_4gauge_flechette_phosphorus.name=Игольчатая картечь 4 калибра (БФ)
item.ammo_4gauge_kampf.name=23мм Ракета
item.ammo_4gauge_semtex.name=23мм Шахтёрский заряд
item.ammo_4gauge_sleek.name=Картечь 4 калибра (IF-R&D)
item.ammo_4gauge_slug.name=Твёрдая Стальная пуля 4 калибра
item.ammo_4gauge_titan.name=Картечь 4 калибра (кряк)
item.ammo_4gauge_vampire.name=Картечь 4 калибра (Осиновый кол)
item.ammo_4gauge_void.name=Картечь 4 калибра (Пустотная оболочка)
item.ammo_50ae.name=Патрон калибра .50 AE
item.ammo_50ae_ap.name=Патрон калибра .50 AE (Бронебойный)
item.ammo_50ae_chlorophyte.name=Патрон калибра .50 AE (Хлорофит)
item.ammo_50ae_du.name=Патрон калибра .50 AE (ДУ)
item.ammo_50ae_star.name=Патрон калибра .50 AE (Звёздный металл)
item.ammo_50bmg.name=Патрон калибра .50 BMG
item.ammo_50bmg_ap.name=Патрон калибра .50 BMG (Бронебойный)
item.ammo_50bmg_chlorophyte.name=Патрон калибра .50 BMG (Хлорофит)
item.ammo_50bmg_du.name=Патрон калибра .50 BMG (ДУ)
item.ammo_50bmg_explosive.name=Патрон калибра .50 BMG (Взрывной)
item.ammo_50bmg_flechette.name=Игольчатый патрон калибра .50 BMG
item.ammo_50bmg_flechette_am.name=Игольчатый патрон калибра .50 BMG (Америций)
item.ammo_50bmg_flechette_po.name=Игольчатый патрон калибра .50 BMG (Полоний)
item.ammo_50bmg_incendiary.name=Патрон калибра .50 BMG (Зажигательный)
item.ammo_50bmg_phosphorus.name=Патрон калибра .50 BMG (БФ)
item.ammo_50bmg_sleek.name=Патрон калибра .50 BMG (IF-R&D)
item.ammo_50bmg_star.name=Патрон калибра .50 BMG (Звёздный металл)
item.ammo_secret.bmg50_black.name=Патрон калибра .50 BMG (Простреливающий)
item.ammo_556.name=5.56мм патрон
item.ammo_556_ap.name=5.56мм патрон (Бронебойный)
item.ammo_556_chlorophyte.name=5.56мм патрон (Хлорофит)
item.ammo_556_du.name=5.56мм патрон (ДУ)
item.ammo_556_flechette.name=Игольчатый 5.56-патрон
item.ammo_556_flechette_chlorophyte.name=Игольчатый 5.56-патрон (Хлорофит)
item.ammo_556_flechette_du.name=Игольчатый 5.56-патрон (Урановый бронебойный)
item.ammo_556_flechette_incendiary.name=Игольчатый 5.56-патрон (Зажигательный)
item.ammo_556_flechette_phosphorus.name=Игольчатый 5.56-патрон (Фосфорный наконечник)
item.ammo_556_flechette_sleek.name=Игольчатый 5.56-патрон (IF-R&D)
item.ammo_556_k.name=5.56мм К-Патрон
item.ammo_556_phosphorus.name=5.56мм патрон (БФ)
item.ammo_556_sleek.name=5.56мм патрон (IF-R&D)
item.ammo_556_star.name=5.56мм патрон (Звёздный металл)
item.ammo_556_tracer.name=5.56мм патрон (Трассирующий снаряд)
item.ammo_5mm.name=5-мм патрон
item.ammo_5mm_chlorophyte.name=5-мм патрон (Хлорофит)
item.ammo_5mm_du.name=5-мм патрон (ДУ)
item.ammo_5mm_explosive.name=5-мм патрон (Взрывной)
item.ammo_5mm_star.name=5-мм патрон (Звёздный металл)
item.ammo_75bolt.name=Магазин болтов .75 (30rnd)
item.ammo_75bolt_incendiary.name=Магазин зажигательных болтов .75 (30rnd)
item.ammo_75bolt_he.name=Магазин фугасных болтов .75 (30rnd)
item.ammo_762.name=7.62мм патрон
item.ammo_762_ap.name=7.62мм патрон (Бронебойный)
item.ammo_762_du.name=7.62мм патрон (С урановым наконечником)
item.ammo_762_k.name=7.62 мм K-образный патрон
item.ammo_762_phosphorus.name=7.62мм патрон (БФ)
item.ammo_762_tracer.name=7.62мм патрон (Трассирующий)
item.ammo_9mm.name=9-мм патрон
item.ammo_9mm_ap.name=9-мм патрон (Бронебойный)
item.ammo_9mm_chlorophyte.name=9-мм патрон (Хлорофит)
item.ammo_9mm_du.name=9-мм патрон (ДУ)
item.ammo_9mm_rocket.name=9-мм ракета
item.ammo_arty.name=16-дюймовый артиллерийский снаряд
item.ammo_arty_cargo.name=16-дюймовый артиллерийский снаряд для экспресс-доставки
item.ammo_arty_chlorine.name=Хлорный 16-дюймовый артиллерийский снаряд
@ -1943,39 +1715,18 @@ item.ammo_arty_phosphorus.name=Фосфорный 16-дюймовый артил
item.ammo_bag.name=Сумка для боеприпасов
item.ammo_bag_infinite.name=Бесконечная сумка для боеприпасов
item.ammo_arty_phosphorus_multi.name=Фосфорный 16-дюймовый мульти-снаряд
item.ammo_cell.name=Энерго-патроны
item.ammo_coilgun.name=Вольфрамовый шар для гаусс-пушки
item.ammo_coilgun_du.name=Ферроурановый шар для гаусс-пушки
item.ammo_coilgun_rubber.name=Резиновый шар для гаусс-пушки
item.ammo_container.name=Контейнер с боеприпасами
item.ammo_container.desc=Выдаёт патроны не более чем для трёх оружий с хотбара.
item.ammo_container.1.desc=Выдаёт патроны не более чем для трёх оружий с хотбара.$Это не распространяется на мини-ядерные заряды и прочие высокоуровневые боеприпасы.
item.ammo_dart.name=Пластиковый дротик (Иссущающий)
item.ammo_dart_nerf.name=Дротик NERF
item.ammo_dart_nuclear.name=Пластиковый дротик (С взрывчаткой)
item.ammo_dgk.name=Лента на 200 патронов для CIWS "Говард"
item.ammo_fireext.name=Бак с водой для огнетушителя
item.ammo_fireext_foam.name=Бак с пеной для огнетушителя
item.ammo_fireext_sand.name=Бак с песком для огнетушителя
item.ammo_folly.name=Серебряная пуля
item.ammo_folly_nuclear.name=Серебряная пуля (Атомная)
item.ammo_fuel.name=Бак с дизелем
item.ammo_fuel_gas.name=Бак с газом
item.ammo_fuel_napalm.name=Бак с напалмом
item.ammo_fuel_phosphorus.name=Бак с белым фосфором
item.ammo_fuel_vaporizer.name=Бак испарителя
item.ammo_grenade.name=40мм граната
item.ammo_grenade_concussion.name=40мм граната (Concussion)
item.ammo_grenade_finned.name=40мм граната (Finned)
item.ammo_grenade_he.name=40мм граната (Фугасная)
item.ammo_grenade_incendiary.name=40мм граната (Зажигательная)
item.ammo_grenade_kampf.name=40мм-Ракета
item.ammo_grenade_leadburster.name=40мм Лидбастер
item.ammo_grenade_nuclear.name=40мм граната (Привет)
item.ammo_grenade_phosphorus.name=40мм граната (БФ)
item.ammo_grenade_sleek.name=40мм граната (IF-R&D)
item.ammo_grenade_toxic.name=40мм граната (Химическая)
item.ammo_grenade_tracer.name=40мм Учебная граната
item.ammo_himars_standard.name=227-мм управляемый артиллерийский ракетный снаряд
item.ammo_himars_standard_he.name=227-мм управляемый артиллерийский ракетный снаряд (Фугасный)
item.ammo_himars_standard_lava.name=227-мм управляемый артиллерийский ракетный снаряд (Лава)
@ -1984,56 +1735,24 @@ item.ammo_himars_standard_tb.name=227-мм управляемый артилле
item.ammo_himars_standard_wp.name=227-мм управляемый артиллерийский ракетный снаряд (БФ)
item.ammo_himars_single.name=610-мм управляемый артиллерийский ракетный снаряд
item.ammo_himars_single_tb.name=610-мм управляемый артиллерийский ракетный снаряд (Термобарический)
item.ammo_luna.name=Лунный снайперский саботажный снаряд
item.ammo_luna_explosive.name=Лунный снайперский взрывной снаряд
item.ammo_luna_incendiary.name=Лунный снайперский зажигательный снаряд
item.ammo_mirv.name=МИРВ-минизаряд
item.ammo_mirv_high.name=МИРВ-минизаряд (Высокомощный)
item.ammo_mirv_low.name=МИРВ-минизаряд (Маломощный)
item.ammo_mirv_safe.name=МИРВ-минизаряд (Безопасный)
item.ammo_mirv_special.name=МИЛВ-минизаряд
item.ammo_nuke.name=Ядерный минизаряд
item.ammo_nuke_barrel.name=Мини-бочка с ядерными отходами
item.ammo_nuke_high.name=Ядерный минизаряд (Высокомощный)
item.ammo_nuke_low.name=Ядерный минизаряд (Маломощный)
item.ammo_nuke_pumpkin.name=Тыквенная бомба
item.ammo_nuke_safe.name=Ядерный минизаряд (Безопасный)
item.ammo_nuke_tots.name=Ядерный минизаряд ("Карапуз")
item.ammo_rocket.name=84-мм ракета
item.ammo_rocket_canister.name=84-мм ракета (Картечь)
item.ammo_rocket_digamma.name=null
item.ammo_rocket_emp.name=84-мм ракета (Импульсная)
item.ammo_rocket_glare.name=84-мм ракета (Красное Зарево)
item.ammo_rocket_he.name=84-мм ракета (Фугасная)
item.ammo_rocket_incendiary.name=84-мм ракета (Зажигательная)
item.ammo_rocket_nuclear.name=84-мм ракета (Привет)
item.ammo_rocket_phosphorus.name=84-мм ракета (БФ)
item.ammo_rocket_rpc.name=84-мм Ракета-Бензопила
item.ammo_rocket_shrapnel.name=84-мм ракета (Осколочная)
item.ammo_rocket_sleek.name=84-мм ракета (IF-R&D)
item.ammo_rocket_toxic.name=84-мм ракета (Химическая)
item.ammo_shell.name=240мм Снаряд
item.ammo_shell_apfsds_du.name=240мм APFSTS-DU
item.ammo_shell_apfsds_t.name=240мм APFSTS-T
item.ammo_shell_explosive.name=240мм Фугасный снаряд
item.ammo_shell_w9.name=240мм Ядерный снаряд W9
item.ammo_secret.bmg50_equestrian.name=Патрон калибра .50 BMG (Разрушитель)
item.ammo_secret.folly_nuke.name=Серебрянная пуля, ядерная
item.ammo_secret.bmg50_equestrian.name=Патрон .50 BMG (Разрушитель)
item.ammo_secret.folly_nuke.name=Серебрянная пуля (Ядерная)
item.ammo_secret.folly_sm.name=Серебрянная пуля
item.ammo_secret.g12_equestrian.name=12-й калибр Railway Spike Shot
item.ammo_secret.m44_equestrian.name=.44 магнум Разрыватель голов
item.ammo_secret.p35_800.name=.35-800 V9
item.ammo_secret.p35_800_bl.name=.35-800 V9 (Чёрная Молния)
item.ammo_secret.g12_equestrian.name=Картечь 12-го калибра (Железнодорожная гвоздь)
item.ammo_secret.m44_equestrian.name=Патрон .44 магнум (Разрыватель голов)
item.ammo_secret.p35_800.name=Патрон .35-800 V9
item.ammo_secret.p35_800_bl.name=Патрон .35-800 V9 (Чёрная Молния)
item.ammo_secret.bmg50_black.name=Патрон .50 BMG (Простреливающий)
item.ammo_standard.b75.name=.75 болт
item.ammo_standard.b75_exp.name=.75 болт (Взрывной)
item.ammo_standard.b75_inc.name=.75 болт (Зажигательный)
item.ammo_standard.bmg50_ap.name=.50 BMG патрон (Бронебойный)
item.ammo_standard.bmg50_he.name=.50 BMG патрон (Разрывной)
item.ammo_standard.bmg50_du.name=.50 BMG патрон (Обеднённый уран)
item.ammo_standard.bmg50_fmj.name=.50 BMG патрон (Цельнометаллическая оболочка)
item.ammo_standard.bmg50_sm.name=.50 BMG патрон (Звёздный Металл)
item.ammo_standard.bmg50_jhp.name=.50 BMG патрон (Экспансивный+)
item.ammo_standard.bmg50_sp.name=.50 BMG патрон (Экспансивный)
item.ammo_standard.bmg50_ap.name=Патрон .50 BMG (Бронебойный)
item.ammo_standard.bmg50_he.name=Патрон .50 BMG (Разрывной)
item.ammo_standard.bmg50_du.name=Патрон .50 BMG (Обеднённый уран)
item.ammo_standard.bmg50_fmj.name=Патрон .50 BMG (Цельнометаллическая оболочка)
item.ammo_standard.bmg50_sm.name=Патрон .50 BMG (Звёздный Металл)
item.ammo_standard.bmg50_jhp.name=Патрон .50 BMG (Экспансивный+)
item.ammo_standard.bmg50_sp.name=Патрон .50 BMG (Экспансивный)
item.ammo_standard.capacitor.name=Оружейный конденсатор (Стандартный)
item.ammo_standard.capacitor_ir.name=Оружейный конденсатор (Коротковолновой)
item.ammo_standard.capacitor_overcharge.name=Оружейный конденсатор (Перегруженный)
@ -2223,7 +1942,7 @@ item.battery_creative.name=Бесконечная батарейка
item.battery_pack.battery_lead.name=Свинцово-серная батарея
item.battery_pack.battery_lithium.name=Литий-ионная батарея
item.battery_pack.battery_quantum.name=Квантовая батарея
item.battery_pack.battery_redstone.name=Краснокаменная батарея
item.battery_pack.battery_redstone.name=Редстоуновая батарея
item.battery_pack.battery_schrabidium.name=Шрабидиевая батарея
item.battery_pack.battery_sodium.name=Натриево-железная батарея
item.battery_pack.capacitor_bismuth.name=Висмутовый конденсатор
@ -2343,10 +2062,11 @@ item.billet_u235.name=Заготовка урана-235
item.billet_u238.name=Заготовка урана-238
item.billet_uranium.name=Заготовка урана
item.billet_uranium_fuel.name=Заготовка уранового топлива
item.billet_uzh.name=Заготовка урана-циркониевого гидрида
item.billet_yharonite.name=Заготовка яронита
item.billet_zfb_am_mix.name=Заготовка ЦТС америция реакторного качества
item.billet_zfb_bismuth.name=Заготовка ЦТС висмута
item.billet_zfb_pu241.name=Заготовка ЦТС плутония-241
item.billet_zfb_am_mix.name=Заготовка ЦБР америция реакторного качества
item.billet_zfb_bismuth.name=Заготовка ЦБР висмута
item.billet_zfb_pu241.name=Заготовка ЦБР плутония-241
item.billet_zirconium.name=Заготовка циркония
item.bio_wafer.name=Вафля из водорослей
item.biomass.name=Биомасса
@ -3145,6 +2865,7 @@ item.gun_lag.name=Комически длинный пистолет
item.gun_laser_pistol.name=Лазерный пистолет
item.gun_laser_pistol_morning_glory.name=Лазерный пистолет "Morning Glory"
item.gun_laser_pistol_pew_pew.name=Лазерный пистолет "Pew Pew"
item.gun_lasrifle.name=Лазерная винтовка
item.gun_liberator.name=Дробовик "Liberator"
item.gun_light_revolver.name=Револьвер переломного действия
item.gun_light_revolver_atlas.name=Револьвер "Atlas"
@ -3379,10 +3100,10 @@ item.item_expensive.heavy_frame.name=Тяжёлый каркас
item.item_expensive.lead_plating.name=Радиационно-стойкое покрытие
item.item_expensive.plastic.name=Пластиковые панели
item.item_expensive.steel_plating.name=Стальная обшивка с болтовым соединением
item.item_secret.aberrator.name=Часть Аберратора
item.item_secret.canister.name=Композит SB-26
item.item_secret.aberrator.name=Часть "Aberrator"
item.item_secret.canister.name=Композит "SB-26"
item.item_secret.controller.name=Проприетарный блок управления
item.item_secret.folly.name=Фрагмент Безумия
item.item_secret.folly.name=Фрагмент "Folly"
item.item_secret.selenium_steel.name=Слиток селениевой стали
item.iv_blood.name=Пакет с кровью
item.iv_empty.name=Пакет для внутривенного введения
@ -3980,33 +3701,33 @@ item.pellet_mercury.name=Ртутные гранулы
item.pellet_mes.name=Среднеобогащённая шрабидиевая Ватцз-пеллета
item.pellet_meteorite.name=Метеоритные гранулы
item.pellet_neptunium.name=Нептуниевая Ватцз-пеллета
item.pellet_rtg.name=РИТЭГ-пеллета из плутония-238
item.pellet_rtg.name=РИТЭГ-пеллета (Плутоний-238)
item.pellet_rtg.desc=РИТЭГ-пеллета для бесконечной энергии! (почти)
item.pellet_rtg_actinium.name=РИТЭГ-пеллета из актиния-227
item.pellet_rtg_actinium.name=РИТЭГ-пеллета (Актиний-227)
item.pellet_rtg_actinium.desc=Сияние голубого света и бета-лучей.
item.pellet_rtg_americium.name=РИТЭГ-пеллета из америция-241
item.pellet_rtg_americium.name=РИТЭГ-пеллета (Америций-241)
item.pellet_rtg_americium.desc=Редкий и надежный, старый добрый Америций!
item.pellet_rtg_berkelium.name=РИТЭГ-пеллета из берклия-248
item.pellet_rtg_berkelium.desc=Экзотический источник альфа-излучения, служит дольше, чем америций!
item.pellet_rtg_cobalt.name=РИТЭГ-пеллета из кобальта-60
item.pellet_rtg_cobalt.name=РИТЭГ-пеллета (Кобальт-60)
item.pellet_rtg_cobalt.desc=Не лучший для РИТЭГ энергии, но хорош для гамма-радиации!
item.pellet_rtg_depleted.bismuth.name=Распавшаяся РИТЭГ-пеллета висмута
item.pellet_rtg_depleted.lead.name=Распавшаяся РИТЭГ-пеллета свинца
item.pellet_rtg_depleted.neptunium.name=Распавшаяся РИТЭГ-пеллета нептуния
item.pellet_rtg_depleted.mercury.name=Распавшаяся РИТЭГ-пеллета ртути
item.pellet_rtg_depleted.nickel.name=Распавшаяся РИТЭГ-пеллета никеля
item.pellet_rtg_depleted.zirconium.name=Распавшаяся РИТЭГ-пеллета циркония
item.pellet_rtg_lead.name=РИТЭГ-пеллета из свинца-209
item.pellet_rtg_depleted.bismuth.name=Распавшаяся РИТЭГ-пеллета (Висмут)
item.pellet_rtg_depleted.lead.name=Распавшаяся РИТЭГ-пеллета (Свинец)
item.pellet_rtg_depleted.neptunium.name=Распавшаяся РИТЭГ-пеллета (Нептуний)
item.pellet_rtg_depleted.mercury.name=Распавшаяся РИТЭГ-пеллета (Ртуть)
item.pellet_rtg_depleted.nickel.name=Распавшаяся РИТЭГ-пеллета (Никель)
item.pellet_rtg_depleted.zirconium.name=Распавшаяся РИТЭГ-пеллета (Цирконий)
item.pellet_rtg_lead.name=РИТЭГ-пеллета (Свинец-209)
item.pellet_rtg_lead.desc=Излучение приведет к неминуемой смерти.
item.pellet_rtg_gold.name=РИТЭГ-пеллета из золота-198
item.pellet_rtg_gold.name=РИТЭГ-пеллета (Золото-198)
item.pellet_rtg_gold.desc=Изготовлена из редкого, очень нестабильного изотопа золота.
item.pellet_rtg_polonium.name=РИТЭГ-пеллета из полония-210
item.pellet_rtg_polonium.name=РИТЭГ-пеллета (Полоний-210)
item.pellet_rtg_polonium.desc=Мощная РИТЭГ-пеллета, изготовленная из лучшего полония!
item.pellet_rtg_strontium.name=РИТЭГ-пеллета из стронция-90
item.pellet_rtg_strontium.name=РИТЭГ-пеллета (Стронций-90)
item.pellet_rtg_strontium.desc=Известен штату Калифорния...
item.pellet_rtg_radium.name=РИТЭГ-пеллета из радия-226
item.pellet_rtg_radium.name=РИТЭГ-пеллета (Радий-226)
item.pellet_rtg_radium.desc=Отличная стартовая пеллета, полученная из натурального радия!
item.pellet_rtg_weak.name=Слабая урановая РИТЭГ-топливная пеллета
item.pellet_rtg_weak.name=РИТЭГ-пеллета (Слабый уран)
item.pellet_rtg_weak.desc=Более дешёвая и слабая пеллета, теперь с большим количеством U238!
item.pellet_schrabidium.name=Чистая шрабидиевая Ватцз-пеллета
item.photo_panel.name=Фотоэлектрическая панель
@ -4063,13 +3784,13 @@ item.plate_desh.name=Составная пластина из деш
item.plate_dineutronium.name=Составная пластина из динейтрония
item.plate_dura_steel.name=Пластина быстрорежущей стали
item.plate_euphemium.name=Составная пластина из эвфемия
item.plate_fuel_mox.name=МОКС-топливная пластина
item.plate_fuel_pu238be.name=Плутоний-238-Бериллевая топливная пластина
item.plate_fuel_pu239.name=Высокообогащённая плутониевая-239 топливная пластина
item.plate_fuel_ra226be.name=Радий-226-Бериллевая топливная пластина
item.plate_fuel_sa326.name=Высокообогащённая шрабидий-326 топливная пластина
item.plate_fuel_u233.name=Высокообогащённая уран-233 топливная пластина
item.plate_fuel_u235.name=Высокообогащённая уран-235 топливная пластина
item.plate_fuel_mox.name=Топливная пластина (МОКС)
item.plate_fuel_pu238be.name=Топливная пластина (Плутоний-238-бериллий)
item.plate_fuel_pu239.name=Топливная пластина (Высокообогащённый плутоний-239)
item.plate_fuel_ra226be.name=Топливная пластина (Радий-226-бериллий)
item.plate_fuel_sa326.name=Топливная пластина (Высокообогащённый шрабидий-326)
item.plate_fuel_u233.name=Топливная пластина (Высокообогащённый уран-233)
item.plate_fuel_u235.name=Топливная пластина (Высокообогащённый уран-235)
item.plate_gold.name=Золотая пластина
item.plate_gunmetal.name=Пластина пушечной бронзы
item.plate_iron.name=Железная пластина
@ -4224,51 +3945,51 @@ item.protection_charm.name=Талисман защиты
item.prototype_kit.name=Комплект Прототипа
item.pudding.name=Пудинг
item.pudding.desc=Что, если бы он сделал?$Что, если бы он не сделал?$Что, если бы если мир был сделан из пуддинга?
item.pwr_fuel.bfb_am_mix.name=Стержень ВВЭР ЦБР с реакторным америцием
item.pwr_fuel.bfb_pu241.name=Стержень ВВЭР ЦБР с плутонием-241
item.pwr_fuel.hea242.name=Топливный стержень ВВЭР с высокообогащённым америцием-242
item.pwr_fuel.hen237.name=Топливный стержень ВВЭР с высокообогащённым нептунием-237
item.pwr_fuel.hep239.name=Топливный стержень ВВЭР с высокообогащённым плутонием-239
item.pwr_fuel.hep241.name=Топливный стержень ВВЭР с высокообогащённым плутонием-241
item.pwr_fuel.hes326.name=Топливный стержень ВВЭР с высокообогащённым шрабидием-326
item.pwr_fuel.hes327.name=Топливный стержень ВВЭР с высокообогащённым шрабидием-327
item.pwr_fuel.heu233.name=Топливный стержень ВВЭР с высокообогащённым ураном-233
item.pwr_fuel.heu235.name=Топливный стержень ВВЭР с высокообогащённым ураном-235
item.pwr_fuel.mea.name=Топливный стержень ВВЭР со среднеобогащённым америцием
item.pwr_fuel.men.name=Топливный стержень ВВЭР со среднеобогащённым нептунием
item.pwr_fuel.mep.name=Топливный стержень ВВЭР со среднеобогащённым плутонием
item.pwr_fuel.meu.name=Топливный стержень ВВЭР со среднеобогащённым ураном
item.pwr_fuel.mox.name=Топливный стержень ВВЭР с МОКС-топливом
item.pwr_fuel_depleted.bfb_am_mix.name=Обеднённый стержень ВВЭР ЦБР с реакторным америцием
item.pwr_fuel_depleted.bfb_pu241.name=Обеднённый стержень ВВЭР ЦБР с плутонием-241
item.pwr_fuel_depleted.hea242.name=Обеднённый топливный стержень ВВЭР с высокообогащённым америцием-242
item.pwr_fuel_depleted.hen237.name=Обеднённый топливный стержень ВВЭР с высокообогащённым нептунием-237
item.pwr_fuel_depleted.hep239.name=Обеднённый топливный стержень ВВЭР с высокообогащённым плутонием-239
item.pwr_fuel_depleted.hep241.name=Обеднённый топливный стержень ВВЭР с высокообогащённым плутонием-241
item.pwr_fuel_depleted.hes326.name=Обеднённый топливный стержень ВВЭР с высокообогащённым шрабидием-326
item.pwr_fuel_depleted.hes327.name=Обеднённый топливный стержень ВВЭР с высокообогащённым шрабидием-327
item.pwr_fuel_depleted.heu233.name=Обеднённый топливный стержень ВВЭР с высокообогащённым ураном-233
item.pwr_fuel_depleted.heu235.name=Обеднённый топливный стержень ВВЭР с высокообогащённым ураном-235
item.pwr_fuel_depleted.mea.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым америцием
item.pwr_fuel_depleted.men.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым нептунием
item.pwr_fuel_depleted.mep.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым плутонием
item.pwr_fuel_depleted.meu.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым ураном
item.pwr_fuel_depleted.mox.name=Обеднённый топливный стержень ВВЭР с МОКС-топливом
item.pwr_fuel_hot.bfb_am_mix.name=Горячий стержень ВВЭР ЦБР с реакторным америцием
item.pwr_fuel_hot.bfb_pu241.name=Горячий стержень ВВЭР ЦБР с плутонием-241
item.pwr_fuel_hot.hea242.name=Горячий стержень ВВЭР с высокообогащённым америцием-242
item.pwr_fuel_hot.hen237.name=Горячий стержень ВВЭР с высокообогащённым нептунием-237
item.pwr_fuel_hot.hep239.name=Горячий стержень ВВЭР с высокообогащённым плутонием-239
item.pwr_fuel_hot.hep241.name=Горячий стержень ВВЭР с высокообогащённым плутонием-241
item.pwr_fuel_hot.hes326.name=Горячий стержень ВВЭР с высокообогащённым шрабидием-326
item.pwr_fuel_hot.hes327.name=Горячий стержень ВВЭР с высокообогащённым шрабидием-327
item.pwr_fuel_hot.heu233.name=Горячий стержень ВВЭР с высокообогащённым ураном-233
item.pwr_fuel_hot.heu235.name=Горячий стержень ВВЭР с высокообогащённым ураном-235
item.pwr_fuel_hot.mea.name=Горячий стержень ВВЭР со среднеобогащённым америцием
item.pwr_fuel_hot.men.name=Горячий стержень ВВЭР со среднеобогащённым нептунием
item.pwr_fuel_hot.mep.name=Горячий стержень ВВЭР со среднеобогащённым плутонием
item.pwr_fuel_hot.meu.name=Горячий стержень ВВЭР со среднеобогащённым ураном
item.pwr_fuel_hot.mox.name=Горячий стержень ВВЭР с МОКС-топливом
item.pwr_fuel.bfb_am_mix.name=Топливный стержень ВВЭР (Реакторный америций ВБР)
item.pwr_fuel.bfb_pu241.name=Топливный стержень ВВЭР (Плутоний-241 ВБР)
item.pwr_fuel.hea242.name=Топливный стержень ВВЭР (Высокообогащённый америций-242)
item.pwr_fuel.hen237.name=Топливный стержень ВВЭР (Высокообогащённый нептуний-237)
item.pwr_fuel.hep239.name=Топливный стержень ВВЭР (Высокообогащённый плутоний-239)
item.pwr_fuel.hep241.name=Топливный стержень ВВЭР (Высокообогащённый плутоний-241)
item.pwr_fuel.hes326.name=Топливный стержень ВВЭР (Высокообогащённый шрабидий-326)
item.pwr_fuel.hes327.name=Топливный стержень ВВЭР (Высокообогащённый шрабидий-327)
item.pwr_fuel.heu233.name=Топливный стержень ВВЭР (Высокообогащённый уран-233)
item.pwr_fuel.heu235.name=Топливный стержень ВВЭР (Высокообогащённый уран-235)
item.pwr_fuel.mea.name=Топливный стержень ВВЭР (Среднеобогащённый америций-242)
item.pwr_fuel.men.name=Топливный стержень ВВЭР (Среднеобогащённый нептуний)
item.pwr_fuel.mep.name=Топливный стержень ВВЭР (Среднеобогащённый плутоний)
item.pwr_fuel.meu.name=Топливный стержень ВВЭР (Среднеобогащённый уран)
item.pwr_fuel.mox.name=Топливный стержень ВВЭР (МОКС)
item.pwr_fuel_depleted.bfb_am_mix.name=Обеднённый топливный стержень ВВЭР (Реакторный америций ВБР)
item.pwr_fuel_depleted.bfb_pu241.name=Обеднённый топливный стержень ВВЭР (Плутоний-241 ВБР)
item.pwr_fuel_depleted.hea242.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый америций-242)
item.pwr_fuel_depleted.hen237.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый нептуний-237)
item.pwr_fuel_depleted.hep239.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый плутоний-239)
item.pwr_fuel_depleted.hep241.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый плутоний-241)
item.pwr_fuel_depleted.hes326.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый шрабидий-326)
item.pwr_fuel_depleted.hes327.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый шрабидий-327)
item.pwr_fuel_depleted.heu233.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый уран-233)
item.pwr_fuel_depleted.heu235.name=Обеднённый топливный стержень ВВЭР (Высокообогащённый уран-235)
item.pwr_fuel_depleted.mea.name=Обеднённый топливный стержень ВВЭР (Среднеобогащённый америций-242)
item.pwr_fuel_depleted.men.name=Обеднённый топливный стержень ВВЭР (Среднеобогащённый нептуний)
item.pwr_fuel_depleted.mep.name=Обеднённый топливный стержень ВВЭР (Среднеобогащённый плутоний)
item.pwr_fuel_depleted.meu.name=Обеднённый топливный стержень ВВЭР (Среднеобогащённый уран)
item.pwr_fuel_depleted.mox.name=Обеднённый топливный стержень ВВЭР (МОКС)
item.pwr_fuel_hot.bfb_am_mix.name=Горячий топливный стержень ВВЭР (Реакторный америций ВБР)
item.pwr_fuel_hot.bfb_pu241.name=Горячий топливный стержень ВВЭР (Плутоний-241 ВБР)
item.pwr_fuel_hot.hea242.name=Горячий топливный стержень ВВЭР (Высокообогащённый америций-242)
item.pwr_fuel_hot.hen237.name=Горячий топливный стержень ВВЭР (Высокообогащённый нептуний-237)
item.pwr_fuel_hot.hep239.name=Горячий топливный стержень ВВЭР (Высокообогащённый плутоний-239)
item.pwr_fuel_hot.hep241.name=Горячий топливный стержень ВВЭР (Высокообогащённый плутоний-241)
item.pwr_fuel_hot.hes326.name=Горячий топливный стержень ВВЭР (Высокообогащённый шрабидий-326)
item.pwr_fuel_hot.hes327.name=Горячий топливный стержень ВВЭР (Высокообогащённый шрабидий-327)
item.pwr_fuel_hot.heu233.name=Горячий топливный стержень ВВЭР (Высокообогащённый уран-233)
item.pwr_fuel_hot.heu235.name=Горячий топливный стержень ВВЭР (Высокообогащённый уран-235)
item.pwr_fuel_hot.mea.name=Горячий топливный стержень ВВЭР (Среднеобогащённый америций-242)
item.pwr_fuel_hot.men.name=Горячий топливный стержень ВВЭР (Среднеобогащённый нептуний)
item.pwr_fuel_hot.mep.name=Горячий топливный стержень ВВЭР (Среднеобогащённый плутоний)
item.pwr_fuel_hot.meu.name=Горячий топливный стержень ВВЭР (Среднеобогащённый уран)
item.pwr_fuel_hot.mox.name=Горячий топливный стержень ВВЭР (МОКС)
item.pwr_printer.name=Слайсер ВВЭР
item.quartz_plutonium.name=Плутонический кварц
item.radar_linker.name=Радарный соединитель
@ -4282,71 +4003,73 @@ item.rag.desc=Бросьте в воду, чтобы намочить.$Нажм
item.rag_damp.name=Влажная тряпка
item.rag_piss.name=Пропитанная мочой тряпка
item.rangefinder.name=Дальномер
item.rbmk_fuel_balefire.name=Жар-топливный стержень РБМК
item.rbmk_fuel_balefire_gold.name=Флэшголд-топливный стержень РБМК
item.rbmk_fuel_drx.name=§cДигамма-топливный стержень РБМК§r
item.rbmk_fuel_empty.name=Пустой топливный стержень РБМК
item.rbmk_fuel_flashlead.name=Флэшлид-топливный стержень РБМК
item.rbmk_fuel_hea241.name=Высокообогащённый америциевый-241 топливный стержень РБМК
item.rbmk_fuel_hea242.name=Высокообогащённый америциевый-242 топливный стержень РБМК
item.rbmk_fuel_heaus.name=Высокообогащённый австралиевый топливный стержень РБМК
item.rbmk_fuel_hen.name=Высокообогащённый нептуниевый топливный стержень РБМК
item.rbmk_fuel_hes.name=Высокообогащённый шрабидиевый топливный стержень РБМК
item.rbmk_fuel_hep.name=Высокообогащённый плутониевый-239 топливный стержень РБМК
item.rbmk_fuel_hep241.name=Высокообогащённый плутониевый-241 топливный стержень РБМК
item.rbmk_fuel_heu233.name=Высокообогащённый урановый-233 топливный стержень РБМК
item.rbmk_fuel_heu235.name=Высокообогащённый урановый-235 топливный стержень РБМК
item.rbmk_fuel_lea.name=Низкообогащённый америциевый топливный стержень РБМК
item.rbmk_fuel_leaus.name=Низкообогащённый австралиевый топливный стержень РБМК
item.rbmk_fuel_lep.name=Низкообогащённый плутониевый-239 топливный стержень РБМК
item.rbmk_fuel_les.name=Низкообогащённый шрабидиевый топливный стержень РБМК
item.rbmk_fuel_mea.name=Среднеобогащённый америциевый топливный стержень РБМК
item.rbmk_fuel_men.name=Среднеобогащённый нептуниевый топливный стержень РБМК
item.rbmk_fuel_mep.name=Среднеобогащённый плутониевый-239 топливный стержень РБМК
item.rbmk_fuel_mes.name=Среднеобогащённый шрабидиевый топливный стержень РБМК
item.rbmk_fuel_meu.name=Среднеобогащённый урановый топливный стержень РБМК
item.rbmk_fuel_mox.name=МОКС-топливный стержень РБМК
item.rbmk_fuel_po210be.name=Полоний-210-Бериллевый источник нейтронов РБМК
item.rbmk_fuel_pu238be.name=Плутоний-238-Бериллевый источник нейтронов РБМК
item.rbmk_fuel_ra226be.name=Радий-226-Бериллевый источник нейтронов РБМК
item.rbmk_fuel_thmeu.name=Ториево-урановый среднеобогащённый топливный стержень РБМК
item.rbmk_fuel_ueu.name=Необогащённый урановый топливный стержень РБМК
item.rbmk_fuel_zfb_am_mix.name=Америций реакторного качества ЦТС стержень РБМК
item.rbmk_fuel_zfb_bismuth.name=Висмутовый ЦТС стержень РБМК
item.rbmk_fuel_zfb_pu241.name=Плутоний-241 ЦТС стержень РБМК
item.rbmk_fuel_balefire.name=Топливный стержень РБМК (Жар-пламя)
item.rbmk_fuel_balefire_gold.name=Топливный стержень РБМК (Флэшголд)
item.rbmk_fuel_drx.name=§cТопливный стержень РБМК (Дигамма)§r
item.rbmk_fuel_empty.name=Топливный стержень РБМК (Пустой)
item.rbmk_fuel_flashlead.name=Топливный стержень РБМК (Флэшлид)
item.rbmk_fuel_hea241.name=Топливный стержень РБМК (Высокообогащённый америций-241)
item.rbmk_fuel_hea242.name=Топливный стержень РБМК (Высокообогащённый америций-242)
item.rbmk_fuel_heaus.name=Топливный стержень РБМК (Высокообогащённый австралий)
item.rbmk_fuel_hen.name=Топливный стержень РБМК (Высокообогащённый нептуний)
item.rbmk_fuel_hes.name=Топливный стержень РБМК (Высокообогащённый шрабидий)
item.rbmk_fuel_hep.name=Топливный стержень РБМК (Высокообогащённый плутоний-239)
item.rbmk_fuel_hep241.name=Топливный стержень РБМК (Высокообогащённый плутоний-241)
item.rbmk_fuel_heu233.name=Топливный стержень РБМК (Высокообогащённый уран-233)
item.rbmk_fuel_heu235.name=Топливный стержень РБМК (Высокообогащённый уран-235)
item.rbmk_fuel_lea.name=Топливный стержень РБМК (Низкообогащённый америций)
item.rbmk_fuel_leaus.name=Топливный стержень РБМК (Низкообогащённый австралий)
item.rbmk_fuel_lep.name=Топливный стержень РБМК (Низкообогащённый плутоний-239)
item.rbmk_fuel_les.name=Топливный стержень РБМК (Низкообогащённый шрабидий)
item.rbmk_fuel_mea.name=Топливный стержень РБМК (Среднеобогащённый америций)
item.rbmk_fuel_men.name=Топливный стержень РБМК (Среднеобогащённый нептуний)
item.rbmk_fuel_mep.name=Топливный стержень РБМК (Среднеобогащённый плутоний-239)
item.rbmk_fuel_mes.name=Топливный стержень РБМК (Среднеобогащённый шрабидий)
item.rbmk_fuel_meu.name=Топливный стержень РБМК (Среднеобогащённый уран)
item.rbmk_fuel_mox.name=Топливный стержень РБМК (МОКС)
item.rbmk_fuel_po210be.name=Стержень с источником нейтронов РБМК (Полоний-210-бериллий)
item.rbmk_fuel_pu238be.name=Стержень с источником нейтронов РБМК (Плутоний-238-бериллий)
item.rbmk_fuel_ra226be.name=Стержень с источником нейтронов РБМК (Радий-226-бериллий)
item.rbmk_fuel_thmeu.name=Топливный стержень РБМК (Среднеобогащённый торий-уран)
item.rbmk_fuel_ueu.name=Топливный стержень РБМК (Необогащённый уран)
item.rbmk_fuel_uzh.name=Топливный стержень РБМК (Уран-циркония гидрид)
item.rbmk_fuel_zfb_am_mix.name=Топливный стержень РБМК (Реакторный америций ЦБР)
item.rbmk_fuel_zfb_bismuth.name=Топливный стержень РБМК (Висмут ЦБР)
item.rbmk_fuel_zfb_pu241.name=Топливный стержень РБМК (Плутоний-241 ЦБР)
item.rbmk_lid.name=Покрывающая панель РБМК
item.rbmk_lid_glass.name=Стеклянная покрывающая панель РБМК
item.rbmk_pellet_balefire.name=Жар-топливная пеллета
item.rbmk_pellet_balefire_gold.name=Флэшголд-топливная пеллета
item.rbmk_pellet_drx.name=§cДигамма-топливная пеллета§r
item.rbmk_pellet_flashlead.name=Флэшлид-топливная пеллета
item.rbmk_pellet_hea241.name=Высокообогащённая америциевая-241 топливная пеллета
item.rbmk_pellet_hea242.name=Высокообогащённая америциевая-242 топливная пеллета
item.rbmk_pellet_heaus.name=Высокообогащённая австралиевая топливная пеллета
item.rbmk_pellet_hen.name=Высокообогащённая нептуниевая топливная пеллета
item.rbmk_pellet_hep239.name=Высокообогащённая плутониевая-239 топливная пеллета
item.rbmk_pellet_hep241.name=Высокообогащённая плутониевая-241 топливная пеллета
item.rbmk_pellet_heu233.name=Высокообогащённая урановая-233 топливная пеллета
item.rbmk_pellet_heu235.name=Высокообогащённая урановая-235 топливная пеллета
item.rbmk_pellet_hes.name=Высокообогащённая шрабидиевая топливная пеллета
item.rbmk_pellet_lea.name=Низкообогащённая америциевая топливная пеллета
item.rbmk_pellet_leaus.name=Низкообогащённая австралиевая топливная пеллета
item.rbmk_pellet_lep.name=Низкообогащённая плутониевая топливная пеллета
item.rbmk_pellet_les.name=Низкообогащённая шрабидиевая топливная пеллета
item.rbmk_pellet_mea.name=Среднеобогащённая америциевая топливная пеллета
item.rbmk_pellet_men.name=Среднеобогащённая нептуниевая топливная пеллета
item.rbmk_pellet_mep.name=Среднеобогащённая плутониевая топливная пеллета
item.rbmk_pellet_mes.name=Среднеобогащённая шрабидиевая топливная пеллета
item.rbmk_pellet_meu.name=Среднеобогащённая урановая топливная пеллета
item.rbmk_pellet_mox.name=МОКС топливная пеллета
item.rbmk_pellet_po210be.name=Полоний-210-Бериллиевая пеллета
item.rbmk_pellet_pu238be.name=Плутоний-238-Бериллиевая пеллета
item.rbmk_pellet_ra226be.name=Радий-226-Бериллевая пеллета
item.rbmk_pellet_thmeu.name=Торий-урановая топливная пеллета
item.rbmk_pellet_ueu.name=Необогащённая урановая топливная пеллета
item.rbmk_pellet_zfb_am_mix.name=ЦТС пеллета америция реакторного качества
item.rbmk_pellet_zfb_bismuth.name=Висмутовая ЦТС пеллета
item.rbmk_pellet_zfb_pu241.name=Плутоний-241 ЦТС пеллета
item.rbmk_pellet_balefire.name=Топливная пеллета (Жар-пламя)
item.rbmk_pellet_balefire_gold.name=Топливная пеллета (Флэшголд)
item.rbmk_pellet_drx.name=§cТопливная пеллета (Дигамма)§r
item.rbmk_pellet_flashlead.name=Топливная пеллета (Флэшлид)
item.rbmk_pellet_hea241.name=Топливная пеллета (Высокообогащённый америций-241)
item.rbmk_pellet_hea242.name=Топливная пеллета (Высокообогащённый америций-242)
item.rbmk_pellet_heaus.name=Топливная пеллета (Высокообогащённый австралий)
item.rbmk_pellet_hen.name=Топливная пеллета (Высокообогащённый нептуний)
item.rbmk_pellet_hep239.name=Топливная пеллета (Высокообогащённый плутоний-239)
item.rbmk_pellet_hep241.name=Топливная пеллета (Высокообогащённый плутоний-241)
item.rbmk_pellet_heu233.name=Топливная пеллета (Высокообогащённый уран-233)
item.rbmk_pellet_heu235.name=Топливная пеллета (Высокообогащённый уран-235)
item.rbmk_pellet_hes.name=Топливная пеллета (Высокообогащённый шрабидий)
item.rbmk_pellet_lea.name=Топливная пеллета (Низкообогащённый америций)
item.rbmk_pellet_leaus.name=Топливная пеллета (Низкообогащённый австралий)
item.rbmk_pellet_lep.name=Топливная пеллета (Низкообогащённый плутоний)
item.rbmk_pellet_les.name=Топливная пеллета (Низкообогащённый шрабидий)
item.rbmk_pellet_mea.name=Топливная пеллета (Среднеобогащённый америций)
item.rbmk_pellet_men.name=Топливная пеллета (Среднеобогащённый нептуний)
item.rbmk_pellet_mep.name=Топливная пеллета (Среднеобогащённый плутоний)
item.rbmk_pellet_mes.name=Топливная пеллета (Среднеобогащённый шрабидий)
item.rbmk_pellet_meu.name=Топливная пеллета (Среднеобогащённый уран)
item.rbmk_pellet_mox.name=Топливная пеллета (МОКС)
item.rbmk_pellet_po210be.name=Пеллета источника нейтронов (Полоний-210-Бериллий)
item.rbmk_pellet_pu238be.name=Пеллета источника нейтронов (Плутоний-238-Бериллий)
item.rbmk_pellet_ra226be.name=Пеллета источника нейтронов (Радий-226-Бериллий)
item.rbmk_pellet_thmeu.name=Топливная пеллета (Торий-уран)
item.rbmk_pellet_ueu.name=Топливная пеллета (Необогащённый уран)
item.rbmk_pellet_uzh.name=Топливная пеллета (Уран-циркония гидрид)
item.rbmk_pellet_zfb_am_mix.name=Топливная пеллета (Реакторный америций ЦБР)
item.rbmk_pellet_zfb_bismuth.name=Топливная пеллета (Висмут ЦБР)
item.rbmk_pellet_zfb_pu241.name=Топливная пеллета (Плутоний-241 ЦБР)
item.rbmk_tool.name=Устройство для соединения консоли РБМК
item.rbmk_tool.desc=Shift+ПКМ по РБМК чтобы запомнить его позицию,$shift+ПКМ по консоли чтобы соединить!
item.rbmk_tool.linked=Позиция установлена!
@ -4526,28 +4249,28 @@ item.rod_verticium.name=Verticium Rod
item.rod_waste.name=Стержень с ядерными отходами
item.rod_water.name=Стержень с водой
item.rod_weidanium.name=Weidanium Rod
item.rod_zirnox_empty.name=Пустой стержень Цирнокс
item.rod_zirnox_natural_uranium_fuel.name=Необогащённый урановый топливный стержень Цирнокс
item.rod_zirnox_uranium_fuel.name=Урановый топливный стержень Цирнокс
item.rod_zirnox_th232.name=Торий-232 стержень Цирнокс
item.rod_zirnox_thorium_fuel.name=Ториевый топливный стержень Цирнокс
item.rod_zirnox_mox_fuel.name=МОКС-топливный стержень Цирнокс
item.rod_zirnox_plutonium_fuel.name=Плутониевый топливный стержень Цирнокс
item.rod_zirnox_u233_fuel.name=Уран-233 топливный стержень Цирнокс
item.rod_zirnox_u235_fuel.name=Уран-235 топливный стержень Цирнокс
item.rod_zirnox_les_fuel.name=Низкообогащённый шрабидиевый топливный стержень Цирнокс
item.rod_zirnox_lithium.name=Литиевый стержень Цирнокс
item.rod_zirnox_tritium.name=Тритиевый стержень Цирнокс
item.rod_zirnox_zfb_mox.name=ЦТС МОКСопливный стержень Цирнокс
item.rod_zirnox_natural_uranium_fuel_depleted.name=Обеднённый необогащённый урановый топливный стержень Цирнокс
item.rod_zirnox_uranium_fuel_depleted.name=Обеднённый урановый топливный стержень Цирнокс
item.rod_zirnox_thorium_fuel_depleted.name=Обеднённый ториевый топливный стержень Цирнокс
item.rod_zirnox_mox_fuel_depleted.name=Обеднённый МОКС-топливный стержень Цирнокс
item.rod_zirnox_plutonium_fuel_depleted.name=Обеднённый плутониевый топливный стержень Цирнокс
item.rod_zirnox_u233_fuel_depleted.name=Обеднённый уран-233 топливный стержень Цирнокс
item.rod_zirnox_u235_fuel_depleted.name=Обеднённый уран-235 топливный стержень Цирнокс
item.rod_zirnox_les_fuel_depleted.name=Обеднённый низкообогащённый шрабидиевый топливный стержень Цирнокс
item.rod_zirnox_zfb_mox_depleted.name=Обеднённый ЦТС МОКС-топливный стержень Цирнокс
item.rod_zirnox_empty.name=Стержень Цирнокс (Пустой)
item.rod_zirnox_natural_uranium_fuel.name=Топливный стержень Цирнокс (Природный уран)
item.rod_zirnox_uranium_fuel.name=Топливный стержень Цирнокс (Топливный уран)
item.rod_zirnox_th232.name=Топливный стержень Цирнокс (Торий-232)
item.rod_zirnox_thorium_fuel.name=Топливный стержень Цирнокс (Топливный торий)
item.rod_zirnox_mox_fuel.name=Топливный стержень Цирнокс (МОКС)
item.rod_zirnox_plutonium_fuel.name=Топливный стержень Цирнокс (Топливный плутоний)
item.rod_zirnox_u233_fuel.name=Топливный стержень Цирнокс (Уран-233)
item.rod_zirnox_u235_fuel.name=Топливный стержень Цирнокс (Уран-235)
item.rod_zirnox_les_fuel.name=Топливный стержень Цирнокс (Низкообогащённый шрабидий)
item.rod_zirnox_lithium.name=Стержень Цирнокс (Литий)
item.rod_zirnox_tritium.name=Стержень Цирнокс (Тритий)
item.rod_zirnox_zfb_mox.name=Топливный стержень Цирнокс (ЦБР МОКС)
item.rod_zirnox_natural_uranium_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (Природный уран)
item.rod_zirnox_uranium_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (Топливный уран)
item.rod_zirnox_thorium_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (Топливный торий)
item.rod_zirnox_mox_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (МОКС)
item.rod_zirnox_plutonium_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (Топливный плутоний)
item.rod_zirnox_u233_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (Уран-233)
item.rod_zirnox_u235_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (Уран-235)
item.rod_zirnox_les_fuel_depleted.name=Обеднённый топливный стержень Цирнокс (Низкообогащённый шрабидий)
item.rod_zirnox_zfb_mox_depleted.name=Обеднённый топливный стержень Цирнокс (ЦБР МОКС)
item.rotor_steel.name=Большой стальной ротор
item.rpa_boots.name=Ботинки силовой брони Оставшихся
item.rpa_helmet.name=Шлем силовой брони Оставшихся
@ -4888,48 +4611,48 @@ item.warhead_nuclear.name=Ядерная боеголовка
item.warhead_thermo_endo.name=Эндотермическая боеголовка
item.warhead_thermo_exo.name=Экзотермическая боеголовка
item.warhead_volcano.name=Тектоническая боеголовка
item.waste_mox.name=Обеднённое МОКС-топливо
item.waste_natural_uranium.name=Обеднённое природное урановое топливо
item.waste_plate_mox.name=Обеднённая МОКС-топливная пластина
item.waste_plate_pu238be.name=Обеднённая плутоний-238-бериллевая топливная пластина
item.waste_plate_pu239.name=Обеднённая высокообогащённая плутониевая-239 топливная пластина
item.waste_plate_ra226be.name=Обеднённая радий-226-бериллевая топливная пластина
item.waste_plate_sa326.name=Обеднённая высокообогащённая шрабидий-326 топливная пластина
item.waste_plate_u233.name=Обеднённая высокообогащённая уран-233 топливная пластина
item.waste_plate_u235.name=Обеднённая высокообогащённая уран-235 топливная пластина
item.waste_plutonium.name=Обеднённое плутониевое топливо
item.waste_schrabidium.name=Обеднённое шрабидиевое топливо
item.waste_thorium.name=Обеднённое ториевое топливо
item.waste_u235.name=Обеднённое уран-235 топливо
item.waste_u233.name=Обеднённое уран-233 топливо
item.waste_uranium.name=Обеднённое урановое топливо
item.waste_zfb_mox.name=Обеднённое ЦТС МОКС-топливо
item.waste_mox.name=Обеднённое топливо (МОКС)
item.waste_natural_uranium.name=Обеднённое топливо (Природный уран)
tem.waste_plate_mox.name=Обеднённая топливная пластина (МОКС)
item.waste_plate_pu238be.name=Обеднённая топливная пластина (Плутоний-238-бериллий)
item.waste_plate_pu239.name=Обеднённая топливная пластина (Высокообогащённый плутоний-239)
item.waste_plate_ra226be.name=Обеднённая топливная пластина (Радий-226-бериллий)
item.waste_plate_sa326.name=Обеднённая топливная пластина (Высокообогащённый шрабидий-326)
item.waste_plate_u233.name=Обеднённая топливная пластина (Высокообогащённый уран-233)
item.waste_plate_u235.name=Обеднённая топливная пластина (Высокообогащённый уран-235)
item.waste_plutonium.name=Обеднённое топливо (Топливный плутоний)
item.waste_schrabidium.name=Обеднённое топливо (Шрабидий)
item.waste_thorium.name=Обеднённое топливо (Топливный торий)
item.waste_u235.name=Обеднённое топливо (Уран-235)
item.waste_u233.name=Обеднённое топливо (Уран-233)
item.waste_uranium.name=Обеднённое топливо (Топливный уран)
item.waste_zfb_mox.name=Обеднённое топливо (ЦБР МОКС)
item.watch.name=Сломанные карманные часы
item.watch.desc=Маленькие синие карманные часы.$На стекле есть несколько трещин,$и несколько осколков отсутствуют.$Перестали тикать в 2:34.
item.watz_pellet.boron.name=Поглощающая Ватцз-пеллета из бора
item.watz_pellet.du.name=Поглощающая Ватцз-пеллета из обеднённого урана
item.watz_pellet.hes.name=Ватцз-пеллета из высокообогащённого шрабидия
item.watz_pellet.lead.name=Поглощающая Ватцз-пеллета из свинца
item.watz_pellet.les.name=Ватцз-пеллета из низкообогащённого шрабидия
item.watz_pellet.mes.name=Ватцз-пеллета из среднеобогащённого шрабидия
item.watz_pellet.mep.name=Ватцз-пеллета из среднеобогащённого плутония
item.watz_pellet.meu.name=Ватцз-пеллета из среднеобогащённого урана
item.watz_pellet.nqd.name=Ватцз-пеллета из обогащённого наквадаха
item.watz_pellet.nqr.name=Ватцз-пеллета из наквадрии
item.watz_pellet.hen.name=Ватцз-пеллета из высокообогащённого нептуния
item.watz_pellet.schrabidium.name=Ватцз-пеллета из чистого шрабидия
item.watz_pellet_depleted.boron.name=Поглощающая Ватцз-пеллета из бора (Обеднённая)
item.watz_pellet_depleted.du.name=Поглощающая Ватцз-пеллета из обеднённого урана (Обеднённая)
item.watz_pellet_depleted.hes.name=Ватцз-пеллета из высокообогащённого шрабидия (Обеднённая)
item.watz_pellet_depleted.lead.name=Поглощающая Ватцз-пеллета из свинца (Обеднённая)
item.watz_pellet_depleted.les.name=Ватцз-пеллета из низкообогащённого шрабидия (Обеднённая)
item.watz_pellet_depleted.mes.name=Ватцз-пеллета из среднеобогащённого шрабидия (Обеднённая)
item.watz_pellet_depleted.mep.name=Ватцз-пеллета из среднеобогащённого плутония (Обеднённая)
item.watz_pellet_depleted.meu.name=Ватцз-пеллета из среднеобогащённого урана (Обеднённая)
item.watz_pellet_depleted.nqd.name=Ватцз-пеллета из обогащённого наквадаха (Обеднённая)
item.watz_pellet_depleted.nqr.name=Ватцз-пеллета из наквадрии (Обеднённая)
item.watz_pellet_depleted.hen.name=Ватцз-пеллета из высокообогащённого нептуния (Обеднённая)
item.watz_pellet_depleted.schrabidium.name=Ватцз-пеллета из чистого шрабидия (Обёдненная)
item.watz_pellet.boron.name=Поглощающая Ватцз-гранула (Бор)
item.watz_pellet.du.name=Поглощающая Ватцз-гранула (Обеднённый уран)
item.watz_pellet.hes.name=Ватцз-гранула (Высокообогащённый шрабидий)
item.watz_pellet.lead.name=Поглощающая Ватцз-гранула (Свинец)
item.watz_pellet.les.name=Ватцз-гранула (Низкообогащённый шрабидий)
item.watz_pellet.mes.name=Ватцз-гранула (Среднеобогащённый шрабидий)
item.watz_pellet.mep.name=Ватцз-гранула (Среднеобогащённый плутоний)
item.watz_pellet.meu.name=Ватцз-гранула (Среднеобогащённый уран)
item.watz_pellet.nqd.name=Ватцз-гранула (Обогащённый наквадах)
item.watz_pellet.nqr.name=Ватцз-гранула (Наквадрия)
item.watz_pellet.hen.name=Ватцз-гранула (Высокообогащённый нептуний)
item.watz_pellet.schrabidium.name=Ватцз-гранула (Шрабидий)
item.watz_pellet_depleted.boron.name=Обеднённая поглощающая Ватцз-гранула (Бор)
item.watz_pellet_depleted.du.name=Обеднённая поглощающая Ватцз-гранула (Обеднённый уран)
item.watz_pellet_depleted.hes.name=Обеднённая Ватцз-гранула (Высокообогащённый шрабидий)
item.watz_pellet_depleted.lead.name=Обеднённая поглощающая Ватцз-гранула (Свинец)
item.watz_pellet_depleted.les.name=Обеднённая Ватцз-гранула (Низкообогащённый шрабидий)
item.watz_pellet_depleted.mes.name=Обеднённая Ватцз-гранула (Среднеобогащённый шрабидий)
item.watz_pellet_depleted.mep.name=Обеднённая Ватцз-гранула (Среднеобогащённый плутоний)
item.watz_pellet_depleted.meu.name=Обеднённая Ватцз-гранула (Среднеобогащённый уран)
item.watz_pellet_depleted.nqd.name=Обеднённая Ватцз-гранула (Обогащённый наквадах)
item.watz_pellet_depleted.nqr.name=Обеднённая Ватцз-гранула (Наквадрия)
item.watz_pellet_depleted.hen.name=Обеднённая Ватцз-гранула (Высокообогащённый нептуний)
item.watz_pellet_depleted.schrabidium.name=Обеднённая Ватцз-гранула (Шрабидий)
item.weapon_bat.name=Любимица Ричарда
item.weapon_bat_nail.name=Клише
item.weapon_golf_club.name=Клюшка русского бандита
@ -6241,21 +5964,24 @@ tile.rbmk_cooler.name=Охладитель РБМК
tile.rbmk_control.name=Регулирующие стержни РБМК
tile.rbmk_control_auto.name=Автоматические регулирующие стержни РБМК
tile.rbmk_control_mod.name=Замедляющие регулирующие стержни РБМК
tile.rbmk_control_reasim.name=Регулирующие стержни РБМК (РеаСим)
tile.rbmk_control_reasim_auto.name=Автоматические регулирующие стержни РБМК (РеаСим)
tile.rbmk_crane_console.name=Консоль крана РБМК
tile.rbmk_display.name=Дисплей панель РБМК
tile.rbmk_heater.name=Жидкостный нагреватель РБМК
tile.rbmk_loader.name=Паровой проводник РБМК
tile.rbmk_loader.desc=Позволяет РБМК иметь внизу соединения для воды и пара$Поместите одну водную трубу под колонной РБМК, затем проводник,$потом подключите паропровод к проводнику.
tile.rbmk_moderator.name=Графитовый замедлитель РБМК
tile.rbmk_outgasser.name=Стержень облучения РБМК
tile.rbmk_outgasser.name=Колонна облучения РБМК
tile.rbmk_reflector.name=Карбид-вольфрамовый отражатель нейтронов РБМК
tile.rbmk_rod.name=Топливный канал РБМК
tile.rbmk_rod_mod.name=Замедляющий топливный канал РБМК
tile.rbmk_rod_reasim.name=Топливный канал РБМК (РеаСим)
tile.rbmk_rod_reasim_mod.name=Замедляющий топливный канал РБМК (РеаСим)
tile.rbmk_steam_inlet.name=Порт ввода воды РБМК РеаСим
tile.rbmk_steam_inlet.desc=Подает воду в колонны RBMK, если включены ReaSim бойлеры$Подключается к колоннам RBMK сбоку
tile.rbmk_steam_inlet.desc=Подает воду в колонны РБМК, если включены ReaSim бойлеры$Подключается к колоннам РБМК сбоку
tile.rbmk_steam_outlet.name=Порт вывода пара РБМК РеаСим
tile.rbmk_steam_outlet.desc=Извлекает перегретый пар из колонн РБМК, если включены ReaSim бойлеры$Подключается к колоннам RBMK сбоку
tile.rbmk_steam_outlet.desc=Извлекает перегретый пар из колонн РБМК, если включены ReaSim бойлеры$Подключается к колоннам РБМК сбоку
tile.rbmk_storage.name=Колонна-хранилище РБМК
tile.rbmk.dodd.heat=Температура колонны
tile.rbmk.dodd.reasimWater=Вода РеаСим
@ -6304,6 +6030,14 @@ tile.rbmk.dodd.steam_amt=Количество пара
tile.rbmk.dodd.cryo_amt=Количество крио
tile.rbmk.dodd.gas_amt=Количество газа
tile.rbmk.dodd.fuel_amt=Количество топлива
tile.rbmk.dodd.t0=Количество холодного перфторометан
tile.rbmk.dodd.t0_max=Максимально холодного перфторометан
tile.rbmk.dodd.t0_type=Тип холодный перфторометан(ID)
tile.rbmk.dodd.t0_p=Давление холодного перфторометан
tile.rbmk.dodd.t1=Количество перфторометан
tile.rbmk.dodd.t1_max=Максимально перфторометан
tile.rbmk.dodd.t1_type=Тип перфторометан(ID)
tile.rbmk.dodd.t1_p=Давление перфторометан
tile.reactor_computer.name=Контроллер реактора
tile.reactor_conductor.name=Бойлер реактора
tile.reactor_control.name=Регулирующие стержни
@ -6418,7 +6152,7 @@ tile.stones_slab.lightstone.1.name=Плита из светлокаменной
tile.stones_slab.lightstone.2.name=Плита из светлокаменного кирпича
tile.struct_icf_core.name=Ядро инерциального термоядерного реактора (ICF)
tile.struct_iter_core.name=Ядро термоядерного реактора
tile.struct_torus_core.name=Ядро основной камеры
tile.struct_torus_core.name=Ядро основной камеры (термоядерный реактор)
tile.struct_launcher.name=Блок-компонент пусковой площадки
tile.struct_launcher_core.name=Ядро компактной пусковой площадки
tile.struct_launcher_core_large.name=Ядро большой пусковой площадки
@ -6646,10 +6380,4 @@ desc.gui.upgrade.overdrive= * §7Перегруз§r: Стакается до 3-
desc.gui.upgrade.power= * §1Энергосбережение§r: Стакается до 3-х уровней
desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней
// Last updated 15.02.2026 by RayzerHan //
// Last updated 08.03.2026 by RayzerHan //

File diff suppressed because it is too large Load Diff

View File

@ -3815,7 +3815,7 @@ item.rbmk_pellet_mox.name=MOX燃料芯块
item.rbmk_pellet_po210be.name=钋210-铍 中子源芯块
item.rbmk_pellet_pu238be.name=钚238-铍 中子源芯块
item.rbmk_pellet_ra226be.name=镭226-铍 中子源芯块
item.rbmk_pellet_thmeu.name=ThMEU 中浓缩度铀-233导向钍燃料芯块
item.rbmk_pellet_thmeu.name=ThMEU 浓缩度铀-235导向钍燃料芯块
item.rbmk_pellet_ueu.name=未浓缩铀燃料芯块
item.rbmk_pellet_zfb_am_mix.name=ZFB 燃料级镅燃料芯块
item.rbmk_pellet_zfb_bismuth.name=ZFB 铋燃料芯块
@ -4271,20 +4271,20 @@ item.twinkie.name=小蛋糕
item.ullapool_caber.name=阿勒浦长木杆
item.undefined.name=形态未定义物质
item.upgrade_5g.name=5G辐射发射器升级
item.upgrade_afterburn_1.name=一级粉色机器升级
item.upgrade_afterburn_2.name=二级粉色机器升级
item.upgrade_afterburn_3.name=三级粉色机器升级
item.upgrade_afterburn_1.name=一级加力燃烧升级
item.upgrade_afterburn_2.name=二级加力燃烧升级
item.upgrade_afterburn_3.name=三级加力燃烧升级
item.upgrade_centrifuge.name=采矿激光升级-自动离心
item.upgrade_crystallizer.name=采矿激光升级-自动结晶
item.upgrade_effect_1.name=一级绿色机器升级
item.upgrade_effect_2.name=二级绿色机器升级
item.upgrade_effect_3.name=三级绿色机器升级
item.upgrade_effect_1.name=一级效率升级
item.upgrade_effect_2.name=二级效率升级
item.upgrade_effect_3.name=三级效率升级
item.upgrade_ejector_1.name=一级弹射速度升级
item.upgrade_ejector_2.name=二级弹射速度升级
item.upgrade_ejector_3.name=三级弹射速度升级
item.upgrade_fortune_1.name=一级紫色机器升级
item.upgrade_fortune_2.name=二级紫色机器升级
item.upgrade_fortune_3.name=三级紫色机器升级
item.upgrade_fortune_1.name=一级时运升级
item.upgrade_fortune_2.name=二级时运升级
item.upgrade_fortune_3.name=三级时运升级
item.upgrade_gc_speed.name=气体离心机超频升级
item.upgrade_health.name=粉色力场发生器升级
item.upgrade_muffler.name=消音器
@ -4292,16 +4292,16 @@ item.upgrade_nullifier.name=采矿激光升级-自动销毁
item.upgrade_overdrive_1.name=一级超速传动机器升级
item.upgrade_overdrive_2.name=二级超速传动机器升级
item.upgrade_overdrive_3.name=三级超速传动机器升级
item.upgrade_power_1.name=一级蓝色机器升级
item.upgrade_power_2.name=二级蓝色机器升级
item.upgrade_power_3.name=三级蓝色机器升级
item.upgrade_power_1.name=一级节能升级
item.upgrade_power_2.name=二级节能升级
item.upgrade_power_3.name=三级节能升级
item.upgrade_radius.name=青色力场发生器升级
item.upgrade_screm.name=采矿激光升级-目 力 科 学 家
item.upgrade_shredder.name=采矿激光升级-自动粉碎
item.upgrade_smelter.name=采矿激光升级-自动熔炼
item.upgrade_speed_1.name=一级红色机器升级
item.upgrade_speed_2.name=二级红色机器升级
item.upgrade_speed_3.name=三级红色机器升级
item.upgrade_speed_1.name=一级速度升级
item.upgrade_speed_2.name=二级速度升级
item.upgrade_speed_3.name=三级速度升级
item.upgrade_stack_1.name=一级堆叠弹出升级
item.upgrade_stack_2.name=二级堆叠弹出升级
item.upgrade_stack_3.name=三级堆叠弹出升级
@ -6019,7 +6019,7 @@ tile.wood_structure.roof.name=木质地板
tile.wood_structure.scaffold.name=木质脚手架
item.gun_amat.name=反器材步枪
tile.fluid_pump.name=流量控制泵
item.ammo_secret.bmg50_black.name=.50BMG旁道者弹药
item.ammo_secret.bmg50_black.name=.50BMG穿透弹药
item.ammo_standard.bmg50_sm.name=.50BMG子弹(星辉)
item.gun_amat_penance.name=忏悔
item.gun_amat_subtlety.name=明敏
@ -6430,3 +6430,17 @@ item.ncrpa_plate.name=NCR游侠动力装甲 胸甲
tile.machine_industrial_turbine.name=工业汽轮机
tile.machine_industrial_turbine.desc=效率: 100%%
tile.red_connector_super.name=大型电力连接器
item.billet_uzh.name=铀氢锆燃料坯料
item.rbmk_fuel_uzh.name=RBMK反应堆铀氢锆燃料棒
item.rbmk_pellet_uzh.name=铀氢锆燃料芯块
tile.rbmk_control_reasim.name=RBMK反应堆控制棒 (ReaSim)
tile.rbmk_control_reasim_auto.name=RBMK反应堆自动控制棒 (ReaSim)
tile.rbmk_display.name=RBMK显示面板
tile.rbmk.dodd.t0=冷四氟甲烷储量
tile.rbmk.dodd.t0_max=冷四氟甲烷容量
tile.rbmk.dodd.t0_type=冷四氟甲烷种类
tile.rbmk.dodd.t0_p=冷四氟甲烷压力
tile.rbmk.dodd.t1=四氟甲烷储量
tile.rbmk.dodd.t1_max=四氟甲烷容量
tile.rbmk.dodd.t1_type=四氟甲烷种类
tile.rbmk.dodd.t1_p=四氟甲烷压力

View File

@ -11,7 +11,8 @@
"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 [[exposure chamber|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]].",
"ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[камеры облучения|Exposure Chamber]].",
"zh_CN": "在[[高炉|Blast Furnace]]中使用[[钢|Steel]]和[[紫铜|Minecraft Grade Copper]]制成。其制成的工具比钻石更加优质。同时也能用于制作[[聚变反应堆|Fusion Reactor]]和[[辐照舱|Exposure Chamber]]的高能磁铁。"
}
}

View File

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

View File

@ -7,7 +7,8 @@
"zh_CN": "RBMK硼中子吸收器"
},
"content": {
"en_US": "The absorber simply blocks neutrons from passing. Neutrons that leave the [[RBMK]] will cause radiation to leak out, while this can be prevented by simply blocking off the entire side with solid blocks, the absorber has the small advantage of being able to transfer heat. While it's rarely useful to use an absorber instead of a [[reflector|RBMK Tungsten Carbide Neutron Reflector]], some high-heat reactor designs with linear or exponential fuels may benefit from using absorbers to separate incompatible fuel rods.",
"en_US": "The absorber simply blocks neutrons from passing. Neutrons that leave the [[RBMK]] will cause radiation to leak out, and while this can be prevented by simply blocking off the entire side with solid blocks, the absorber has the small advantages of being able to transfer heat through it as well as generate heat from the neutron flux it absorbs. While it's rarely useful to use an absorber instead of a [[reflector|RBMK Tungsten Carbide Neutron Reflector]], some high-heat reactor designs with linear or exponential fuels may benefit from using absorbers to separate incompatible fuel rods.",
"zh_CN": "中子吸收器会直接阻止中子通过。离开[[RBMK]]的中子会造成 辐射,虽然用固体方块把整个反应堆的边缘包住就可以挡住辐射,但中子吸收 器有一个小优点——可以传递热量。虽然很多情况下[[中子反射器|RBMK Tungsten Carbide Neutron Reflector]]比中子吸 收器更有用,但在某些含有线性或指数型燃料棒的高热量反应堆设计中,用中 子吸收器分隔不能相邻的燃料棒也不失为一种选择。"
}
}

View File

@ -7,7 +7,6 @@
"zh_CN": "RBMK燃料自动装填机"
},
"content": {
"en_US": "The autoloader is an advanced component of an [[RBMK]] that can be placed on top of [[fuel channels|RBMK Fuel Channel]]. The autoloader has two inventory grids, one for fresh fuel, and one for spent fuel, as well as a selector for the fuel depletion percentage which can be changed in 5% increments. If the [[fuel rod's|RBMK Fuel Rod]] depletion of the connected fuel channel exceeds the configured percentage, the autoloader will drop down, remove the spent fuel and insert a new fuel rod. The autoloader can be automated using hoppers or conveyors, the item access ports are on the very top.",
"zh_CN": "RBMK燃料自动装填机是一种高级的[[RBMK]]部件, 需要放置在[[燃料通道|RBMK Fuel Channel]]的顶部。燃料自动装填机的物品栏内有两组格子, 一组用于储存新燃料另一组用于储存使用过的燃料其GUI中还有一个用 于设定燃料消耗程度的框分度值为5%。若下方[[燃料棒|RBMK Fuel Rod]]的消耗 程度超过了设定的比例,燃料自动装填机就会下降并拔出使用过的燃料棒,同 时插入新燃料棒。燃料自动装填机可通过漏斗或传送带自动化,其物品接口位 于最顶部。"
"en_US": "The autoloader is an advanced component of an [[RBMK]] that can be placed on top of [[fuel channels|RBMK Fuel Channel]]. The autoloader has two inventory grids, one for fresh fuel, and one for spent fuel, as well as a selector for the fuel enrichment percentage (i.e. 100% - depletion percentage) which can be changed in 5% increments. If the [[fuel rod's|RBMK Fuel Rod]] enrichment of the connected fuel channel is lower than the configured percentage, the autoloader will drop down, remove the spent fuel and insert a new fuel rod. The autoloader can be automated using hoppers or conveyors, the item access ports are on the very top."
}
}
}

View File

@ -7,7 +7,8 @@
"zh_CN": "RBMK蒸汽管道"
},
"content": {
"en_US": "The RBMK steam channel is the primary way for the [[RBMK]] to be cooled, and to extract energy from it. The steam channel will use as much water as it can at once to cool itself down to the target temperature, i.e. the temperature of the steam type that is configured in the compressor. Since [[fuel channels|RBMK Fuel Channel]] are the only parts in the RBMK that actively heat up, it's recommended to put the steam channels as close as possible to them. Like most RBMK components, the steam channels do not block neutrons, so they can be connected cardinally to fuel channels.<br><br>The compressor settings allow higher density steam to be output, however, higher density steam is hotter, which means that the steam channel's ability to cool is limited. Despite this, higher density steam means that more water can flow through the channel, increasing the amount of cooling that can be done. In practice, most reactors will work fine with regular uncompressed steam. The compressor can be configured remotely via the [[console|RBMK Console]].<br><br>The steam channel only accepts water from the bottom and outputs steam at the top. Using an [[RBMK steam connector|RBMK Steam Connector]], both fluids can be handled from the bottom.",
"en_US": "The RBMK steam channel is the primary way for the [[RBMK]] to be cooled, and to extract energy from it. The steam channel will use as much water as it can at once to cool itself down to the target temperature, i.e. the temperature of the steam type that is configured in the compressor. Since [[fuel channels|RBMK Fuel Channel]] are the only parts in the RBMK that actively heat up, it's recommended to put the steam channels as close as possible to them. Like most RBMK components, the steam channels do not block neutrons, so they can be connected cardinally to fuel channels.<br><br>The compressor settings allow higher density steam to be output, but higher density steam is hotter, which means that the reactor as a whole must run at a higher temperature, leaving less margin for safety. However, higher density steam generates more power, assuming the reactor can handle the higher temperature without having to be throttled. In practice, most reactors will work fine with regular uncompressed steam. The compression level can be configured remotely via the [[console|RBMK Console]].<br><br>The steam channel only accepts water from the bottom and outputs steam at the top. An [[RBMK steam connector|RBMK Steam Connector]] can be placed underneath the water pipe on a steam channel to allow steam extraction from the bottom as well.",
"zh_CN": "RBMK蒸汽管道是冷却[[RBMK]]和通过RBMK发电的主要方式。 蒸汽管道会使用尽可能多的水将自身冷却至目标温度(即设定的蒸汽压缩等级 对应的蒸汽的温度)。[[燃料通道|RBMK Fuel Channel]]是RBMK中唯一能够主动产热的部件 因此建议将蒸汽管道放置在距离燃料通道尽量近的地方。与大多数RBMK部件 类似,蒸汽管道不会阻挡中子,因此其可以与燃料通道直接接触。<br><br>通过调整蒸汽压缩等级可以使蒸汽管道输出高等级蒸汽,但高等级蒸汽温度更 高,进而会使得蒸汽管道的冷却能力受到限制;然而,蒸汽压缩等级更高也意 味着蒸汽管道中的水流量更大,这又提高了冷却总量。在实际操作中,大多数 反应堆都能在使用普通蒸汽时正常工作。蒸汽压缩等级可通过[[控制台|RBMK Console]]远程调整。<br><br>蒸汽管道只从底部接收水并从顶部输出蒸汽,使用[[RBMK蒸汽导出器|RBMK Steam Connector]]可 使两种流体都能从底部输入输出。"
}
}

View File

@ -7,7 +7,8 @@
"zh_CN": "RBMK石墨式反应堆控制台"
},
"content": {
"en_US": "The RBMK console allows monitoring and control over an [[RBMK]] over a 15x15 block area. While technically optional, it is usually an important part in most successful RBMKs. To use the console, shift-click the central position of the RBMK with an RBMK linker, then shift-click the console.<br><br>The console has a display that shows fuel status and component heat as part of its model, this alone allows the reactor's status to be determined easily from afar, even without using the GUI. In addition, the console has six displays which can be configured to show various infos. To configure, open the GUI, select the columns that should be monitored, click the \"Assign selected columns\" button, and then click on the monitor type button until it shows the desired info.<br><br>On the bottom, the console's GUI also shows a graph of the total neutron flux that is being detected by the [[fuel channels|RBMK Fuel Channel]], making it easy to detect changes such as a drop in reaction due to fuel depletion or hazardous reaction spikes.<br><br>In the center, there are colored buttons which can quickly select all [[control rods|RBMK Control Rods]] in that color group with left click, or assign all selected control rods a color group with right click. In addition, there is a small text field that can set the control rod extraction level of all selected control rods. Finally, the small white/red gradient button allows to cycle between the compression settions on selected [[steam channels|RBMK Steam Channel]].",
"en_US": "The RBMK console allows monitoring and control over an [[RBMK]] over a 15x15 block area. While technically optional, it is usually an important part in most successful RBMKs. To use the console, shift-click the central position of the RBMK with an RBMK linker, then shift-click the console.<br><br>The console has a display that shows fuel status and component heat as part of its model, this alone allows the reactor's status to be determined easily from afar, even without using the GUI. In addition, the console has six displays which can be configured to show various infos. To configure, open the GUI, select the columns that should be monitored, click the \"Assign selected columns\" button, and then click on the monitor type button until it shows the desired info.<br><br>On the bottom, the console's GUI also shows a graph of the total neutron flux that is being detected by the [[fuel channels|RBMK Fuel Channel]], making it easy to detect changes such as a drop in the reaction due to fuel depletion or a hazardous reaction spike.<br><br>In the center, there are colored buttons which can quickly select all [[control rods|RBMK Control Rods]] in that color group with left click, or assign all selected control rods a color group with right click. In addition, there is a small text field that can set the extraction level of all selected control rods. Finally, there is a small white/red gradient button which cycles through the compression settings on selected [[steam channels|RBMK Steam Channel]].",
"zh_CN": "RBMK石墨式反应堆控制台可以监测并控制15x15方块范围内的[[RBMK]] 反应堆部件。RBMK控制台在技术上不是必需的但通常是绝大多数成功的 RBMK的重要组成部分。要使用RBMK控制台需要先用RBMK连接装置 潜行右击反应堆的中心位置,再潜行右击控制台。<br><br>控制台的模型上具有一个显示燃料状态和反应堆部件温度的屏幕,这个屏幕使 反应堆的状态可以很容易地从远处监测甚至完全不用打开GUI就能做到。 此外,控制台还含有六个可以显示多种信息的屏幕,其显示内容可以配置;若 要配置其显示内容则需要打开GUI并选择需要监测的柱体之后点击“绑 定所选柱体”按钮,再点击检测项目按钮,直到出现想要的内容。<br><br>控制台GUI底部还有一个显示[[燃料通道|RBMK Fuel Channel]]检测到的总中子通量的图表,通 过这个图表可以很容易监测到燃料消耗导致的反应剧烈程度下降,或是危险的 中子通量激增。<br><br>对GUI中部的彩色按钮点击左键可以选择所有相应颜色的[[控制棒|RBMK Control Rods]] 点击右键则可以将选定的控制棒分配至相应颜色的组别。彩色按钮下方的文本 框可用于设置所有选定的燃料棒的抽出程度。最后一个红白渐变色按钮可以切 换选定的[[蒸汽管道|RBMK Steam Channel]]的压缩等级。"
}
}

View File

@ -7,7 +7,9 @@
"zh_CN": "RBMK反应堆自动控制棒"
},
"content": {
"en_US": "Automatic control rods, unlike the standard [[RBMK control rods|RBMK Control Rods]], cannot be controlled manually, instead they can be configured to adjust their insertion level based on their own component heat. A minimum and maximum heat, along with a minimum and maximum level which correspond to those values can be set, as well as a curve which defines the behavior between those levels.<br><br>It is possible, but not recommended, to have a reactor that runs solely on automatic control rods. They do see occasional use for smoothing out reaction spikes and for controlling the neutron sources on subcritical reactors.",
"en_US": "Automatic control rods, unlike the standard [[RBMK control rods|RBMK Control Rods]], cannot be controlled manually, instead they must be configured to adjust their insertion level based on their own temperature. A minimum and maximum temperature, along with a minimum and maximum extraction level which corresponds to those values can be set, as well as a curve which defines the behavior between those levels.<br><br>It is possible, but not recommended, to have a reactor that runs solely on automatic control rods. They do see occasional use for smoothing out reaction spikes and for controlling the neutron sources on subcritical reactors.",
"zh_CN": "自动升降的控制棒,与[[RBMK反应堆控制棒|RBMK Control Rods]]不同,其不能手动控制, 而是需要进行设定,设定后即可根据自身温度调整控制棒插入程度。可以设定 的项目有最低温度和最高温度、对应的控制棒最低和最高插入程度,以及定义 其在两个极值之间行为的曲线。<br><br>尽管有可能搭建出一个只使用自动控制棒的反应堆,但不建议这么做。自动控 制棒偶尔会用于抹平中子通量尖峰和在亚临界反应堆中控制中子源。"
}
}

View File

@ -7,7 +7,8 @@
"zh_CN": "RBMK反应堆控制棒"
},
"content": {
"en_US": "The RBMK control rods can be used to throttle or even turn off an [[RBMK]]. Neutrons that pass throguh the control rod will be reduced proportional to the rod's insertion, a 100% inserted control rod will block off all incoming neutrons, a 50% inserted control rod will only block half. Control rods can also be controlled remotely via the [[RBMK console|RBMK Console]].<br><br>Moderated control rods function in much the same manner, except that they convert fast neutrons into slow neutrons, much like how a [[moderator|RBMK Graphite Moderator]] would.<br><br>[[Automatic control rods|RBMK Automatic Control Rods]] have a similar purpose, except that they will automatically adjust their level based on the reactor's temperature.<br><br>Due to minor complications in their design, control rods may cause reaction spikes when being inserted a far distance at once, practice caution when using the AZ-5.",
"en_US": "The RBMK control rods can be used to throttle or even turn off an [[RBMK]]. Neutrons that pass through the control rod will be reduced proportionally to the rod's insertion, meaning a 100% inserted control rod will block off all incoming neutrons, a 50% inserted control rod will only block half, and so on. Control rods can also be controlled remotely via the [[RBMK console|RBMK Console]].<br><br>Moderated control rods function in much the same manner, except that they convert fast neutrons into slow neutrons, much like how a [[moderator|RBMK Graphite Moderator]] would.<br><br>[[Automatic control rods|RBMK Automatic Control Rods]] have a similar purpose, except that they will automatically adjust their level based on the reactor's temperature.<br><br>Due to minor complications in their design, control rods may cause reaction spikes when being inserted a far distance at once, practice caution when using the AZ-5.",
"zh_CN": "控制棒可用于限制[[RBMK]]反应堆的功率,或者直接关停反应堆。 通过控制棒的中子会按照控制棒的插入比例减少100%插入的控制棒会阻 挡所有进入的中子而50%插入的控制棒只会阻挡一半中子。控制棒也可通过 [[RBMK控制台|RBMK Console]]远程控制。<br><br>慢化控制棒的工作方式与普通控制棒大体相同,但其会把快中子转换为慢中子, 类似[[慢化剂|RBMK Graphite Moderator]]。<br><br>[[自动控制棒|RBMK Automatic Control Rods]]的目的相同,但其会根据反应堆的温度自行调整插入比例。<br><br>由于尖端设计有一定缺陷,控制棒在从高处一次性插到底时可能会引起中子通 量尖峰在使用AZ-5按钮时尤其需要注意。"
}
}

View File

@ -7,6 +7,7 @@
"zh_CN": "RBMK冷却器"
},
"content": {
"en_US": "The cooler is an optional component that can be used to cool an [[RBMK]], however unlike the [[steam channel|RBMK Steam Channel]], the cooler does not allow the heat to be extracted and used. The RBMK cooler uses up cold perfluoromethyl and outputs regular PFM at a constant rate of 50mB/t, and rapidly cools down all RBMK components in a 5x5 area."
"en_US": "The cooler is an optional component that can be used to cool an [[RBMK]], however unlike the [[steam channel|RBMK Steam Channel]], the cooler does not allow the heat to be extracted and used. The RBMK cooler uses up cold perfluoromethyl and outputs regular PFM at a constant rate of 50mB/t, and rapidly cools down all RBMK components in a 5x5 area by 200°C/t."
}
}

View File

@ -7,7 +7,8 @@
"zh_CN": "RBMK起重机控制台"
},
"content": {
"en_US": "The RBMK crane console allows fuel rods to be extracted, transported and inserted safely from a distance. Linking to an [[RBMK]] works similarly as it does with a [[RBMK console|RBMK Console]] using the RBMK linker tool. Once linked, the console spawns the crane over the RBMK. the crane can be controlled when standing in front of the console, using arrow keys by default to move it, and the enter key to load or unload a fuel rod. The crane's loading capabilities are compatible with all variants of the [[fuel channel|RBMK Fuel Channel]] and the [[storage column|RBMK Storage Column]].",
"en_US": "The RBMK crane console allows fuel rods to be extracted, transported and inserted safely from a distance. Linking to an [[RBMK]] works similarly as it does with a [[RBMK console|RBMK Console]] using the RBMK linker tool. Once linked, the console spawns the crane over the RBMK. The crane can be controlled when standing in front of the console, using arrow keys by default to move it, and the enter key to load or unload a fuel rod. The crane's loading capabilities are compatible with all variants of the [[fuel channel|RBMK Fuel Channel]] and the [[storage column|RBMK Storage Column]].",
"zh_CN": "RBMK起重机控制台用于在远距离安全提取、移动和插入燃料棒。用RBMK 连接装置将其连接至[[RBMK]]的方法与连接[[RBMK控制台|RBMK Console]]的方法相同。 一旦连接成功,控制台就会在反应堆上方生成起重机。操作起重机需要站在起 重机控制台前,默认使用方向键移动吊臂,按回车键装载或卸载燃料棒。起重 机的装卸能力与所有种类的[[燃料通道|RBMK Fuel Channel]]和[[燃料棒存储棒|RBMK Storage Column]]兼容。"
}
}

View File

@ -7,7 +7,8 @@
"zh_CN": "RBMK流体加热器"
},
"content": {
"en_US": "The RBMK fluid heater provides an alternate way of cooling the [[RBMK]] compared to the [[RBMK steam channel|RBMK Steam Channel]]. Instead of boiling water into turbine-usable steam, it heats up a type of coolant which may be used in different ways. Hot coolant can be used in a [[heat exchanging heater|Heat Exchanging Heater]] to either power certain machines directly, or to boil water in a [[boiler|Boiler]], creating a secondary loop. Do note that the used coolant needs to be heat exchanger compatible, [[PWR]]-exclusive coolants like liquid sodium will not work in an RBMK.<br><br>Just like in a steam channel, the cold coolant normally enters the bottom and the hot coolant exits from the top. Both connections can be on the bottom when using an [[RBMK steam connector|RBMK Steam Connector]].",
"en_US": "The RBMK fluid heater provides an alternate way of cooling the [[RBMK]] compared to the [[RBMK steam channel|RBMK Steam Channel]]. Instead of boiling water into turbine-usable steam, it heats up a type of coolant which may be used in different ways. Hot coolant can be used in a [[heat exchanging heater|Heat Exchanging Heater]] to either power certain machines directly, or to boil water in a [[boiler|Boiler]], creating a secondary loop. Do note that the coolant used needs to be compatible with the fluid heater, [[PWR]]-exclusive coolants like liquid sodium will not work in an RBMK.<br><br>Just like in a steam channel, the cold coolant normally enters the bottom and the hot coolant exits from the top. Both connections can be on the bottom when using an [[RBMK steam connector|RBMK Steam Connector]].",
"zh_CN": "RBMK流体加热器提供了使用[[RBMK蒸汽管道|RBMK Steam Channel]]以外冷却[[RBMK]] 的另一种方法。其并不直接将水加热为可用于涡轮的蒸汽,而是加热冷却剂, 被加热的冷却剂可以有多种用途。热冷却剂可以在[[换热加热器|Heat Exchanging Heater]]中放出热量, 以直接驱动部分机器,或者在 [[锅炉|Boiler]]中加热水,进而形成二级循环。需要注意的是,使用的冷却液必须可用于流体加热 器,[[PWR]]独占的冷却剂不能在RBMK中使用。<br><br>与蒸汽管道相同,冷却剂通常从底部进入,热冷却剂从顶部输出。使用 [[RBMK蒸汽导出器|RBMK Steam Connector]]时两种流体都可从底部输入输出。"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,76 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
o Socket
v 0.000000 0.406250 -0.156250
v 0.062500 0.406250 0.156250
v 0.000000 0.406250 0.156250
v 0.062500 0.718750 0.156250
v 0.000000 0.718750 0.156250
v 0.000000 0.718750 -0.156250
v 0.062500 0.406250 -0.156250
v 0.062500 0.718750 -0.156250
vt 0.076923 0.857143
vt 0.461538 1.000000
vt 0.076923 1.000000
vt 0.461538 0.142857
vt 0.461538 0.857143
vt 0.538462 0.142857
vt 0.538462 0.857143
vt 0.076923 0.000000
vt 0.461538 0.000000
vt 0.076923 0.142857
vt 0.000000 0.857143
vt 0.000000 0.142857
vn 0.0000 1.0000 0.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 -0.0000 1.0000
s off
f 4/1/1 6/2/1 5/3/1
f 4/1/2 7/4/2 8/5/2
f 8/5/3 1/6/3 6/7/3
f 7/4/4 3/8/4 1/9/4
f 2/10/5 5/11/5 3/12/5
f 4/1/1 8/5/1 6/2/1
f 4/1/2 2/10/2 7/4/2
f 8/5/3 7/4/3 1/6/3
f 7/4/4 2/10/4 3/8/4
f 2/10/5 4/1/5 5/11/5
o Button
v 0.125000 0.687500 -0.125000
v 0.125000 0.437500 0.125000
v 0.125000 0.437500 -0.125000
v 0.062500 0.687500 0.125000
v 0.062500 0.687500 -0.125000
v 0.062500 0.437500 -0.125000
v 0.062500 0.437500 0.125000
v 0.125000 0.687500 0.125000
vt 0.615385 0.285714
vt 0.538462 0.857143
vt 0.538462 0.285714
vt 0.923077 0.285714
vt 0.615385 0.142857
vt 0.923077 0.142857
vt 0.615385 0.857143
vt 0.923077 1.000000
vt 0.615385 1.000000
vt 0.923077 0.857143
vt 1.000000 0.285714
vt 1.000000 0.857143
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 -1.0000
s off
f 10/13/6 12/14/6 15/15/6
f 11/16/7 15/17/7 14/18/7
f 16/19/8 13/20/8 12/21/8
f 16/19/9 11/16/9 9/22/9
f 9/22/10 14/23/10 13/24/10
f 10/13/6 16/19/6 12/14/6
f 11/16/7 10/13/7 15/17/7
f 16/19/8 9/22/8 13/20/8
f 16/19/9 10/13/9 11/16/9
f 9/22/10 11/16/10 14/23/10

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

After

Width:  |  Height:  |  Size: 968 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 B

After

Width:  |  Height:  |  Size: 949 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 B

After

Width:  |  Height:  |  Size: 674 B

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