Skip to content

Commit 22c7e5b

Browse files
SquidDevSirEndii
authored andcommitted
Move chat event handling to ChatBoxPeripheral
- Removes the use of ServerComputer within the turtle upgrade (less touching of CC internals \o/). - Fixes issues where only one turtle would receive chat messages, as the lastConsumedMessage was upgrade-wide.
1 parent 42d5774 commit 22c7e5b

File tree

3 files changed

+15
-22
lines changed

3 files changed

+15
-22
lines changed

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/ChatBoxPeripheral.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import dan200.computercraft.api.lua.LuaException;
66
import dan200.computercraft.api.lua.LuaFunction;
77
import dan200.computercraft.api.lua.MethodResult;
8+
import dan200.computercraft.api.peripheral.IComputerAccess;
89
import dan200.computercraft.api.pocket.IPocketAccess;
910
import dan200.computercraft.api.turtle.ITurtleAccess;
1011
import dan200.computercraft.api.turtle.TurtleSide;
@@ -15,6 +16,7 @@
1516
import de.srendi.advancedperipherals.common.addons.computercraft.owner.TurtlePeripheralOwner;
1617
import de.srendi.advancedperipherals.common.blocks.base.PeripheralBlockEntity;
1718
import de.srendi.advancedperipherals.common.configuration.APConfig;
19+
import de.srendi.advancedperipherals.common.events.Events;
1820
import de.srendi.advancedperipherals.common.util.CoordUtil;
1921
import de.srendi.advancedperipherals.lib.peripherals.BasePeripheral;
2022
import de.srendi.advancedperipherals.lib.peripherals.IPeripheralFunction;
@@ -35,9 +37,12 @@ public class ChatBoxPeripheral extends BasePeripheral<IPeripheralOwner> {
3537

3638
public static final String PERIPHERAL_TYPE = "chatBox";
3739

40+
private long lastConsumedMessage;
41+
3842
protected ChatBoxPeripheral(IPeripheralOwner owner) {
3943
super(PERIPHERAL_TYPE, owner);
4044
owner.attachOperation(CHAT_MESSAGE);
45+
lastConsumedMessage = Events.getLastChatMessageID() - 1;
4146
}
4247

4348
public ChatBoxPeripheral(PeripheralBlockEntity<?> tileEntity) {
@@ -217,4 +222,12 @@ public final MethodResult sendMessageToPlayer(@NotNull IArguments arguments) thr
217222
return MethodResult.of(true);
218223
});
219224
}
225+
226+
public void update() {
227+
lastConsumedMessage = Events.traverseChatMessages(lastConsumedMessage, message -> {
228+
for (IComputerAccess computer : getConnectedComputers()) {
229+
computer.queueEvent("chat", message.username(), message.message(), message.uuid(), message.isHidden());
230+
}
231+
});
232+
}
220233
}

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/turtles/TurtleChatBoxUpgrade.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,17 @@
22

33
import dan200.computercraft.api.turtle.ITurtleAccess;
44
import dan200.computercraft.api.turtle.TurtleSide;
5-
import dan200.computercraft.shared.computer.core.ServerComputer;
6-
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
75
import de.srendi.advancedperipherals.AdvancedPeripherals;
86
import de.srendi.advancedperipherals.common.addons.computercraft.peripheral.ChatBoxPeripheral;
9-
import de.srendi.advancedperipherals.common.events.Events;
107
import de.srendi.advancedperipherals.lib.turtle.PeripheralTurtleUpgrade;
118
import net.minecraft.client.resources.model.ModelResourceLocation;
129
import net.minecraft.resources.ResourceLocation;
1310
import net.minecraft.world.item.ItemStack;
14-
import net.minecraft.world.level.block.entity.BlockEntity;
1511
import org.jetbrains.annotations.NotNull;
1612

1713
public class TurtleChatBoxUpgrade extends PeripheralTurtleUpgrade<ChatBoxPeripheral> {
18-
19-
private long lastConsumedMessage;
20-
2114
public TurtleChatBoxUpgrade(ResourceLocation id, ItemStack item) {
2215
super(id, item);
23-
lastConsumedMessage = Events.getLastChatMessageID() - 1;
2416
}
2517

2618
@Override
@@ -44,13 +36,6 @@ public void update(@NotNull ITurtleAccess turtle, @NotNull TurtleSide side) {
4436
if (turtle.getLevel().isClientSide)
4537
return;
4638

47-
if (turtle.getUpgrade(side) instanceof TurtleChatBoxUpgrade) {
48-
BlockEntity tile = turtle.getLevel().getBlockEntity(turtle.getPosition());
49-
if (tile instanceof TileTurtle tileTurtle) {
50-
ServerComputer computer = tileTurtle.getServerComputer();
51-
lastConsumedMessage = Events.traverseChatMessages(lastConsumedMessage, message -> computer.queueEvent("chat", new Object[]{message.username(), message.message(), message.uuid(), message.isHidden()}));
52-
53-
}
54-
}
39+
if (turtle.getPeripheral(side) instanceof ChatBoxPeripheral chatBox) chatBox.update();
5540
}
5641
}

src/main/java/de/srendi/advancedperipherals/common/blocks/blockentities/ChatBoxEntity.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import de.srendi.advancedperipherals.common.addons.computercraft.peripheral.ChatBoxPeripheral;
44
import de.srendi.advancedperipherals.common.blocks.base.PeripheralBlockEntity;
5-
import de.srendi.advancedperipherals.common.events.Events;
65
import de.srendi.advancedperipherals.common.setup.BlockEntityTypes;
76
import net.minecraft.core.BlockPos;
87
import net.minecraft.world.level.Level;
@@ -12,12 +11,8 @@
1211
import org.jetbrains.annotations.NotNull;
1312

1413
public class ChatBoxEntity extends PeripheralBlockEntity<ChatBoxPeripheral> {
15-
16-
private Long lastConsumedMessage;
17-
1814
public ChatBoxEntity(BlockPos pos, BlockState state) {
1915
super(BlockEntityTypes.CHAT_BOX.get(), pos, state);
20-
lastConsumedMessage = Events.getLastChatMessageID() - 1;
2116
}
2217

2318
@NotNull
@@ -28,6 +23,6 @@ protected ChatBoxPeripheral createPeripheral() {
2823

2924
@Override
3025
public <T extends BlockEntity> void handleTick(Level level, BlockState state, BlockEntityType<T> type) {
31-
lastConsumedMessage = Events.traverseChatMessages(lastConsumedMessage, message -> getConnectedComputers().forEach(computer -> computer.queueEvent("chat", message.username(), message.message(), message.uuid(), message.isHidden())));
26+
if (peripheral != null) peripheral.update();
3227
}
3328
}

0 commit comments

Comments
 (0)