Add presentation for the Schottky Particle Diode

This commit is contained in:
George Paton 2024-03-19 18:14:53 +11:00
parent d65469e1c0
commit df7808b48e
4 changed files with 270 additions and 0 deletions

View File

@ -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() {

View File

@ -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;
}
}

View File

@ -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());

View File

@ -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