Skip to content

Commit f47d636

Browse files
committed
🚧 Execution & card item
1 parent d33fa3e commit f47d636

60 files changed

Lines changed: 1076 additions & 503 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

common/src/main/java/org/modogthedev/superposition/block/ComputerBlock.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import net.minecraft.core.BlockPos;
44
import net.minecraft.core.Direction;
5+
import net.minecraft.nbt.CompoundTag;
6+
import net.minecraft.world.Containers;
57
import net.minecraft.world.InteractionResult;
68
import net.minecraft.world.entity.player.Player;
9+
import net.minecraft.world.item.ItemStack;
710
import net.minecraft.world.level.BlockGetter;
811
import net.minecraft.world.level.Level;
912
import net.minecraft.world.level.block.Block;
@@ -13,13 +16,14 @@
1316
import net.minecraft.world.level.block.entity.BlockEntity;
1417
import net.minecraft.world.level.block.state.BlockState;
1518
import net.minecraft.world.level.block.state.StateDefinition;
16-
import net.minecraft.world.level.block.state.properties.Property;
1719
import net.minecraft.world.phys.BlockHitResult;
18-
import org.jetbrains.annotations.NotNull;
1920
import org.jetbrains.annotations.Nullable;
21+
import org.modogthedev.superposition.blockentity.util.CardHolder;
2022
import org.modogthedev.superposition.core.SuperpositionBlockEntities;
23+
import org.modogthedev.superposition.item.CardItem;
2124
import org.modogthedev.superposition.util.IRedstoneConnectingBlock;
2225
import org.modogthedev.superposition.util.SignalActorTickingBlock;
26+
import org.modogthedev.superposition.util.SuperpositionItemHelper;
2327

