From df7808b48ea1c3e8d8cb51da78d2b06974075e4c Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 19 Mar 2024 18:14:53 +1100 Subject: [PATCH] Add presentation for the Schottky Particle Diode --- .../com/hbm/wiaj/cannery/CanneryHadron.java | 7 + .../com/hbm/wiaj/cannery/CannerySchottky.java | 250 ++++++++++++++++++ src/main/java/com/hbm/wiaj/cannery/Jars.java | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 12 + 4 files changed, 270 insertions(+) create mode 100644 src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java b/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java index ec57b7a13..90089afc6 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java @@ -32,6 +32,13 @@ public class CanneryHadron extends CanneryBase { public String getName() { return "cannery.hadron"; } + + @Override + public CanneryBase[] seeAlso() { + return new CanneryBase[] { + new CannerySchottky() + }; + } @Override public JarScript createScript() { diff --git a/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java b/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java new file mode 100644 index 000000000..e7d956e53 --- /dev/null +++ b/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java @@ -0,0 +1,250 @@ +package com.hbm.wiaj.cannery; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.tileentity.machine.TileEntityHadronDiode; +import com.hbm.util.I18nUtil; +import com.hbm.wiaj.JarScene; +import com.hbm.wiaj.JarScript; +import com.hbm.wiaj.WorldInAJar; +import com.hbm.wiaj.actions.ActionCreateActor; +import com.hbm.wiaj.actions.ActionRemoveActor; +import com.hbm.wiaj.actions.ActionRotateBy; +import com.hbm.wiaj.actions.ActionSetBlock; +import com.hbm.wiaj.actions.ActionSetTile; +import com.hbm.wiaj.actions.ActionSetZoom; +import com.hbm.wiaj.actions.ActionWait; +import com.hbm.wiaj.actors.ActorFancyPanel; +import com.hbm.wiaj.actors.ActorFancyPanel.Orientation; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +public class CannerySchottky extends CanneryBase { + + @Override + public ItemStack getIcon() { + return new ItemStack(ModBlocks.hadron_diode); + } + + @Override + public String getName() { + return "cannery.schottky"; + } + + @Override + public CanneryBase[] seeAlso() { + return new CanneryBase[] { + new CanneryHadron() + }; + } + + @Override + public JarScript createScript() { + WorldInAJar world = new WorldInAJar(5, 5, 5); + JarScript script = new JarScript(world); + + + // FIRST SCENE: Show and explain the diode + JarScene scene0 = new JarScene(script); + scene0.add(new ActionSetZoom(4, 0)); + + scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode())); + scene0.add(new ActionSetBlock(2, 2, 2, ModBlocks.hadron_diode)); + + scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.0")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + scene0.add(new ActionWait(100)); + scene0.add(new ActionRemoveActor(1)); + scene0.add(new ActionWait(5)); + + scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.1")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + scene0.add(new ActionWait(80)); + scene0.add(new ActionRemoveActor(1)); + scene0.add(new ActionWait(10)); + + scene0.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) + .setColors(colorCopper).setOrientation(Orientation.RIGHT))); + + scene0.add(new ActionWait(20)); + scene0.add(new ActionRemoveActor(2)); + + scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; }})); + + scene0.add(new ActionWait(10)); + + scene0.add(new ActionCreateActor(3, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.2")}}, 100) + .setColors(colorCopper).setOrientation(Orientation.RIGHT))); + + scene0.add(new ActionWait(60)); + scene0.add(new ActionRemoveActor(3)); + scene0.add(new ActionWait(10)); + + scene0.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) + .setColors(colorCopper).setOrientation(Orientation.LEFT))); + + scene0.add(new ActionWait(10)); + scene0.add(new ActionRemoveActor(4)); + + scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.IN; }})); + + scene0.add(new ActionWait(5)); + + scene0.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) + .setColors(colorCopper).setOrientation(Orientation.LEFT))); + + scene0.add(new ActionWait(10)); + scene0.add(new ActionRemoveActor(5)); + + scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; }})); + + scene0.add(new ActionWait(10)); + + scene0.add(new ActionCreateActor(6, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.3")}}, 100) + .setColors(colorCopper).setOrientation(Orientation.LEFT))); + + scene0.add(new ActionWait(60)); + scene0.add(new ActionRemoveActor(6)); + scene0.add(new ActionWait(10)); + + + // SECOND SCENE: Add another entrance and exit + JarScene scene1 = new JarScene(script); + scene1.add(new ActionSetZoom(4, 0)); + + scene1.add(new ActionRotateBy(180, 0, 10)); + + scene1.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) + .setColors(colorCopper).setOrientation(Orientation.RIGHT))); + + scene1.add(new ActionWait(10)); + scene1.add(new ActionRemoveActor(2)); + + scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; }})); + + scene1.add(new ActionWait(10)); + + scene1.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) + .setColors(colorCopper).setOrientation(Orientation.LEFT))); + + scene1.add(new ActionWait(10)); + scene1.add(new ActionRemoveActor(4)); + + scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; sides[5] = DiodeConfig.IN; }})); + + scene1.add(new ActionWait(5)); + + scene1.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0) + .setColors(colorCopper).setOrientation(Orientation.LEFT))); + + scene1.add(new ActionWait(10)); + scene1.add(new ActionRemoveActor(5)); + + scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; sides[5] = DiodeConfig.OUT; }})); + + scene1.add(new ActionWait(10)); + + scene1.add(new ActionRotateBy(-180, 0, 10)); + + scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.4")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + scene1.add(new ActionWait(100)); + scene1.add(new ActionRemoveActor(1)); + scene1.add(new ActionWait(10)); + + scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.5")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + scene1.add(new ActionWait(100)); + scene1.add(new ActionRemoveActor(1)); + scene1.add(new ActionWait(10)); + + scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.6")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + scene1.add(new ActionWait(100)); + scene1.add(new ActionRemoveActor(1)); + scene1.add(new ActionWait(10)); + + scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.7")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + scene1.add(new ActionWait(100)); + scene1.add(new ActionRemoveActor(1)); + scene1.add(new ActionWait(10)); + + scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.8")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + scene1.add(new ActionWait(100)); + scene1.add(new ActionRemoveActor(1)); + scene1.add(new ActionWait(10)); + + + + // THIRD SCENE: Correctly enclose the diode + JarScene scene2 = new JarScene(script); + scene2.add(new ActionSetZoom(4, 0)); + + scene2.add(new ActionSetZoom(-2, 10)); + + for(int x = 0; x < 5; x++) { + for(int z = 0; z < 5; z++) { + if((x == 0 || x == 4) && (z == 0 || z == 4)) continue; + scene2.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating)); + scene2.add(new ActionWait(1)); + } + } + + for(int x = 0; x < 5; x++) { + for(int z = 0; z < 5; z++) { + scene2.add(new ActionSetBlock(x, 1, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy)); + scene2.add(new ActionWait(1)); + } + } + + for(int x = 0; x < 5; x++) { + for(int z = 0; z < 5; z++) { + if(x == 2 || z == 2) continue; + scene2.add(new ActionSetBlock(x, 2, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy)); + scene2.add(new ActionWait(1)); + } + } + + scene2.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.9")}}, 200) + .setColors(colorCopper).setOrientation(Orientation.BOTTOM))); + + + scene2.add(new ActionRotateBy(360, 0, 100)); + scene2.add(new ActionRemoveActor(1)); + scene2.add(new ActionWait(10)); + + for(int x = 0; x < 5; x++) { + for(int z = 0; z < 5; z++) { + scene2.add(new ActionSetBlock(x, 3, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy)); + scene2.add(new ActionWait(1)); + } + } + + for(int x = 0; x < 5; x++) { + for(int z = 0; z < 5; z++) { + if((x == 0 || x == 4) && (z == 0 || z == 4)) continue; + scene2.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating)); + scene2.add(new ActionWait(1)); + } + } + + + script + .addScene(scene0) + .addScene(scene1) + .addScene(scene2); + + return script; + } + +} diff --git a/src/main/java/com/hbm/wiaj/cannery/Jars.java b/src/main/java/com/hbm/wiaj/cannery/Jars.java index 5605b1a5f..7355cdd5c 100644 --- a/src/main/java/com/hbm/wiaj/cannery/Jars.java +++ b/src/main/java/com/hbm/wiaj/cannery/Jars.java @@ -24,6 +24,7 @@ public class Jars { canneries.put(new ComparableStack(ModBlocks.foundry_channel), new CanneryFoundryChannel()); canneries.put(new ComparableStack(ModBlocks.machine_crucible), new CanneryCrucible()); canneries.put(new ComparableStack(ModBlocks.hadron_core), new CanneryHadron()); + canneries.put(new ComparableStack(ModBlocks.hadron_diode), new CannerySchottky()); canneries.put(new ComparableStack(DictFrame.fromOne(ModItems.plant_item, EnumPlantType.MUSTARDWILLOW)), new CanneryWillow()); canneries.put(new ComparableStack(DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.CD0)), new CanneryWillow()); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 58acaa682..77db3a726 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -545,6 +545,18 @@ cannery.hadron.math.1=50 x 8 x 10KHE = 400 x 10KHE = 4MHE cannery.hadron.math.2=Starmetal Coil Strength: 1,000 cannery.hadron.math.3=1,000 x 8 x 10KHE = 8,000 x 10KHE = 80MHE +cannery.schottky=Schottky Particle Diode +cannery.schottky.0=This is a Schottky Particle Diode. It can allow for more complex particle accelerator designs and save on electricity +cannery.schottky.1=By default it blocks all particles and must be configured with a Screwdriver +cannery.schottky.2=This face will now accept entering particles +cannery.schottky.3=And this face will eject particles that enter +cannery.schottky.4=The diode now has two exits, and will now behave in a quantum manner, creating virtual particles for each exit +cannery.schottky.5=Once all the virtual particles have reached an Analysis Chamber, the particle with the lowest momentum required for the current recipe is chosen +cannery.schottky.6=The chosen particle undergoes a wavefunction collapse and is made real, consuming only the power that the collapsing particle requires +cannery.schottky.7=If any virtual particles encounter any malformed segments, all virtual particles will be discarded and the erroring particle will be collapsed instead +cannery.schottky.8=Note that virtual particles will never use the same Diode exit twice. Infinite loops will fail, but re-entering a Diode is otherwise fine +cannery.schottky.9=Your Schottky Particle Diode should be properly enclosed, with free paths for each intersection exit + chem.ARSENIC=Arsenic Extraction chem.ASPHALT=Asphalt Production chem.BAKELITE=Bakelite Production