Skip to content

Commit f178d66

Browse files
committed
✨ New Action and Behaviors
1 parent 903e734 commit f178d66

14 files changed

Lines changed: 149 additions & 16 deletions

File tree

common/src/main/java/org/modogthedev/superposition/blockentity/AnalyserBlockEntity.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,45 @@
1212
import org.modogthedev.superposition.core.SuperpositionTags;
1313
import org.modogthedev.superposition.system.behavior.Behavior;
1414
import org.modogthedev.superposition.system.behavior.types.ScanBehavior;
15+
import org.modogthedev.superposition.system.cable.PortConfig;
1516
import org.modogthedev.superposition.system.signal.Signal;
17+
import org.modogthedev.superposition.system.signal.data.EncodedData;
1618
import org.modogthedev.superposition.util.SignalActorTickingBlock;
1719

1820
import java.util.List;
21+
import java.util.Objects;
1922

2023
public class AnalyserBlockEntity extends PeripheralBlockEntity {
2124
public float distance = 0;
2225
public int startDistance = 0;
2326
public int endDistance = 0;
2427
private Signal signal;
28+
private String path = "";
2529

2630
public AnalyserBlockEntity(BlockPos pos, BlockState state) {
2731
super(SuperpositionBlockEntities.ANALYSER.get(), pos, state);
2832
signal = new Signal(new Vector3d(), getLevel(), 1f, 1f, 1f);
2933
}
3034

35+
@Override
36+
public PortConfig.Builder buildPorts(PortConfig.Builder builder) {
37+
return super.buildPorts(builder).addInputPort("narrowPath");
38+
}
39+
40+
@Override
41+
public boolean putPortSignals(String port, List<Signal> signals) {
42+
if (Objects.equals(port, "narrowPath")) {
43+
Signal signal = signals.getLast();
44+
if (signal != null && signal.getEncodedData() != null) {
45+
String path = signal.getEncodedData().stringValue();
46+
this.path = path;
47+
}
48+
49+
return true;
50+
}
51+
return super.putPortSignals(port, signals);
52+
}
53+
3154
@Override
3255
public void tick() {
3356
resetTooltip();
@@ -44,7 +67,17 @@ public void tick() {
4467
}
4568
}
4669
signal.encode(tag);
70+
String[] split = path.split("/");
71+
for (String pathTarget : split) {
72+
try {
73+
EncodedData<?> data = signal.getEncodedData().getTagKey(pathTarget);
74+
if (!Objects.equals(data.stringValue(), "null")) {
75+
signal.setEncodedData(data);
76+
}
77+
} catch (Exception ignored) {}
78+
}
4779
putPortSignals(outPortName(), List.of(signal));
80+
path = "";
4881
super.tick();
4982
}
5083

common/src/main/java/org/modogthedev/superposition/blockentity/ComputerBlockEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ public boolean putPortSignals(String port, List<Signal> signals) {
188188
if (card != null) {
189189
card.load(tag);
190190
rebuild(card);
191+
markDirty();
191192
}
192193
return true;
193194
}

common/src/main/java/org/modogthedev/superposition/client/renderer/ui/SuperpositionUITooltipRenderer.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,7 @@ public static void charTyped(long windowPointer, char key, int modifiers) {
143143
editableTooltip.replaceText(editableTooltip.getText().substring(0, cursorPos) + (key) + editableTooltip.getText().substring(Math.min(cursorPos, editableTooltip.getText().length())));
144144
}
145145
CompoundTag tag = new CompoundTag();
146-
tag.putInt("modifiedPosition",cursorPos);
147-
tag.putString("changedChar", String.valueOf(key));
148-
tag.putInt("stringLength",editableTooltip.getText().length());
146+
tag.putString("output",editableTooltip.getText());
149147
VeilPacketManager.server().sendPacket(new BlockEntityModificationC2SPacket(tag, editPos));
150148
cursorPos++;
151149
cursorPos = Mth.clamp(cursorPos, -1, editableTooltip.getText().length());

