mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Merge remote-tracking branch 'concealed/mc1.20.1/feature-dev' into mc1.20.1/feature-dev
This commit is contained in:
commit
d506625266
9 changed files with 901 additions and 388 deletions
File diff suppressed because it is too large
Load diff
|
@ -2128,7 +2128,7 @@
|
|||
"create.ponder.nixie_tube.text_1": "ɥʇbuǝɹʇs ןɐubıs ǝɥʇ ʎɐןdsıp ןןıʍ sǝqn⟘ ǝıxıN 'ǝuoʇspǝᴚ ʎq pǝɹǝʍod uǝɥM",
|
||||
"create.ponder.nixie_tube.text_2": "pǝʎɐןdsıp ǝq uɐɔ ʇxǝʇ ɯoʇsnɔ 'spɹɐoqdıןƆ uǝʇʇıɹʍ buıs∩",
|
||||
"create.ponder.nixie_tube.text_3": "ɹnoןoɔ ʎɐןdsıp ɹıǝɥʇ ǝbuɐɥɔ oʇ ǝʎᗡ ɥʇıʍ ʞɔıןƆ-ʇɥbıᴚ",
|
||||
"create.ponder.package_frogport.header": "sʇɹodboɹℲ ɥʇıʍ sǝbɐʞɔɐd buıʇɹodsuɐɹ⟘",
|
||||
"create.ponder.package_frogport.header": "sʇɹodboɹℲ uǝǝʍʇǝq sǝbɐʞɔɐd buıʇɹodsuɐɹ⟘",
|
||||
"create.ponder.package_frogport.text_1": "ʎqɹɐǝu ʇɹodboɹℲ ǝɥʇ ǝɔɐןd puɐ ɹoʎǝʌuoƆ uıɐɥƆ ɐ ʞɔıןɔ-ʇɥbıᴚ",
|
||||
"create.ponder.package_frogport.text_10": "ʞɹoʍʇǝu uıɐɥɔ ǝɥʇ uo boɹɟ buıɥɔʇɐɯ ɐ oʇ ɥʇɐd ɹıǝɥʇ puıɟ sǝbɐʞɔɐԀ",
|
||||
"create.ponder.package_frogport.text_11": "ɹǝʇǝԀ",
|
||||
|
@ -2140,8 +2140,8 @@
|
|||
"create.ponder.package_frogport.text_17": ",ɹǝʇǝԀ, oʇ sǝbɐʞɔɐd sǝssǝɹppⱯ",
|
||||
"create.ponder.package_frogport.text_18": "ssǝɹppɐ ɹıǝɥʇ ʇɔǝןןoɔ oʇ pɹɐoqdıןɔ ɐ ɥʇıʍ sʇɹodboɹℲ ʞɔıןɔ-ʇɥbıᴚ",
|
||||
"create.ponder.package_frogport.text_19": "sI∩ ɹǝɥʇo uı sʇnduı ssǝɹppɐ ǝʇǝןdɯoɔ-oʇnɐ dןǝɥ uɐɔ sǝɯɐu pǝʇɔǝןןoɔ ɥʇıʍ spɹɐoqdıןƆ",
|
||||
"create.ponder.package_frogport.text_2": "I∩ ʎɹoʇuǝʌuı ɹıǝɥʇ uı ǝɯɐu ɐ uǝʌıb ǝq uɐɔ ʎǝɥ⟘",
|
||||
"create.ponder.package_frogport.text_3": "˙˙ǝɯɐu ʇuǝɹǝɟɟıp ɐ oʇ pǝssǝɹppɐ sı ǝbɐʞɔɐd ɐ ɟI",
|
||||
"create.ponder.package_frogport.text_2": "I∩ ʎɹoʇuǝʌuı ǝɥʇ uı ssǝɹppɐ uɐ ʇı ubıssⱯ",
|
||||
"create.ponder.package_frogport.text_3": "˙˙ʇı ɥɔʇɐɯ ʇou sǝop ǝbɐʞɔɐd pǝʇɹǝsuı uɐ ɟo ssǝɹppɐ ǝɥʇ ɟI",
|
||||
"create.ponder.package_frogport.text_4": "ʇɹǝqןⱯ",
|
||||
"create.ponder.package_frogport.text_5": "ɹǝʇǝԀ →",
|
||||
"create.ponder.package_frogport.text_6": "ɹoʎǝʌuoɔ ǝɥʇ uo ǝbɐʞɔɐd ǝɥʇ ǝɔɐןd ןןıʍ ʇɹodboɹℲ ǝɥʇ˙˙",
|
||||
|
@ -2191,6 +2191,19 @@
|
|||
"create.ponder.portable_storage_interface.text_8": "ʎɐʍ sʇı uo ǝnuıʇuoɔ ןןıʍ uoıʇdɐɹʇuoɔ ǝɥʇ 'ǝןıɥʍ ɐ ɹoɟ pǝbuɐɥɔxǝ uǝǝq ǝʌɐɥ sɯǝʇı ou ɹǝʇɟⱯ",
|
||||
"create.ponder.portable_storage_interface_redstone.header": "ןoɹʇuoƆ ǝuoʇspǝᴚ",
|
||||
"create.ponder.portable_storage_interface_redstone.text_1": "buıbɐbuǝ ɯoɹɟ ǝɔɐɟɹǝʇuı ʎɹɐuoıʇɐʇs ǝɥʇ ʇuǝʌǝɹd ןןıʍ ɹǝʍod ǝuoʇspǝᴚ",
|
||||
"create.ponder.postbox.header": "sǝxoqʇsoԀ uǝǝʍʇǝq sǝbɐʞɔɐd buıʇɹodsuɐɹ⟘",
|
||||
"create.ponder.postbox.text_1": "ʎqɹɐǝu xoqʇsoԀ ǝɥʇ ǝɔɐןd puɐ uoıʇɐʇS uıɐɹ⟘ ɐ ʞɔıןɔ-ʇɥbıᴚ",
|
||||
"create.ponder.postbox.text_10": "ǝsnoɥǝɹɐM →",
|
||||
"create.ponder.postbox.text_11": "sʞunɥɔ pǝpɐoןun uı ɹnoıʌɐɥǝq ɹıǝɥʇ uıɐʇuıɐɯ sǝxoqʇsoԀ 'suıɐɹʇ ǝʞıן ʇsnſ",
|
||||
"create.ponder.postbox.text_12": "ʎɹoʇuǝʌuı ɹıǝɥʇ oʇ ɹo ɯoɹɟ pǝɹǝʌıןǝp ǝq ןןıʇs uɐɔ sǝbɐʞɔɐԀ",
|
||||
"create.ponder.postbox.text_2": "I∩ ʎɹoʇuǝʌuı ǝɥʇ uı ssǝɹppɐ uɐ ʇı ubıssⱯ",
|
||||
"create.ponder.postbox.text_3": "˙˙ʇı ɥɔʇɐɯ ʇou sǝop ǝbɐʞɔɐd pǝʇɹǝsuı uɐ ɟo ssǝɹppɐ ǝɥʇ ɟI",
|
||||
"create.ponder.postbox.text_4": "ǝsnoɥǝɹɐM",
|
||||
"create.ponder.postbox.text_5": "ʇsodʇnO →",
|
||||
"create.ponder.postbox.text_6": "obɹɐɔ sɐ ʇı ʇɔǝןןoɔ ןןıʍ uoıʇɐʇs ǝɥʇ ʇɐ buıddoʇs suıɐɹʇ˙˙",
|
||||
"create.ponder.postbox.text_7": "ɟɟo pǝddoɹp ǝq ןןıʍ ssǝɹppɐ ǝɥʇ buıɥɔʇɐɯ sǝbɐʞɔɐd 'ʎןǝsɹǝʌuoƆ",
|
||||
"create.ponder.postbox.text_8": "xoqʇsoԀ ǝɥʇ ɯoɹɟ pǝʇɔɐɹʇxǝ ǝq uɐɔ uıɐɹʇ ʎq pǝʌıɹɹɐ ʇɐɥʇ sǝbɐʞɔɐԀ",
|
||||
"create.ponder.postbox.text_9": "ǝsnoɥǝɹɐM",
|
||||
"create.ponder.powered_latch.header": "ɥɔʇɐꞀ pǝɹǝʍoԀ ǝɥʇ buısn sןɐubıs buıןןoɹʇuoƆ",
|
||||
"create.ponder.powered_latch.text_1": "sɹǝʌǝꞀ ǝןqɐןןoɹʇuoɔ ǝuoʇspǝɹ ǝɹɐ sǝɥɔʇɐꞀ pǝɹǝʍoԀ",
|
||||
"create.ponder.powered_latch.text_2": "uo ʇı ɥɔʇıʍs ʞɔɐq ǝɥʇ ʇɐ sןɐubıS",
|
||||
|
|
|
@ -2128,7 +2128,7 @@
|
|||
"create.ponder.nixie_tube.text_1": "When powered by Redstone, Nixie Tubes will display the signal strength",
|
||||
"create.ponder.nixie_tube.text_2": "Using written Clipboards, custom text can be displayed",
|
||||
"create.ponder.nixie_tube.text_3": "Right-Click with Dye to change their display colour",
|
||||
"create.ponder.package_frogport.header": "Transporting packages with Frogports",
|
||||
"create.ponder.package_frogport.header": "Transporting packages between Frogports",
|
||||
"create.ponder.package_frogport.text_1": "Right-click a Chain Conveyor and place the Frogport nearby",
|
||||
"create.ponder.package_frogport.text_10": "Packages find their path to a matching frog on the chain network",
|
||||
"create.ponder.package_frogport.text_11": "Peter",
|
||||
|
@ -2140,8 +2140,8 @@
|
|||
"create.ponder.package_frogport.text_17": "Addresses packages to 'Peter'",
|
||||
"create.ponder.package_frogport.text_18": "Right-click Frogports with a clipboard to collect their address",
|
||||
"create.ponder.package_frogport.text_19": "Clipboards with collected names can help auto-complete address inputs in other UIs",
|
||||
"create.ponder.package_frogport.text_2": "They can be given a name in their inventory UI",
|
||||
"create.ponder.package_frogport.text_3": "If a package is addressed to a different name..",
|
||||
"create.ponder.package_frogport.text_2": "Assign it an address in the inventory UI",
|
||||
"create.ponder.package_frogport.text_3": "If the address of an inserted package does not match it..",
|
||||
"create.ponder.package_frogport.text_4": "Albert",
|
||||
"create.ponder.package_frogport.text_5": "→ Peter",
|
||||
"create.ponder.package_frogport.text_6": "..the Frogport will place the package on the conveyor",
|
||||
|
@ -2191,6 +2191,19 @@
|
|||
"create.ponder.portable_storage_interface.text_8": "After no items have been exchanged for a while, the contraption will continue on its way",
|
||||
"create.ponder.portable_storage_interface_redstone.header": "Redstone Control",
|
||||
"create.ponder.portable_storage_interface_redstone.text_1": "Redstone power will prevent the stationary interface from engaging",
|
||||
"create.ponder.postbox.header": "Transporting packages between Postboxes",
|
||||
"create.ponder.postbox.text_1": "Right-click a Train Station and place the Postbox nearby",
|
||||
"create.ponder.postbox.text_10": "→ Warehouse",
|
||||
"create.ponder.postbox.text_11": "Just like trains, Postboxes maintain their behaviour in unloaded chunks",
|
||||
"create.ponder.postbox.text_12": "Packages can still be delivered from or to their inventory",
|
||||
"create.ponder.postbox.text_2": "Assign it an address in the inventory UI",
|
||||
"create.ponder.postbox.text_3": "If the address of an inserted package does not match it..",
|
||||
"create.ponder.postbox.text_4": "Warehouse",
|
||||
"create.ponder.postbox.text_5": "→ Outpost",
|
||||
"create.ponder.postbox.text_6": "..trains stopping at the station will collect it as cargo",
|
||||
"create.ponder.postbox.text_7": "Conversely, packages matching the address will be dropped off",
|
||||
"create.ponder.postbox.text_8": "Packages that arrived by train can be extracted from the Postbox",
|
||||
"create.ponder.postbox.text_9": "Warehouse",
|
||||
"create.ponder.powered_latch.header": "Controlling signals using the Powered Latch",
|
||||
"create.ponder.powered_latch.text_1": "Powered Latches are redstone controllable Levers",
|
||||
"create.ponder.powered_latch.text_2": "Signals at the back switch it on",
|
||||
|
|
|
@ -25,6 +25,7 @@ public class PostboxBlockEntity extends PackagePortBlockEntity {
|
|||
public WeakReference<GlobalStation> trackedGlobalStation;
|
||||
|
||||
public LerpedFloat flag;
|
||||
public boolean forceFlag;
|
||||
|
||||
private boolean sendParticles;
|
||||
|
||||
|
@ -38,7 +39,7 @@ public class PostboxBlockEntity extends PackagePortBlockEntity {
|
|||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (!level.isClientSide) {
|
||||
if (!level.isClientSide && !isVirtual()) {
|
||||
if (sendParticles)
|
||||
sendData();
|
||||
return;
|
||||
|
@ -46,7 +47,7 @@ public class PostboxBlockEntity extends PackagePortBlockEntity {
|
|||
|
||||
float currentTarget = flag.getChaseTarget();
|
||||
if (currentTarget == 0 || flag.settled()) {
|
||||
int target = inventory.isEmpty() ? 0 : 1;
|
||||
int target = (inventory.isEmpty() && !forceFlag) ? 0 : 1;
|
||||
if (target != currentTarget) {
|
||||
flag.chase(target, 0.1f, Chaser.LINEAR);
|
||||
if (target == 1)
|
||||
|
|
|
@ -3,6 +3,8 @@ package com.simibubi.create.foundation.ponder;
|
|||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.kinetics.crank.ValveHandleBlock;
|
||||
import com.simibubi.create.content.logistics.packagePort.postbox.PostboxBlock;
|
||||
import com.simibubi.create.content.logistics.tableCloth.TableClothBlock;
|
||||
import com.simibubi.create.infrastructure.ponder.AllCreatePonderScenes;
|
||||
import com.simibubi.create.infrastructure.ponder.AllCreatePonderTags;
|
||||
|
||||
|
@ -13,6 +15,7 @@ import net.createmod.ponder.api.registration.PonderSceneRegistrationHelper;
|
|||
import net.createmod.ponder.api.registration.PonderTagRegistrationHelper;
|
||||
import net.createmod.ponder.api.registration.SharedTextRegistrationHelper;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.DyeColor;
|
||||
|
||||
public class CreatePonderPlugin implements PonderPlugin {
|
||||
|
||||
|
@ -51,5 +54,7 @@ public class CreatePonderPlugin implements PonderPlugin {
|
|||
@Override
|
||||
public void indexExclusions(IndexExclusionHelper helper) {
|
||||
helper.excludeBlockVariants(ValveHandleBlock.class, AllBlocks.COPPER_VALVE_HANDLE.get());
|
||||
helper.excludeBlockVariants(PostboxBlock.class, AllBlocks.PACKAGE_POSTBOXES.get(DyeColor.WHITE).get());
|
||||
helper.excludeBlockVariants(TableClothBlock.class, AllBlocks.TABLE_CLOTHS.get(DyeColor.WHITE).get());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ import com.simibubi.create.infrastructure.ponder.scenes.fluid.PumpScenes;
|
|||
import com.simibubi.create.infrastructure.ponder.scenes.fluid.SpoutScenes;
|
||||
import com.simibubi.create.infrastructure.ponder.scenes.highLogistics.FrogAndConveyorScenes;
|
||||
import com.simibubi.create.infrastructure.ponder.scenes.highLogistics.PackagerScenes;
|
||||
import com.simibubi.create.infrastructure.ponder.scenes.highLogistics.PostboxScenes;
|
||||
import com.simibubi.create.infrastructure.ponder.scenes.trains.TrackObserverScenes;
|
||||
import com.simibubi.create.infrastructure.ponder.scenes.trains.TrackScenes;
|
||||
import com.simibubi.create.infrastructure.ponder.scenes.trains.TrainScenes;
|
||||
|
@ -54,6 +55,7 @@ import com.tterrag.registrate.util.entry.RegistryEntry;
|
|||
|
||||
import net.createmod.ponder.api.registration.PonderSceneRegistrationHelper;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.DyeColor;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
|
||||
|
@ -354,6 +356,8 @@ public class AllCreatePonderScenes {
|
|||
.addStoryBoard("high_logistics/chain_conveyor", FrogAndConveyorScenes::conveyor);
|
||||
HELPER.forComponents(AllBlocks.PACKAGE_FROGPORT)
|
||||
.addStoryBoard("high_logistics/package_frogport", FrogAndConveyorScenes::frogPort);
|
||||
HELPER.forComponents(AllBlocks.PACKAGE_POSTBOXES.toArray())
|
||||
.addStoryBoard("high_logistics/package_postbox", PostboxScenes::postbox);
|
||||
HELPER.forComponents(AllBlocks.PACKAGER)
|
||||
.addStoryBoard("high_logistics/packager", PackagerScenes::packager)
|
||||
.addStoryBoard("high_logistics/packager_address", PackagerScenes::packagerAddress);
|
||||
|
|
|
@ -376,7 +376,7 @@ public class FrogAndConveyorScenes {
|
|||
|
||||
public static void frogPort(SceneBuilder builder, SceneBuildingUtil util) {
|
||||
CreateSceneBuilder scene = new CreateSceneBuilder(builder);
|
||||
scene.title("package_frogport", "Transporting packages with Frogports");
|
||||
scene.title("package_frogport", "Transporting packages between Frogports");
|
||||
scene.configureBasePlate(0, 0, 9);
|
||||
scene.scaleSceneView(.75f);
|
||||
scene.setSceneOffsetY(-1);
|
||||
|
@ -526,7 +526,7 @@ public class FrogAndConveyorScenes {
|
|||
.position(fromFrog.below()), 70)
|
||||
.attachKeyFrame()
|
||||
.colored(PonderPalette.BLUE)
|
||||
.text("They can be given a name in their inventory UI")
|
||||
.text("Assign it an address in the inventory UI")
|
||||
.pointAt(util.vector()
|
||||
.topOf(fromFrog.below()))
|
||||
.placeNearTarget();
|
||||
|
@ -568,7 +568,7 @@ public class FrogAndConveyorScenes {
|
|||
scene.overlay()
|
||||
.showText(60)
|
||||
.attachKeyFrame()
|
||||
.text("If a package is addressed to a different name..")
|
||||
.text("If the address of an inserted package does not match it..")
|
||||
.pointAt(util.vector()
|
||||
.topOf(5, 0, 3))
|
||||
.placeNearTarget();
|
||||
|
|
|
@ -0,0 +1,477 @@
|
|||
package com.simibubi.create.infrastructure.ponder.scenes.highLogistics;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.logistics.box.PackageItem;
|
||||
import com.simibubi.create.content.logistics.box.PackageStyles;
|
||||
import com.simibubi.create.content.logistics.packagePort.postbox.PostboxBlockEntity;
|
||||
import com.simibubi.create.foundation.ponder.CreateSceneBuilder;
|
||||
|
||||
import net.createmod.catnip.utility.Pointing;
|
||||
import net.createmod.ponder.api.PonderPalette;
|
||||
import net.createmod.ponder.api.element.ElementLink;
|
||||
import net.createmod.ponder.api.element.ParrotElement;
|
||||
import net.createmod.ponder.api.element.ParrotPose.FacePointOfInterestPose;
|
||||
import net.createmod.ponder.api.element.WorldSectionElement;
|
||||
import net.createmod.ponder.api.scene.SceneBuilder;
|
||||
import net.createmod.ponder.api.scene.SceneBuildingUtil;
|
||||
import net.createmod.ponder.api.scene.Selection;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.item.DyeColor;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class PostboxScenes {
|
||||
|
||||
public static void postbox(SceneBuilder builder, SceneBuildingUtil util) {
|
||||
CreateSceneBuilder scene = new CreateSceneBuilder(builder);
|
||||
scene.title("postbox", "Transporting packages between Postboxes");
|
||||
scene.configureBasePlate(0, 1, 9);
|
||||
scene.scaleSceneView(.875f);
|
||||
scene.setSceneOffsetY(-0.5f);
|
||||
|
||||
BlockPos station = util.grid()
|
||||
.at(1, 1, 8);
|
||||
Selection stationS = util.select()
|
||||
.position(1, 1, 8);
|
||||
BlockPos box2 = util.grid()
|
||||
.at(3, 1, 8);
|
||||
Selection box2S = util.select()
|
||||
.position(3, 1, 8);
|
||||
Selection glass = util.select()
|
||||
.fromTo(3, 1, 9, 1, 1, 9);
|
||||
BlockPos box = util.grid()
|
||||
.at(1, 2, 2);
|
||||
Selection boxS = util.select()
|
||||
.position(1, 2, 2);
|
||||
Selection girder = util.select()
|
||||
.position(1, 1, 2);
|
||||
Selection belt = util.select()
|
||||
.fromTo(4, 1, 2, 2, 1, 2);
|
||||
Selection cog = util.select()
|
||||
.fromTo(4, 1, 1, 4, 1, 0);
|
||||
Selection largeCog = util.select()
|
||||
.position(5, 0, 0);
|
||||
Selection train1 = util.select()
|
||||
.fromTo(0, 2, 4, 3, 3, 6);
|
||||
Selection train2 = util.select()
|
||||
.fromTo(4, 2, 4, 8, 3, 6);
|
||||
BlockPos controls = util.grid()
|
||||
.at(2, 3, 5);
|
||||
Selection tracks = util.select()
|
||||
.fromTo(9, 1, 5, 30, 1, 5);
|
||||
BlockPos funnel = util.grid()
|
||||
.at(2, 2, 2);
|
||||
|
||||
ItemStack boxItem2 = PackageItem.containing(List.of());
|
||||
PackageItem.addAddress(boxItem2, "Peter");
|
||||
scene.world()
|
||||
.createItemOnBeltLike(util.grid()
|
||||
.at(6, 2, 4), Direction.DOWN, boxItem2);
|
||||
|
||||
scene.world()
|
||||
.toggleControls(controls);
|
||||
ElementLink<WorldSectionElement> base = scene.world()
|
||||
.showIndependentSection(util.select()
|
||||
.fromTo(0, 0, 1, 8, 0, 9), Direction.UP);
|
||||
scene.idle(10);
|
||||
|
||||
ElementLink<WorldSectionElement> tracksL = scene.world()
|
||||
.showIndependentSection(util.select()
|
||||
.position(8, 1, 5), Direction.DOWN);
|
||||
scene.idle(1);
|
||||
for (int i = 7; i >= 0; i--) {
|
||||
scene.world()
|
||||
.showSectionAndMerge(util.select()
|
||||
.position(i, 1, 5), Direction.DOWN, tracksL);
|
||||
scene.idle(1);
|
||||
}
|
||||
scene.idle(5);
|
||||
|
||||
scene.world()
|
||||
.showSectionAndMerge(stationS, Direction.DOWN, base);
|
||||
scene.idle(15);
|
||||
|
||||
Vec3 fromTarget = util.vector()
|
||||
.topOf(station);
|
||||
|
||||
ItemStack postboxItem = AllBlocks.PACKAGE_POSTBOXES.get(DyeColor.WHITE)
|
||||
.asStack();
|
||||
scene.overlay()
|
||||
.showControls(fromTarget, Pointing.DOWN, 50)
|
||||
.rightClick()
|
||||
.withItem(postboxItem);
|
||||
scene.idle(5);
|
||||
|
||||
AABB bb1 = new AABB(fromTarget, fromTarget);
|
||||
scene.overlay()
|
||||
.chaseBoundingBoxOutline(PonderPalette.WHITE, box, bb1, 10);
|
||||
scene.idle(1);
|
||||
scene.overlay()
|
||||
.chaseBoundingBoxOutline(PonderPalette.WHITE, box, bb1.inflate(0.025, 0.025, 0.025), 50);
|
||||
scene.idle(26);
|
||||
|
||||
scene.overlay()
|
||||
.showText(80)
|
||||
.text("Right-click a Train Station and place the Postbox nearby")
|
||||
.attachKeyFrame()
|
||||
.placeNearTarget()
|
||||
.pointAt(fromTarget);
|
||||
|
||||
scene.idle(40);
|
||||
|
||||
ElementLink<WorldSectionElement> postboxE = scene.world()
|
||||
.showIndependentSection(boxS, Direction.DOWN);
|
||||
scene.world()
|
||||
.moveSection(postboxE, util.vector()
|
||||
.of(0, -1, 0), 0);
|
||||
|
||||
scene.idle(15);
|
||||
scene.overlay()
|
||||
.chaseBoundingBoxOutline(PonderPalette.GREEN, box, bb1.inflate(0.025, 0.025, 0.025), 50);
|
||||
|
||||
AABB bb2 = new AABB(box.below()).deflate(0.125, 0, 0)
|
||||
.contract(0, 0.125, 0);
|
||||
|
||||
scene.overlay()
|
||||
.chaseBoundingBoxOutline(PonderPalette.GREEN, box2, bb2, 50);
|
||||
scene.idle(10);
|
||||
scene.overlay()
|
||||
.showLine(PonderPalette.GREEN, util.vector()
|
||||
.topOf(box.below()), fromTarget, 40);
|
||||
scene.idle(45);
|
||||
|
||||
scene.overlay()
|
||||
.showControls(util.vector()
|
||||
.topOf(box.below()), Pointing.DOWN, 40)
|
||||
.rightClick();
|
||||
scene.idle(7);
|
||||
scene.overlay()
|
||||
.chaseBoundingBoxOutline(PonderPalette.BLUE, funnel, bb2, 70);
|
||||
scene.overlay()
|
||||
.showText(70)
|
||||
.attachKeyFrame()
|
||||
.colored(PonderPalette.BLUE)
|
||||
.text("Assign it an address in the inventory UI")
|
||||
.pointAt(util.vector()
|
||||
.topOf(box.below()))
|
||||
.placeNearTarget();
|
||||
scene.idle(80);
|
||||
|
||||
scene.world()
|
||||
.moveSection(postboxE, util.vector()
|
||||
.of(0, 1, 0), 10);
|
||||
scene.idle(10);
|
||||
scene.world()
|
||||
.showSectionAndMerge(girder, Direction.NORTH, base);
|
||||
scene.idle(5);
|
||||
scene.world()
|
||||
.showSectionAndMerge(largeCog, Direction.UP, base);
|
||||
scene.world()
|
||||
.showSectionAndMerge(cog, Direction.DOWN, base);
|
||||
scene.world()
|
||||
.showSectionAndMerge(belt, Direction.WEST, base);
|
||||
scene.idle(5);
|
||||
|
||||
scene.world()
|
||||
.showSectionAndMerge(util.select()
|
||||
.position(funnel), Direction.DOWN, base);
|
||||
scene.idle(10);
|
||||
|
||||
ItemStack boxItem = PackageStyles.getDefaultBox()
|
||||
.copy();
|
||||
PackageItem.addAddress(boxItem, "Peter");
|
||||
|
||||
scene.world()
|
||||
.createItemOnBelt(util.grid()
|
||||
.at(3, 1, 2), Direction.EAST, boxItem);
|
||||
scene.idle(5);
|
||||
|
||||
scene.world()
|
||||
.multiplyKineticSpeed(util.select()
|
||||
.everywhere(), 1 / 32f);
|
||||
|
||||
scene.overlay()
|
||||
.showText(60)
|
||||
.attachKeyFrame()
|
||||
.text("If the address of an inserted package does not match it..")
|
||||
.pointAt(util.vector()
|
||||
.centerOf(3, 2, 2))
|
||||
.placeNearTarget();
|
||||
|
||||
scene.idle(70);
|
||||
|
||||
scene.overlay()
|
||||
.showText(40)
|
||||
.colored(PonderPalette.BLUE)
|
||||
.text("Warehouse")
|
||||
.pointAt(util.vector()
|
||||
.blockSurface(box, Direction.NORTH)
|
||||
.add(-.5, 0, 0))
|
||||
.placeNearTarget();
|
||||
scene.idle(5);
|
||||
scene.overlay()
|
||||
.showText(40)
|
||||
.colored(PonderPalette.OUTPUT)
|
||||
.text("\u2192 Outpost")
|
||||
.pointAt(util.vector()
|
||||
.centerOf(3, 2, 2))
|
||||
.placeNearTarget();
|
||||
|
||||
scene.idle(50);
|
||||
|
||||
scene.world()
|
||||
.multiplyKineticSpeed(util.select()
|
||||
.everywhere(), 32f);
|
||||
scene.idle(17);
|
||||
scene.world()
|
||||
.removeItemsFromBelt(util.grid()
|
||||
.at(2, 1, 2));
|
||||
animatePostbox(scene, box, true);
|
||||
scene.world()
|
||||
.flapFunnel(funnel, false);
|
||||
scene.idle(15);
|
||||
|
||||
ElementLink<WorldSectionElement> train1L = scene.world()
|
||||
.showIndependentSection(train1, null);
|
||||
ElementLink<ParrotElement> birbL = scene.special()
|
||||
.createBirb(util.vector()
|
||||
.of(9.5, 3.5, 5.5), FacePointOfInterestPose::new);
|
||||
scene.special()
|
||||
.movePointOfInterest(util.grid()
|
||||
.at(-5, 4, 5));
|
||||
scene.world()
|
||||
.moveSection(train1L, util.vector()
|
||||
.of(6, 0, 0), 0);
|
||||
scene.idle(1);
|
||||
scene.special()
|
||||
.moveParrot(birbL, util.vector()
|
||||
.of(-5, 0, 0), 25);
|
||||
scene.world()
|
||||
.moveSection(train1L, util.vector()
|
||||
.of(-5, 0, 0), 25);
|
||||
scene.world()
|
||||
.animateBogey(util.grid()
|
||||
.at(2, 2, 5), 6, 25);
|
||||
scene.idle(14);
|
||||
ElementLink<WorldSectionElement> train2L = scene.world()
|
||||
.showIndependentSection(train2, null);
|
||||
scene.world()
|
||||
.moveSection(train2L, util.vector()
|
||||
.of(3, 0, 0), 0);
|
||||
scene.idle(1);
|
||||
scene.world()
|
||||
.moveSection(train2L, util.vector()
|
||||
.of(-2, 0, 0), 10);
|
||||
scene.world()
|
||||
.animateBogey(util.grid()
|
||||
.at(6, 2, 5), 2, 10);
|
||||
|
||||
scene.idle(10);
|
||||
scene.special()
|
||||
.moveParrot(birbL, util.vector()
|
||||
.of(-1, 0, 0), 10);
|
||||
scene.world()
|
||||
.moveSection(train1L, util.vector()
|
||||
.of(-1, 0, 0), 10);
|
||||
scene.world()
|
||||
.animateBogey(util.grid()
|
||||
.at(2, 2, 5), 1, 10);
|
||||
scene.world()
|
||||
.moveSection(train2L, util.vector()
|
||||
.of(-1, 0, 0), 10);
|
||||
scene.world()
|
||||
.animateBogey(util.grid()
|
||||
.at(6, 2, 5), 1, 10);
|
||||
scene.idle(10);
|
||||
scene.world()
|
||||
.animateTrainStation(station, true);
|
||||
scene.idle(10);
|
||||
scene.effects()
|
||||
.indicateSuccess(box);
|
||||
scene.effects()
|
||||
.indicateSuccess(util.grid()
|
||||
.at(5, 3, 4));
|
||||
scene.world()
|
||||
.createItemOnBeltLike(util.grid()
|
||||
.at(5, 2, 4), Direction.DOWN, boxItem);
|
||||
|
||||
scene.idle(15);
|
||||
animatePostbox(scene, box, false);
|
||||
scene.overlay()
|
||||
.showText(80)
|
||||
.text("..trains stopping at the station will collect it as cargo")
|
||||
.attachKeyFrame()
|
||||
.pointAt(util.vector()
|
||||
.topOf(5, 2, 4))
|
||||
.placeNearTarget();
|
||||
scene.idle(95);
|
||||
|
||||
scene.overlay()
|
||||
.showText(80)
|
||||
.text("Conversely, packages matching the address will be dropped off")
|
||||
.attachKeyFrame()
|
||||
.pointAt(util.vector()
|
||||
.topOf(6, 2, 4))
|
||||
.placeNearTarget();
|
||||
scene.idle(50);
|
||||
|
||||
scene.world()
|
||||
.removeItemsFromBelt(util.grid()
|
||||
.at(6, 2, 4));
|
||||
scene.effects()
|
||||
.indicateSuccess(box);
|
||||
scene.effects()
|
||||
.indicateSuccess(util.grid()
|
||||
.at(6, 2, 4));
|
||||
animatePostbox(scene, box, true);
|
||||
scene.idle(60);
|
||||
|
||||
scene.overlay()
|
||||
.showText(100)
|
||||
.text("Packages that arrived by train can be extracted from the Postbox")
|
||||
.attachKeyFrame()
|
||||
.pointAt(util.vector()
|
||||
.blockSurface(box, Direction.NORTH))
|
||||
.placeNearTarget();
|
||||
scene.idle(60);
|
||||
|
||||
scene.world()
|
||||
.multiplyKineticSpeed(util.select()
|
||||
.everywhere(), -1);
|
||||
scene.world()
|
||||
.createItemOnBelt(util.grid()
|
||||
.at(2, 1, 2), Direction.WEST, boxItem2);
|
||||
animatePostbox(scene, box, false);
|
||||
scene.idle(25);
|
||||
scene.world()
|
||||
.multiplyKineticSpeed(util.select()
|
||||
.everywhere(), 0);
|
||||
|
||||
scene.idle(25);
|
||||
scene.overlay()
|
||||
.showText(40)
|
||||
.colored(PonderPalette.BLUE)
|
||||
.text("Warehouse")
|
||||
.pointAt(util.vector()
|
||||
.blockSurface(box, Direction.NORTH)
|
||||
.add(-.5, 0, 0))
|
||||
.placeNearTarget();
|
||||
scene.idle(5);
|
||||
scene.overlay()
|
||||
.showText(40)
|
||||
.colored(PonderPalette.OUTPUT)
|
||||
.text("\u2192 Warehouse")
|
||||
.pointAt(util.vector()
|
||||
.centerOf(3, 2, 2)
|
||||
.add(0, -.25, 0))
|
||||
.placeNearTarget();
|
||||
|
||||
scene.idle(50);
|
||||
|
||||
ElementLink<WorldSectionElement> tracksL2 = scene.world()
|
||||
.showIndependentSection(tracks, Direction.EAST);
|
||||
scene.world()
|
||||
.moveSection(tracksL2, util.vector()
|
||||
.of(-31, 0, 0), 0);
|
||||
|
||||
scene.idle(15);
|
||||
scene.world()
|
||||
.animateTrainStation(station, false);
|
||||
scene.world()
|
||||
.moveSection(tracksL, util.vector()
|
||||
.of(12, 0, 0), 120);
|
||||
scene.world()
|
||||
.moveSection(tracksL2, util.vector()
|
||||
.of(12, 0, 0), 120);
|
||||
scene.world()
|
||||
.moveSection(postboxE, util.vector()
|
||||
.of(12, 0, 0), 120);
|
||||
scene.world()
|
||||
.moveSection(base, util.vector()
|
||||
.of(12, 0, 0), 120);
|
||||
scene.world()
|
||||
.animateBogey(util.grid()
|
||||
.at(2, 2, 5), 12f, 120);
|
||||
scene.world()
|
||||
.animateBogey(util.grid()
|
||||
.at(6, 2, 5), 12f, 120);
|
||||
scene.idle(15);
|
||||
scene.world()
|
||||
.hideIndependentSection(base, null);
|
||||
scene.world()
|
||||
.hideIndependentSection(postboxE, null);
|
||||
scene.idle(40);
|
||||
scene.special()
|
||||
.hideElement(birbL, null);
|
||||
scene.world()
|
||||
.hideIndependentSection(train1L, null);
|
||||
scene.world()
|
||||
.hideIndependentSection(train2L, null);
|
||||
scene.idle(5);
|
||||
scene.overlay()
|
||||
.chaseBoundingBoxOutline(PonderPalette.BLUE, train1L, new AABB(util.grid()
|
||||
.at(1, 3, 4)).inflate(1, .75f, .5f), 280);
|
||||
scene.overlay()
|
||||
.chaseBoundingBoxOutline(PonderPalette.BLUE, train2L, new AABB(util.grid()
|
||||
.at(5, 3, 4)).inflate(1, .75f, .5f), 280);
|
||||
scene.idle(19);
|
||||
|
||||
ElementLink<WorldSectionElement> outpostL = scene.world()
|
||||
.showIndependentSection(glass, Direction.UP);
|
||||
scene.world()
|
||||
.moveSection(outpostL, util.vector()
|
||||
.of(-4, -1, -1), 0);
|
||||
scene.idle(1);
|
||||
scene.world()
|
||||
.moveSection(outpostL, util.vector()
|
||||
.of(4, 0, 0), 40);
|
||||
scene.idle(9);
|
||||
ElementLink<WorldSectionElement> stationL = scene.world()
|
||||
.showIndependentSection(stationS.add(box2S), Direction.DOWN);
|
||||
scene.world()
|
||||
.moveSection(stationL, util.vector()
|
||||
.of(-3, 0, 0), 0);
|
||||
scene.idle(1);
|
||||
scene.world()
|
||||
.moveSection(stationL, util.vector()
|
||||
.of(3, 0, 0), 30);
|
||||
scene.idle(30);
|
||||
scene.world()
|
||||
.animateTrainStation(util.grid()
|
||||
.at(1, 1, 8), true);
|
||||
scene.idle(10);
|
||||
|
||||
scene.overlay()
|
||||
.showText(90)
|
||||
.text("Just like trains, Postboxes maintain their behaviour in unloaded chunks")
|
||||
.colored(PonderPalette.BLUE)
|
||||
.attachKeyFrame()
|
||||
.independent(30);
|
||||
scene.idle(100);
|
||||
scene.effects()
|
||||
.indicateSuccess(util.grid()
|
||||
.at(3, 1, 8));
|
||||
animatePostbox(scene, util.grid()
|
||||
.at(3, 1, 8), true);
|
||||
|
||||
scene.overlay()
|
||||
.showText(90)
|
||||
.text("Packages can still be delivered from or to their inventory")
|
||||
.colored(PonderPalette.BLUE)
|
||||
.placeNearTarget()
|
||||
.pointAt(util.vector()
|
||||
.blockSurface(util.grid()
|
||||
.at(3, 1, 8), Direction.NORTH));
|
||||
scene.idle(80);
|
||||
}
|
||||
|
||||
public static void animatePostbox(CreateSceneBuilder scene, BlockPos box, boolean raise) {
|
||||
scene.world()
|
||||
.modifyBlockEntity(box, PostboxBlockEntity.class, be -> be.forceFlag = raise);
|
||||
}
|
||||
|
||||
}
|
Binary file not shown.
Loading…
Add table
Reference in a new issue