diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index a8d060ca2..ad06c04d4 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -167,8 +167,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.billet_ra226be, 3)).setGroup(autoPileRod, INSTANCE)); this.register(new GenericRecipe("ass.pilepobe").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PO210BE.ordinal())) .inputItems(new ComparableStack(ModItems.billet_po210be, 3)).setGroup(autoPileRod, INSTANCE)); - this.register(new GenericRecipe("ass.pilezr").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.ZR.ordinal())) - .inputItems(new OreDictStack(ZR.billet(), 3)).setGroup(autoPileRod, INSTANCE)); + this.register(new GenericRecipe("ass.pilezr").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 3, EnumPileRod.ZR.ordinal())) + .inputItems(new OreDictStack(ZR.billet(), 1)).setGroup(autoPileRod, INSTANCE)); this.register(new GenericRecipe("ass.pilenu").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.NU.ordinal())) .inputItems(new OreDictStack(U.billet(), 3)).setGroup(autoPileRod, INSTANCE)); this.register(new GenericRecipe("ass.pilepu239").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PU239.ordinal())) diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 25f58dc2f..7cc44b3fc 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -25,6 +25,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; import java.util.List; @@ -92,8 +93,9 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.conveyor_double)); API.hideItem(new ItemStack(ModBlocks.conveyor_triple)); - API.hideItem(new ItemStack(ModBlocks.brick_forgotten)); - API.hideItem(new ItemStack(ModBlocks.brick_forgotten_lock)); + API.hideItem(new ItemStack(ModBlocks.brick_forgotten, 1, OreDictionary.WILDCARD_VALUE)); + API.hideItem(new ItemStack(ModBlocks.brick_forgotten_lock, 1, OreDictionary.WILDCARD_VALUE)); + API.hideItem(new ItemStack(ModItems.coal_eternal)); API.registerHighlightIdentifier(ModBlocks.plushie, new IHighlightHandler() { @Override public ItemStack identifyHighlight(World world, EntityPlayer player, MovingObjectPosition mop) { diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index 6e4aeec31..fbcea7522 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -217,6 +217,10 @@ public class QMAWLoader implements IResourceManagerReloadListener { QMAWLoader.triggers.put(new ComparableStack(trigger).makeSingular(), qmaw); } } + + if(json.has("noindex") && json.get("noindex").getAsBoolean()) { + qmaw.noIndex(); + } if(!qmaw.contents.isEmpty()) { QMAWLoader.qmaw.put(name, qmaw); diff --git a/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java b/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java index f961cd2fe..ed7b20a9e 100644 --- a/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java +++ b/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java @@ -5,10 +5,13 @@ import java.util.HashMap; import net.minecraft.item.ItemStack; public class QuickManualAndWiki { - + public String name; public ItemStack icon; + /** Removes this manual from the calculator search feature */ + public boolean noIndex = false; + public HashMap title = new HashMap(); public HashMap contents = new HashMap(); @@ -30,4 +33,9 @@ public class QuickManualAndWiki { this.contents.put(lang, contents); return this; } + + public QuickManualAndWiki noIndex() { + this.noIndex = true; + return this; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java index cc4c137fb..7b368780b 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -182,6 +182,7 @@ public class TileEntityPileCore extends TileEntityTickingBase { for(int i = 0; i < list.size(); i++) { PileChannel chan = list.get(i); if(chan.entry.compare(x, y, z) && chan.entry.getDir() == dir) { + if(chan.type == chan.type.FUEL) chan.ejectAll(); list.remove(i); for(int j = 0; j < size; j++) { int iX = x + dir.offsetX * j; @@ -250,6 +251,12 @@ public class TileEntityPileCore extends TileEntityTickingBase { this.networkPackNT(25); } } + + @Override + public void invalidate() { + super.invalidate(); + for(PileChannel chan : this.fuelChannels) chan.ejectAll(); + } @Override public void serialize(ByteBuf buf) { @@ -535,7 +542,15 @@ public class TileEntityPileCore extends TileEntityTickingBase { if(stack != null) dropItem(stack, length); } + public void ejectAll() { + for(int i = 0; i < this.rods.length; i++) { + this.dropItem(rods[i], length); + this.rods[i] = null; + } + } + public void dropItem(ItemStack stack, int depth) { + if(stack == null) return; int x = entry.getX() + entry.getDir().offsetX * depth; int y = entry.getY(); int z = entry.getZ() + entry.getDir().offsetZ * depth; diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6491f3b64..06542768a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3838,7 +3838,7 @@ item.pile_rod.rgp.desc=Reactor-grade plutonium rod, mainly plutonium-239 with pl item.pile_rod.waste.name=Chicago Pile Nuclear Waste Rod item.pile_rod.waste.desc=Highly reactive end product from leaving a Chicago Pile fuel rod in the reactor for too long. item.pile_rod.zr.name=Chicago Pile Zirconium Rod -item.pile_rod.zr.desc=Inert zirconium rod which is transparent to neutrons. Ideal for safely pushing other rods safely out of the reactor. +item.pile_rod.zr.desc=Inert zirconium rod which is transparent to neutrons. Ideal for pushing other rods safely out of the reactor. item.pile_rod_boron.name=Chicago Pile Control Rod item.pile_rod_boron.desc=§9[Neutron Absorber]$§eClick to toggle item.pile_rod_detector.name=Chicago Pile Control & Detector Rod diff --git a/src/main/resources/assets/hbm/manual/material/etcoal.json b/src/main/resources/assets/hbm/manual/material/etcoal.json index 3bcdda69c..b247f658c 100644 --- a/src/main/resources/assets/hbm/manual/material/etcoal.json +++ b/src/main/resources/assets/hbm/manual/material/etcoal.json @@ -2,10 +2,11 @@ "name": "Eternal Coal", "icon": ["hbm:item.nothing"], "trigger": [["hbm:item.coal_eternal"]], + "noindex": true, "title": { "en_US": "█ █ █ █ █ █" }, "content": { - "en_US": "████████████ ███ ███ ██ ████████ ████████ ██ ████ ████ ████████ ████ ██████████ █ ████ █████ ██████ ████████ ████ █████ ██ ██ ███ ██████" + "en_US": "████████████ ███ ███ ██ ████████ ████████ ██ ████ ████ ████████ ████ ███ ███████ █ ████ █████ ██████ ███████ █ ████ █████ ██ ██ ███ ██████" } } diff --git a/src/main/resources/assets/hbm/manual/pile/pile.json b/src/main/resources/assets/hbm/manual/pile/pile.json new file mode 100644 index 000000000..a5ddf27f9 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pile.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile", + "icon": ["hbm:tile.pile_brick", 1, 0], + "trigger": [["hbm:tile.pile_brick"]], + "title": { + "en_US": "Chicago Pile" + }, + "content": { + "en_US": "The Chcago Pile is a low-tech low-power reactor used for breeding nuclear material, mainly turning [[uranium|Uranium]] into [[plutonium-239|Plutonium-239]]. Due to its simplicity, operating it either requires manual intervention or some form of external operation with [[Redstone over Radio]].

The pile is constructed out of a box of Chicago Pile graphite bricks at least 5x5x5 blocks in size, and at most 15x15x15 blocks. The box does not need to be a perfect cube, so shapes like 5x7x9 are valid, so long as the box is filled. Using a hand drill, the pile is assembled, with the drilled block acting as the core.

To prepare the Chicago Pile for use, channels need to be drilled, again with a hand drill. The function of the channel depends on the orientation relative to the core. Using the hand drill again on the input side of an existing channel will close the channel again. Channels cannot intersect one another.

Fuel channels are channels that follow the core's orientation, i.e. either the input or output side is on the same face as the core's panel. Fuel channels can be loaded with Chicago Pile fuel rods using a [[fuel loader|Chicago Pile Fuel Loader]]. The amount of fuel that fits into any given channel depends on its length, with one block of channel being able to hold one fuel rod.

Ventilation channels are channels which are perpendicular to the core's orientation and therefore also to the fuel channels. Ventilation channels cool down fuel channels which touch (but not intersect) them if compressed air is supplied at a pressure of 1 PU via a [[vent|Chicago Pile Vent]]. Passive cooling in the Chicago Pile is quite low, so while technically optional, vents are basically mandatory for every Pile in practice.

Channels drilled from the top are for [[control rods|Chicago Pile Control Rod]]. Control rods are used to reduce the interactiion between fuel channels in larger Pile setups, although smaller setups are usually fine without control rods. Still, throttling the reactor can be useful when cycling fuel, since the window for extracting pure plutonium-239 is quite small.
<>br>If the Pile is disassembled, channels can be drilled again without having to remove all the attachments like fuel loaders and vents, simply shift-click the attachment with the hand drill and a channel will be drilled into the Pile behind it.

See also:
* [[Chicago Pile Operation]]" + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pilecontrol.json b/src/main/resources/assets/hbm/manual/pile/pilecontrol.json new file mode 100644 index 000000000..ee4b473da --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pilecontrol.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Control Rod", + "icon": ["hbm:tile.pile_device", 1, 2], + "trigger": [["hbm:tile.pile_device", 1, 2]], + "title": { + "en_US": "Chicago Pile Control Rod" + }, + "content": { + "en_US": "Control rods can be placed on top of the vertically drilled channels of the [[Chicago Pile]]. Control rods, when inserted, will reduce the reactivity between fuel channels. The control rods can be controlled with a redstone signal, causing it to fully withdraw when a signal is supplied, or via [[RoR controller|Redstone-over-Radio Controller]], which allows more precise settings.

See also:
* [[Chicago Pile Fuel Loader]]
* [[Chicago Pile Vent]]" + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pileloader.json b/src/main/resources/assets/hbm/manual/pile/pileloader.json new file mode 100644 index 000000000..854f9ebf4 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pileloader.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Fuel Loader", + "icon": ["hbm:tile.pile_device", 1, 0], + "trigger": [["hbm:tile.pile_device", 1, 0]], + "title": { + "en_US": "Chicago Pile Fuel Loader" + }, + "content": { + "en_US": "The fuel loader is required to load [[Chicago Pile]] fuel rods into the Pile's fuel channels. Right-clicking with a fuel rod will insert that rod into the loader, and right-clicking again will load it into the Pile manually. Fuel can also be supplied using hoppers or conveyors, and the loading action can be triggered by supplying a redstone signal to the loader's back side (where the light grey circle is).

Additionally, the loader can relay information about the connected channel to the [[RoR reader|Redstone-over-Radio Reader]], like the type (metadata) and depletion of the backmost loaded fuel rod or the channel's current temperature.

See also:
* [[Chicago Pile Vent]]
* [[Chicago Pile Control Rod]]" + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pileop.json b/src/main/resources/assets/hbm/manual/pile/pileop.json new file mode 100644 index 000000000..ed9937519 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pileop.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Operation", + "icon": ["hbm:tile.pile_brick", 1, 0], + "trigger": [], + "title": { + "en_US": "Chicago Pile Operation" + }, + "content": { + "en_US": "The [[Chicago Pile]] requires at least one fuel channel with some sort of neutron source, being radium-226-beryllium or polonium-210-beryllium rods. It's safest and easiest to simply have one fuel channel dedicated to the neutron sources, although mixing neutron sources in with the regular fuel is also an option. [[Ventilation|Chicago Pile Vent]] is also required before actually using fuel, the amount of compressed air used over time is static no matter how hot the reactor is, so doing a dry-run to see if the [[compressor|Compressor]] setup is sufficient is recommended.

Once ventilation and neutron sources are in place, fuel can be added, usually in the form of natural uranium which is bred into plutonium-239. The [[fuel loader|Chicago Pile Fuel Loader]] will only load one rod at a time, simply load as many rods as the channel can hold. Any extra rod loaded will cause the last rod in the channel to be pushed out the other end, where it can be collected with a hopper.

The supplied fuel will be bred as long as its in the reactor. Pu-239 can also be bred into RGP, which can be further bred into nuclear waste. Therefore, leaving fuel in the reactor for too long is undesirable. For this, the fuel loader can be read with an [[RoR reader|Redstone-over-Radio Reader]], which will report the fuel's lifetime and current type in the form of the numeric metadata of the item. For example, Plutonium-239 rods have a meta of 4. Using an [[RoR logic receiver|Redstone-over-Radio Logic Receiver]], this meta can be detected, causing a redstone signal to be sent to the fuel loader, pushing that fuel rod out.

It is not only desirable to eject the fuel in time due to the purity, but also because nuclear waste has a high heat output, which might destroy Piles not prepared for it. If no new fuel is available and the existing loaded fuel is intended to be ejected, rods made from zirconium are ideal, since they are cheap, inert, and transparent to neutrons, not adding any heat while not interfering with the Pile's reaction either.

In an emergency, should the Pile overheat, it will catch fire, explode, and eject many flaming graphite bricks which also explode into fire, setting the surroundings ablaze. It is recommended to keep the Pile in a small room, away from flammable material, and to keep a fire extinguisher nearby.

For people who want to make the most out of their fuel, using [[RoR controllers|Redstone-over-Radio Controller]] to adjust the control rod settings automatically may be desirable. Especially in larger setups, control rods are important to prevent the Pile from quickly overheating, and having an adaptive system controlled either by RoR logic receivers or an [[AUTOCAL]] unit can allow the Pile to run reasonably hot without exploding." + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pilevent.json b/src/main/resources/assets/hbm/manual/pile/pilevent.json new file mode 100644 index 000000000..8b6b619b1 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pilevent.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Vent", + "icon": ["hbm:tile.pile_device", 1, 1], + "trigger": [["hbm:tile.pile_device", 1, 1]], + "title": { + "en_US": "Chicago Pile Vent" + }, + "content": { + "en_US": "The vent is needed to insert compressed air at 1 PU into the [[Chicago Pile's|Chicago Pile]] ventilation channels. Due to the pressure requirement, each Pile therefore needs at least one [[compressor|Compressor]]. Hot air will harmlessly exit the Pile at the output side of the ventilation channel.

The vent's cooling effect only applies to fuel channels that touch the ventilation channel, or rather, fuel channels exactly one block above and below that ventilation channel. Without sufficient cooling, the channel will surpass 800°C, causing the highly-flammable graphite bricks to ignite, forcefully disassembling the Pile.

See also:
* [[Chicago Pile Fuel Loader]]
* [[Chicago Pile Control Rod]]" + } +} + diff --git a/src/main/resources/assets/hbm/textures/items/clay_tablet.png b/src/main/resources/assets/hbm/textures/items/clay_tablet.png index 640d51e22..d3ce9e6a9 100644 Binary files a/src/main/resources/assets/hbm/textures/items/clay_tablet.png and b/src/main/resources/assets/hbm/textures/items/clay_tablet.png differ