From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Allink Date: Fri, 2 Jun 2023 20:55:18 +0100 Subject: [PATCH] Implement command block events diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java index c99fc118013cb3d4043638e2001a8297e79ddf9c..cdaa81e1f2167b29ec01cc25e51a8400deb533d2 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.BaseCommandBlock; import net.minecraft.world.level.Level; public class ServerboundSetCommandMinecartPacket implements Packet { - private final int entity; + public final int entity; // Scissors - private -> public private final String command; private final boolean trackOutput; diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java index 52fafac90771554661ca4e0640fc1c7ca811bf6b..22e9ad5a55d43c91528c302c02725acb72bc1199 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1,6 +1,8 @@ package net.minecraft.server.network; import me.totalfreedom.scissors.ScissorsConfig; // Scissors +import me.totalfreedom.scissors.event.block.CommandBlockPlayerEditEvent; // Scissors +import me.totalfreedom.scissors.event.block.CommandMinecartPlayerEditEvent; // Scissors import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors import com.google.common.collect.Lists; import com.google.common.primitives.Floats; @@ -159,6 +161,7 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.ProfilePublicKey; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.MinecartCommandBlock; // Scissors import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.Item; @@ -187,6 +190,8 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.bukkit.craftbukkit.block.CraftCommandBlock; // Scissors +import org.bukkit.craftbukkit.entity.CraftMinecartCommand; // Scissors import org.slf4j.Logger; // CraftBukkit start @@ -1002,6 +1007,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.player.level().getChunkAt(blockposition).setBlockEntity(tileentity); } + // Scissors start + CommandBlockPlayerEditEvent event = new CommandBlockPlayerEditEvent(this.getCraftPlayer(), commandblocklistenerabstract.getCommand(), s, new CraftCommandBlock(this.player.level().getWorld(), tileentitycommand)); + + if (!event.callEvent()) { + return; + } + + s = event.getNewCommand(); + // Scissors end + commandblocklistenerabstract.setCommand(s); commandblocklistenerabstract.setTrackOutput(flag); if (!flag) { @@ -1033,7 +1048,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic BaseCommandBlock commandblocklistenerabstract = packet.getCommandBlock(this.player.level()); if (commandblocklistenerabstract != null) { - commandblocklistenerabstract.setCommand(packet.getCommand()); + // Scissors start - Implement command block events + String command = packet.getCommand(); + CommandMinecartPlayerEditEvent event = new CommandMinecartPlayerEditEvent(this.getCraftPlayer(), commandblocklistenerabstract.getCommand(), command, new CraftMinecartCommand(this.cserver, (MinecartCommandBlock) this.player.level().getEntity(packet.entity))); + + if (!event.callEvent()) { + return; + } + + command = event.getNewCommand(); + commandblocklistenerabstract.setCommand(command); + + // Scissors end commandblocklistenerabstract.setTrackOutput(packet.isTrackOutput()); if (!packet.isTrackOutput()) { commandblocklistenerabstract.setLastOutput((Component) null);