2428
public class ComputerBlock extends SignalActorTickingBlock implements EntityBlock, IRedstoneConnectingBlock {
2529

@@ -54,12 +58,32 @@ public boolean canConnectRedstone(BlockState state, BlockGetter level, BlockPos
5458
}
5559

5660
@Override
57-
protected @NotNull InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {
58-
if (player.isCrouching()) {
59-
BlockEntity be = level.getBlockEntity(pos);
60-
//TODO: I borke it on purpose
61+
protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {
62+
BlockEntity blockEntity = level.getBlockEntity(pos);
63+
if (blockEntity instanceof CardHolder cardHolder) {
64+
if (cardHolder.getCard() != null) {
65+
BlockPos dropPos = pos.relative(state.getValue(FACING));
66+
ItemStack itemStack = cardHolder.getCard().getItem();
67+
((CardItem) itemStack.getItem()).putData(itemStack,cardHolder.getCard().save(new CompoundTag()));
68+
boolean creative = player.getAbilities().instabuild;
69+
if (creative) {
70+
boolean success = SuperpositionItemHelper.putItem(itemStack, player);
71+
if (!success) {
72+
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
73+
}
74+
} else if (player.getInventory().getFreeSlot() >= 0) {
75+
boolean success = SuperpositionItemHelper.putItem(itemStack, player);
76+
if (!success) {
77+
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
78+
}
79+
} else {
80+
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
81+
}
82+
cardHolder.setCard(null);
83+
return InteractionResult.SUCCESS;
84+
}
6185
}
62-
return super.useWithoutItem(state, level, pos, player, hitResult);
86+
return InteractionResult.FAIL;
6387
}
6488

6589
@Override

common/src/main/java/org/modogthedev/superposition/block/FilterBlock.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import net.minecraft.world.level.block.state.BlockState;
1414
import net.minecraft.world.level.block.state.StateDefinition;
1515
import net.minecraft.world.level.block.state.properties.IntegerProperty;
16-
import net.minecraft.world.level.block.state.properties.Property;
1716
import net.minecraft.world.phys.BlockHitResult;
1817
import net.minecraft.world.phys.shapes.BooleanOp;
1918
import net.minecraft.world.phys.shapes.CollisionContext;
@@ -28,6 +27,7 @@
2827
import org.modogthedev.superposition.screens.SignalGeneratorScreen;
2928
import org.modogthedev.superposition.util.IRedstoneConnectingBlock;
3029
import org.modogthedev.superposition.util.SignalActorTickingBlock;
30+
import org.modogthedev.superposition.util.SuperpositionItemHelper;
3131

3232
import java.util.stream.Stream;
3333

@@ -82,26 +82,38 @@ public BlockState rotate(BlockState pState, Rotation pRotation) {
8282
protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {
8383
BlockEntity blockEntity = level.getBlockEntity(pos);
8484
if (blockEntity instanceof FilterBlockEntity filterBlockEntity) {
85-
if (filterBlockEntity.getFilterType() != null) {
85+
if (filterBlockEntity.getFilter() != null) {
8686
if (player.isCrouching()) {
8787
BlockPos dropPos = pos.relative(state.getValue(FACING));
88-
ItemStack itemStack = filterBlockEntity.getFilterType().getItem();
89-
((FilterItem) itemStack.getItem()).putData(itemStack, filterBlockEntity.getFilterType());
88+
ItemStack itemStack = filterBlockEntity.getFilter().getItem();
89+
((FilterItem) itemStack.getItem()).putData(itemStack, filterBlockEntity.getFilter());
9090
boolean creative = player.getAbilities().instabuild;
91-
if (creative && !player.getInventory().contains(itemStack)) {
91+
if (creative) {
92+
if (player.getInventory().contains(itemStack)) {
93+
ItemStack foundItem = player.getInventory().getItem(player.getInventory().findSlotMatchingItem(itemStack));
94+
if (foundItem.getItem() instanceof FilterItem filterItem) {
95+
filterItem.putData(foundItem,filterBlockEntity.getFilter());
96+
}
97+
} else {
98+
if (!SuperpositionItemHelper.putItem(itemStack,player)) {
99+
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
100+
}
101+
}
102+
} else if (player.getInventory().getFreeSlot() >= 0) {
92103
player.getInventory().add(itemStack);
93-
} else if (!creative)
104+
} else {
94105
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
106+
}
95107
filterBlockEntity.setFilter(null);
96108
} else {
97109
if (level.isClientSide) {
98-
ScreenManager.openFilterScreen(filterBlockEntity.getFilterType(), pos, true);
110+
ScreenManager.openFilterScreen(filterBlockEntity.getFilter(), pos, true);
99111
return InteractionResult.SUCCESS;
100112
}
101113
}
102114
}
103115
}
104-
return super.useWithoutItem(state, level, pos, player, hitResult);
116+
return InteractionResult.SUCCESS;
105117
}
106118

107119
@Override

common/src/main/java/org/modogthedev/superposition/block/InscriberBlock.java

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package org.modogthedev.superposition.block;
22

3+
import foundry.veil.api.network.VeilPacketManager;
34
import net.minecraft.core.BlockPos;
45
import net.minecraft.core.Direction;
6+
import net.minecraft.nbt.CompoundTag;
7+
import net.minecraft.server.level.ServerPlayer;
8+
import net.minecraft.world.Clearable;
9+
import net.minecraft.world.Containers;
510
import net.minecraft.world.InteractionResult;
611
import net.minecraft.world.entity.player.Player;
12+
import net.minecraft.world.item.ItemStack;
713
import net.minecraft.world.level.BlockGetter;
814
import net.minecraft.world.level.Level;
915
import net.minecraft.world.level.block.Block;
@@ -13,17 +19,17 @@
1319
import net.minecraft.world.level.block.entity.BlockEntity;
1420
import net.minecraft.world.level.block.state.BlockState;
1521
import net.minecraft.world.level.block.state.StateDefinition;
16-
import net.minecraft.world.level.block.state.properties.Property;
1722
import net.minecraft.world.phys.BlockHitResult;
18-
import org.jetbrains.annotations.NotNull;
1923
import org.jetbrains.annotations.Nullable;
24+
import org.modogthedev.superposition.blockentity.util.CardHolder;
2025
import org.modogthedev.superposition.core.SuperpositionBlockEntities;
21-
import org.modogthedev.superposition.screens.ScreenManager;
22-
import org.modogthedev.superposition.system.cards.Card;
26+
import org.modogthedev.superposition.item.CardItem;
27+
import org.modogthedev.superposition.networking.packet.InscriberScreenS2CPacket;
2328
import org.modogthedev.superposition.util.IRedstoneConnectingBlock;
2429
import org.modogthedev.superposition.util.SignalActorTickingBlock;
30+
import org.modogthedev.superposition.util.SuperpositionItemHelper;
2531

26-
public class InscriberBlock extends SignalActorTickingBlock implements EntityBlock, IRedstoneConnectingBlock {
32+
public class InscriberBlock extends SignalActorTickingBlock implements EntityBlock, IRedstoneConnectingBlock, Clearable {
2733

2834
public InscriberBlock(Properties properties) {
2935
super(properties);
@@ -56,16 +62,50 @@ public boolean canConnectRedstone(BlockState state, BlockGetter level, BlockPos
5662
}
5763

5864
@Override
59-
protected @NotNull InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {
60-
if (level.isClientSide) {
61-
ScreenManager.openInscriber(new Card());
65+
protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {
66+
BlockEntity blockEntity = level.getBlockEntity(pos);
67+
if (blockEntity instanceof CardHolder cardHolder) {
68+
if (cardHolder.getCard() != null) {
69+
if (player.isCrouching()) {
70+
BlockPos dropPos = pos.relative(state.getValue(FACING));
71+
ItemStack itemStack = cardHolder.getCard().getItem();
72+
((CardItem) itemStack.getItem()).putData(itemStack,cardHolder.getCard().save(new CompoundTag()));
73+
boolean creative = player.getAbilities().instabuild;
74+
if (creative) {
75+
boolean success = SuperpositionItemHelper.putItem(itemStack, player);
76+
if (!success) {
77+
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
78+
}
79+
} else if (player.getInventory().getFreeSlot() >= 0) {
80+
boolean success = SuperpositionItemHelper.putItem(itemStack, player);
81+
if (!success) {
82+
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
83+
}
84+
} else {
85+
Containers.dropItemStack(level, dropPos.getX(), dropPos.getY(), dropPos.getZ(), itemStack);
86+
}
87+
cardHolder.setCard(null);
88+
return InteractionResult.SUCCESS;
89+
} else {
90+
if (!level.isClientSide) {
91+
CompoundTag tag = new CompoundTag();
92+
tag.put("card",cardHolder.getCard().save(new CompoundTag()));
93+
VeilPacketManager.player((ServerPlayer) player).sendPacket(new InscriberScreenS2CPacket(tag, pos));
94+
return InteractionResult.SUCCESS;
95+
}
96+
}
97+
}
6298
}
63-
return InteractionResult.SUCCESS;
99+
return InteractionResult.FAIL;
64100
}
65101

66102
@Override
67103
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> stateBuilder) {
68104
stateBuilder.add(FACING, SWAP_SIDES);
69105
}
70106

107+
@Override
108+
public void clearContent() {
109+
110+
}
71111
}

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

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
import net.minecraft.world.level.block.state.BlockState;
1111
import org.apache.commons.lang3.math.NumberUtils;
1212
import org.modogthedev.superposition.block.AmplifierBlock;
13+
import org.modogthedev.superposition.block.ComputerBlock;
14+
import org.modogthedev.superposition.blockentity.util.CardHolder;
1315
import org.modogthedev.superposition.core.SuperpositionBlockEntities;
1416
import org.modogthedev.superposition.networking.packet.BlockEntityModificationC2SPacket;
15-
import org.modogthedev.superposition.system.cards.Card;
16-
import org.modogthedev.superposition.system.cards.ExecutableAction;
17-
import org.modogthedev.superposition.system.cards.Node;
18-
import org.modogthedev.superposition.system.cards.actions.InputAction;
19-
import org.modogthedev.superposition.system.cards.actions.configuration.DirectionConfiguration;
17+
import org.modogthedev.superposition.system.card.Card;
18+
import org.modogthedev.superposition.system.card.Node;
19+
import org.modogthedev.superposition.system.card.actions.InputAction;
20+
import org.modogthedev.superposition.system.card.actions.configuration.DirectionConfiguration;
2021
import org.modogthedev.superposition.system.signal.Signal;
2122
import org.modogthedev.superposition.system.signal.SignalManager;
2223
import org.modogthedev.superposition.system.signal.data.EncodedData;
@@ -28,7 +29,7 @@
2829
import java.util.HashMap;
2930
import java.util.List;
3031

31-
public class ComputerBlockEntity extends SignalActorBlockEntity implements TickableBlockEntity { // TODO: It no longer works (intentional)
32+
public class ComputerBlockEntity extends SignalActorBlockEntity implements TickableBlockEntity, CardHolder { // TODO: It no longer works (intentional)
3233
private static final Logger log = LoggerFactory.getLogger(ComputerBlockEntity.class);
3334
private Card card;
3435
private boolean appendData = false;
@@ -69,7 +70,6 @@ protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries)
6970
@Override
7071
protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) {
7172
super.loadAdditional(tag, registries);
72-
card = new Card(tag);
7373
if (tag.contains("appendData")) {
7474
appendData = tag.getBoolean("appendData");
7575
}
@@ -103,18 +103,29 @@ public void tick() {
103103
addTooltip(Component.literal("No Card"));
104104
else {
105105
addTooltip(Component.literal("Card Present"));
106-
for (Node node : card.getNodes().values()) {
107-
if (node.getAction() instanceof InputAction inputAction && inputAction instanceof ExecutableAction executableAction) {
108-
if (inputAction.getConfigurations().getFirst() instanceof DirectionConfiguration directionConfiguration) {
109-
executableAction.execute(inboundSignals.get(directionConfiguration.value()), level, getBlockPos());
110-
}
111-
}
106+
}
107+
}
108+
for (Direction direction : Direction.values()) {
109+
inboundSignals.get(direction).addAll(outboundSignals.get(direction));
110+
outboundSignals.get(direction).clear();
111+
}
112+
if (card != null) {
113+
for (Node node : card.getNodes()) {
114+
if (node.getAction() instanceof InputAction inputAction && inputAction.getConfigurations().getFirst() instanceof DirectionConfiguration directionConfiguration) {
115+
node.execute(inboundSignals.get(directionConfiguration.relative(getBlockState().getValue(ComputerBlock.FACING))),level,getBlockPos());
112116
}
113117
}
114118
}
119+
for (Direction direction : Direction.values()) {
120+
inboundSignals.get(direction).clear();
121+
}
115122
super.tick();
116123
}
117124

125+
public void addOutbound(Direction face, List<Signal> signals) {
126+
outboundSignals.get(face).addAll(signals);
127+
}
128+
118129
// public Signal getOutboundSignal() {
119130
// float frequency = 1; // Put data signal
120131
// if (!getSignals().isEmpty())

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Signal modulateSignal(Signal signal, boolean updateTooltip) {
3232
return signal;
3333
}
3434

35-
public Filter getFilterType() {
35+
public Filter getFilter() {
3636
return type;
3737
}
3838

@@ -58,9 +58,9 @@ public boolean passSignal(Signal signal) {
5858
@Override
5959
public void tick() {
6060
resetTooltip();
61-
if (level.isClientSide && getFilterType() != null) {
61+
if (level.isClientSide && getFilter() != null) {
6262
addTooltip(Component.literal("Filter Status: "));
63-
addTooltip(Component.translatable(getFilterType().toString()));
63+
addTooltip(Component.translatable(getFilter().toString()));
6464
}
6565
super.tick();
6666
}

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

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,44 @@
55
import net.minecraft.nbt.CompoundTag;
66
import net.minecraft.network.chat.Component;
77
import net.minecraft.world.level.block.state.BlockState;
8+
import org.modogthedev.superposition.blockentity.util.CardHolder;
89
import org.modogthedev.superposition.core.SuperpositionBlockEntities;
10+
import org.modogthedev.superposition.system.card.Card;
911
import org.modogthedev.superposition.util.TickableBlockEntity;
1012

11-
public class InscriberBlockEntity extends SignalActorBlockEntity implements TickableBlockEntity {
13+
public class InscriberBlockEntity extends SignalActorBlockEntity implements TickableBlockEntity, CardHolder {
14+
private Card card = null;
1215

1316
public InscriberBlockEntity(BlockPos pos, BlockState state) {
1417
super(SuperpositionBlockEntities.INSCRIBER.get(), pos, state);
1518
}
1619

1720
@Override
1821
protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) {
22+
saveCard(tag);
1923
super.saveAdditional(tag, registries);
2024
}
2125

26+
public CompoundTag saveCard(CompoundTag tag) {
27+
if (card != null) {
28+
tag.put("card", card.save(new CompoundTag()));
29+
}
30+
return tag;
31+
}
32+
2233
@Override
2334
protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) {
35+
if (tag.contains("card")) {
36+
this.card = new Card(tag.getCompound("card"));
37+
}
2438
super.loadAdditional(tag, registries);
2539
}
2640

2741
@Override
2842
public void loadSyncedData(CompoundTag tag) {
43+
if (tag.contains("card")) {
44+
this.card = new Card(tag.getCompound("card"));
45+
}
2946
super.loadSyncedData(tag);
3047
}
3148

@@ -34,11 +51,24 @@ public void setupConfigTooltips() {
3451
super.setupConfigTooltips();
3552
}
3653

54+
public Card getCard() {
55+
return card;
56+
}
57+
58+
public void setCard(Card card) {
59+
this.card = card;
60+
}
61+
3762
@Override
3863
public void tick() {
3964
if (level.isClientSide) {
4065
resetTooltip();
41-
addTooltip(Component.literal("No Information"));
66+
addTooltip(Component.literal("Inscriber Status:"));
67+
if (card != null) {
68+
addTooltip(Component.literal("Card Present"));
69+
} else {
70+
addTooltip(Component.literal("No Information"));
71+
}
4272
}
4373
super.tick();
4474
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import net.minecraft.world.phys.Vec3;
88
import org.joml.Vector3d;
99
import org.modogthedev.superposition.core.SuperpositionConstants;
10-
import org.modogthedev.superposition.system.cards.Card;
11-
import org.modogthedev.superposition.system.cards.ScanAction;
10+
import org.modogthedev.superposition.system.card.Card;
11+
import org.modogthedev.superposition.system.card.ScanAction;
1212
import org.modogthedev.superposition.system.signal.Signal;
1313
import org.modogthedev.superposition.system.signal.SignalManager;
1414

0 commit comments

Comments
 (0)