common/src/main/java/org/modogthedev/superposition/core/SuperpositionActions.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public class SuperpositionActions {
6161
Component.literal("Duplicates a signal list into two copies"),
6262
Action.Type.MODIFY
6363
)));
64+
public static final RegistryObject<Action> NARROW = registerAction("narrow", () -> new NarrowAction(Superposition.id("narrow"), new Action.Information(
65+
Component.literal("Narrow"),
66+
Component.literal("Takes a list of signals and returns only the first one"),
67+
Action.Type.MODIFY
68+
)));
6469
public static final RegistryObject<Action> OPTIONAL = registerAction("optional", () -> new OptionalAction(Superposition.id("optional"), new Action.Information(
6570
Component.literal("Optional"),
6671
Component.literal("Returns the first signal if, and only if, the second signals boolean value is true"),
@@ -71,7 +76,7 @@ public class SuperpositionActions {
7176
Component.literal("Retrieves the amplitude of the signal"),
7277
Action.Type.MODIFY
7378
)));
74-
public static final RegistryObject<Action> FREQUENCY = registerAction("frequency", () -> new FrequencyCard(Superposition.id("frequency"), new Action.Information(
79+
public static final RegistryObject<Action> FREQUENCY = registerAction("frequency", () -> new FrequencyAction(Superposition.id("frequency"), new Action.Information(
7580
Component.literal("Frequency"),
7681
Component.literal("Retrieves the frequency of the signal"),
7782
Action.Type.MODIFY
@@ -86,7 +91,7 @@ public class SuperpositionActions {
8691
Component.literal("Merges tags together"),
8792
Action.Type.MODIFY
8893
)));
89-
public static final RegistryObject<Action> RETRIEVE = registerAction("retrieve", () -> new RetriveCard(Superposition.id("retrieve"), new Action.Information(
94+
public static final RegistryObject<Action> RETRIEVE = registerAction("retrieve", () -> new RetriveAction(Superposition.id("retrieve"), new Action.Information(
9095
Component.literal("Retrieve"),
9196
Component.literal("Retrieve the contents of a tag using the second signal as a tag"),
9297
Action.Type.MODIFY
@@ -101,7 +106,7 @@ public class SuperpositionActions {
101106
Component.literal("Returns the program stored inside the computer"),
102107
Action.Type.OUTPUT
103108
)));
104-
public static final RegistryObject<Action> SUBSTRING = registerAction("substring", () -> new SubstringCard(Superposition.id("substring"), new Action.Information(
109+
public static final RegistryObject<Action> SUBSTRING = registerAction("substring", () -> new SubstringAction(Superposition.id("substring"), new Action.Information(
105110
Component.literal("Substring"),
106111
Component.literal("Cuts a string at the the number encoded the second signal, if the second signal is negative it will cut from the front instead"),
107112
Action.Type.MODIFY

common/src/main/java/org/modogthedev/superposition/core/SuperpositionBehaviors.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class SuperpositionBehaviors {
2727
public static final RegistryObject<Behavior> DISTANCE = registerBehavior("distance", (resourceLocation -> () -> new DistanceBehavior(resourceLocation)));
2828
public static final RegistryObject<Behavior> REDSTONE = registerBehavior("redstone", (resourceLocation -> () -> new RedstoneBehavior(resourceLocation)));
2929
public static final RegistryObject<Behavior> SIGN = registerBehavior("sign", (resourceLocation -> () -> new SignBehavior(resourceLocation)));
30+
public static final RegistryObject<Behavior> FURNACE = registerBehavior("furnace", (resourceLocation -> () -> new FurnaceBehavior(resourceLocation)));
3031

3132
public static RegistryObject<Behavior> registerBehavior(String name, Function<ResourceLocation, Supplier<Behavior>> resourceLocationFunction) {
3233
behaviors.add(resourceLocationFunction.apply(Superposition.id(name)).get());
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.modogthedev.superposition.mixin.behavior;
2+
3+
import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.gen.Accessor;
6+
7+
@Mixin(AbstractFurnaceBlockEntity.class)
8+
public interface FurnaceBehaviorAccessor {
9+
@Accessor
10+
int litTime();
11+
@Accessor
12+
int litDuration();
13+
@Accessor
14+
int cookingProgress();
15+
}

common/src/main/java/org/modogthedev/superposition/system/behavior/Behavior.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.modogthedev.superposition.system.behavior;
22

33
import net.minecraft.resources.ResourceLocation;
4-
import org.modogthedev.superposition.blockentity.AnalyserBlockEntity;
5-
import org.modogthedev.superposition.system.signal.Signal;
64

75
public abstract class Behavior {
86
private ResourceLocation selfReference;
@@ -15,4 +13,7 @@ public ResourceLocation getSelfReference() {
1513
return selfReference;
1614
}
1715

16+
public String getPath() {
17+
return getSelfReference().getPath();
18+
}
1819
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.modogthedev.superposition.system.behavior.behaviors;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.nbt.CompoundTag;
5+
import net.minecraft.resources.ResourceLocation;
6+
import net.minecraft.world.level.Level;
7+
import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity;
8+
import net.minecraft.world.level.block.entity.BlockEntity;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
import org.modogthedev.superposition.blockentity.AnalyserBlockEntity;
11+
import org.modogthedev.superposition.mixin.behavior.FurnaceBehaviorAccessor;
12+
import org.modogthedev.superposition.system.behavior.Behavior;
13+
import org.modogthedev.superposition.system.behavior.types.ScanBehavior;
14+
15+
public class FurnaceBehavior extends Behavior implements ScanBehavior {
16+
public FurnaceBehavior(ResourceLocation selfReference) {
17+
super(selfReference);
18+
}
19+
20+
@Override
21+
public void scan(CompoundTag outputTag, AnalyserBlockEntity analyserBlockEntity, Level level, BlockPos pos, BlockState state) {
22+
BlockEntity blockEntity1 = level.getBlockEntity(pos);
23+
if (blockEntity1 instanceof AbstractFurnaceBlockEntity furnaceBlockEntity) {
24+
FurnaceBehaviorAccessor furnace = (FurnaceBehaviorAccessor) furnaceBlockEntity;
25+
CompoundTag tag = new CompoundTag();
26+
tag.putInt("litTime",furnace.litTime());
27+
tag.putInt("litDuration",furnace.litDuration());
28+
tag.putInt("cookingProgress",furnace.cookingProgress());
29+
30+
outputTag.put(getPath(),tag);
31+
}
32+
}
33+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.modogthedev.superposition.system.card.actions;
2+
3+
import net.minecraft.resources.ResourceLocation;
4+
import org.modogthedev.superposition.system.card.Action;
5+
import org.modogthedev.superposition.system.card.BiModifyAction;
6+
import org.modogthedev.superposition.system.signal.Signal;
7+
8+
public class ArithmeticAction extends Action implements BiModifyAction {
9+
10+
public ArithmeticAction(ResourceLocation action, Information info) {
11+
super(action, info);
12+
}
13+
14+
@Override
15+
public Signal modify(Signal signal, Signal periphrealSignal) {
16+
if (signal != null && periphrealSignal != null && periphrealSignal.getEncodedData() != null) {
17+
signal.setEncodedData(periphrealSignal.getEncodedData());
18+
}
19+
return signal;
20+
}
21+
}

common/src/main/java/org/modogthedev/superposition/system/card/actions/FrequencyCard.java renamed to common/src/main/java/org/modogthedev/superposition/system/card/actions/FrequencyAction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import org.modogthedev.superposition.system.card.MonoModifyAction;
66
import org.modogthedev.superposition.system.signal.Signal;
77

8-
public class FrequencyCard extends Action implements MonoModifyAction {
8+
public class FrequencyAction extends Action implements MonoModifyAction {
99

10-
public FrequencyCard(ResourceLocation action, Information info) {
10+
public FrequencyAction(ResourceLocation action, Information info) {
1111
super(action, info);
1212
}
1313

0 commit comments

Comments
 (0)