mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 07:48:53 +01:00
More CommandBlock API (#5746)
This commit is contained in:
parent
3b2b835240
commit
425edfa5d7
4 changed files with 260 additions and 0 deletions
|
@ -1103,6 +1103,49 @@ index dd0fef9155077ce6df7bdadc9e4152008f700a3b..92e8b0b1ccebdc2646337114793ea9f3
|
||||||
/**
|
/**
|
||||||
* Returns a list of entities within a bounding box centered around a
|
* Returns a list of entities within a bounding box centered around a
|
||||||
* Location.
|
* Location.
|
||||||
|
diff --git a/src/main/java/org/bukkit/block/CommandBlock.java b/src/main/java/org/bukkit/block/CommandBlock.java
|
||||||
|
index 372c0bd5a4d7800a11c24c95e39fe376a96232bf..73dce588d1f7a5048300073bf8c2b14d6da1e857 100644
|
||||||
|
--- a/src/main/java/org/bukkit/block/CommandBlock.java
|
||||||
|
+++ b/src/main/java/org/bukkit/block/CommandBlock.java
|
||||||
|
@@ -33,7 +33,9 @@ public interface CommandBlock extends TileState {
|
||||||
|
* by default is "@".
|
||||||
|
*
|
||||||
|
* @return Name of this CommandBlock.
|
||||||
|
+ * @deprecated in favour of {@link #name()}
|
||||||
|
*/
|
||||||
|
+ @Deprecated // Paper
|
||||||
|
@NotNull
|
||||||
|
public String getName();
|
||||||
|
|
||||||
|
@@ -43,6 +45,28 @@ public interface CommandBlock extends TileState {
|
||||||
|
* same as setting it to "@".
|
||||||
|
*
|
||||||
|
* @param name New name for this CommandBlock.
|
||||||
|
+ * @deprecated in favour of {@link #name(net.kyori.adventure.text.Component)}
|
||||||
|
*/
|
||||||
|
+ @Deprecated // Paper
|
||||||
|
public void setName(@Nullable String name);
|
||||||
|
+
|
||||||
|
+ // Paper start
|
||||||
|
+ /**
|
||||||
|
+ * Gets the name of this CommandBlock. The name is used with commands
|
||||||
|
+ * that this CommandBlock executes. This name will never be null, and
|
||||||
|
+ * by default is a {@link net.kyori.adventure.text.TextComponent} containing {@code @}.
|
||||||
|
+ *
|
||||||
|
+ * @return Name of this CommandBlock.
|
||||||
|
+ */
|
||||||
|
+ public @NotNull net.kyori.adventure.text.Component name();
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the name of this CommandBlock. The name is used with commands
|
||||||
|
+ * that this CommandBlock executes. Setting the name to null is the
|
||||||
|
+ * same as setting it to a {@link net.kyori.adventure.text.TextComponent} containing {@code @}.
|
||||||
|
+ *
|
||||||
|
+ * @param name New name for this CommandBlock.
|
||||||
|
+ */
|
||||||
|
+ public void name(@Nullable net.kyori.adventure.text.Component name);
|
||||||
|
+ // Paper end
|
||||||
|
}
|
||||||
diff --git a/src/main/java/org/bukkit/block/Sign.java b/src/main/java/org/bukkit/block/Sign.java
|
diff --git a/src/main/java/org/bukkit/block/Sign.java b/src/main/java/org/bukkit/block/Sign.java
|
||||||
index ab6b0ec328e94bf65a0dafd0403e5ee3b870296c..c8d37184d8e882a4084a1bfef85faa330588600b 100644
|
index ab6b0ec328e94bf65a0dafd0403e5ee3b870296c..c8d37184d8e882a4084a1bfef85faa330588600b 100644
|
||||||
--- a/src/main/java/org/bukkit/block/Sign.java
|
--- a/src/main/java/org/bukkit/block/Sign.java
|
||||||
|
|
96
patches/api/0333-More-CommandBlock-API.patch
Normal file
96
patches/api/0333-More-CommandBlock-API.patch
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||||
|
Date: Fri, 28 May 2021 21:47:39 -0700
|
||||||
|
Subject: [PATCH] More CommandBlock API
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/io/papermc/paper/command/CommandBlockHolder.java b/src/main/java/io/papermc/paper/command/CommandBlockHolder.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..09e57f495e3cbf3c6f434d12ab34830862faeb88
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/io/papermc/paper/command/CommandBlockHolder.java
|
||||||
|
@@ -0,0 +1,58 @@
|
||||||
|
+package io.papermc.paper.command;
|
||||||
|
+
|
||||||
|
+import net.kyori.adventure.text.Component;
|
||||||
|
+import org.jetbrains.annotations.NotNull;
|
||||||
|
+import org.jetbrains.annotations.Nullable;
|
||||||
|
+
|
||||||
|
+public interface CommandBlockHolder {
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the command that this CommandBlock will run when powered.
|
||||||
|
+ * This will never return null. If the CommandBlock does not have a
|
||||||
|
+ * command, an empty String will be returned instead.
|
||||||
|
+ *
|
||||||
|
+ * @return Command that this CommandBlock will run when activated.
|
||||||
|
+ */
|
||||||
|
+ @NotNull
|
||||||
|
+ String getCommand();
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the command that this CommandBlock will run when powered.
|
||||||
|
+ * Setting the command to null is the same as setting it to an empty
|
||||||
|
+ * String.
|
||||||
|
+ *
|
||||||
|
+ * @param command Command that this CommandBlock will run when activated.
|
||||||
|
+ */
|
||||||
|
+ void setCommand(@Nullable String command);
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the last output from this command block.
|
||||||
|
+ *
|
||||||
|
+ * @return the last output
|
||||||
|
+ */
|
||||||
|
+ @NotNull
|
||||||
|
+ Component lastOutput();
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the last output from this command block.
|
||||||
|
+ *
|
||||||
|
+ * @param lastOutput the last output
|
||||||
|
+ */
|
||||||
|
+ void lastOutput(@Nullable Component lastOutput);
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the success count from this command block.
|
||||||
|
+ * @see <a href="https://minecraft.fandom.com/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
|
||||||
|
+ *
|
||||||
|
+ * @return the success count
|
||||||
|
+ */
|
||||||
|
+ int getSuccessCount();
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the success count from this command block.
|
||||||
|
+ * @see <a href="https://minecraft.fandom.com/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
|
||||||
|
+ *
|
||||||
|
+ * @param successCount the success count
|
||||||
|
+ */
|
||||||
|
+ void setSuccessCount(int successCount);
|
||||||
|
+}
|
||||||
|
diff --git a/src/main/java/org/bukkit/block/CommandBlock.java b/src/main/java/org/bukkit/block/CommandBlock.java
|
||||||
|
index 73dce588d1f7a5048300073bf8c2b14d6da1e857..d63da691fb8cfa04bb699adb2eb55278e8b76200 100644
|
||||||
|
--- a/src/main/java/org/bukkit/block/CommandBlock.java
|
||||||
|
+++ b/src/main/java/org/bukkit/block/CommandBlock.java
|
||||||
|
@@ -6,7 +6,7 @@ import org.jetbrains.annotations.Nullable;
|
||||||
|
/**
|
||||||
|
* Represents a captured state of a command block.
|
||||||
|
*/
|
||||||
|
-public interface CommandBlock extends TileState {
|
||||||
|
+public interface CommandBlock extends TileState, io.papermc.paper.command.CommandBlockHolder { // Paper
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the command that this CommandBlock will run when powered.
|
||||||
|
diff --git a/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java b/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java
|
||||||
|
index 91cab8b13d5bba34007f124838b32a1df58c5ac7..6a6021ad3a0e6aaf51f5144fa126e81bada9cfcf 100644
|
||||||
|
--- a/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java
|
||||||
|
+++ b/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java
|
||||||
|
@@ -4,7 +4,7 @@ import org.bukkit.entity.Minecart;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
-public interface CommandMinecart extends Minecart {
|
||||||
|
+public interface CommandMinecart extends Minecart, io.papermc.paper.command.CommandBlockHolder { // Paper
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the command that this CommandMinecart will run when activated.
|
|
@ -1926,6 +1926,27 @@ index 449f42b324e31e1a28562b1fe99416f8925f5204..c35e1964a295032623cf9cb6ade84e69
|
||||||
@Override
|
@Override
|
||||||
public String getCustomName() {
|
public String getCustomName() {
|
||||||
BeaconBlockEntity beacon = this.getSnapshot();
|
BeaconBlockEntity beacon = this.getSnapshot();
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
|
||||||
|
index 94ebc38a7f7bf9b08f4469f0c239fe8774249faf..c7af598a039f0d41aa4d1943714ed06986828c2a 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
|
||||||
|
@@ -35,4 +35,16 @@ public class CraftCommandBlock extends CraftBlockEntityState<CommandBlockEntity>
|
||||||
|
public void setName(String name) {
|
||||||
|
getSnapshot().getCommandBlock().setName(CraftChatMessage.fromStringOrNull(name != null ? name : "@"));
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ // Paper start
|
||||||
|
+ @Override
|
||||||
|
+ public net.kyori.adventure.text.Component name() {
|
||||||
|
+ return io.papermc.paper.adventure.PaperAdventure.asAdventure(getSnapshot().getCommandBlock().getName());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void name(net.kyori.adventure.text.Component name) {
|
||||||
|
+ getSnapshot().getCommandBlock().setName(name == null ? new net.minecraft.network.chat.TextComponent("@") : io.papermc.paper.adventure.PaperAdventure.asVanilla(name));
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
}
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/block/CraftContainer.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/block/CraftContainer.java
|
||||||
index 16a0f6e390a7415635e3573c1f79f7d78e5ef859..b1edc96d7e0444e72b79f190982de1d1bb5987f3 100644
|
index 16a0f6e390a7415635e3573c1f79f7d78e5ef859..b1edc96d7e0444e72b79f190982de1d1bb5987f3 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftContainer.java
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftContainer.java
|
||||||
|
|
100
patches/server/0810-More-CommmandBlock-API.patch
Normal file
100
patches/server/0810-More-CommmandBlock-API.patch
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||||
|
Date: Thu, 23 Sep 2021 10:40:09 -0700
|
||||||
|
Subject: [PATCH] More CommmandBlock API
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/io/papermc/paper/commands/PaperCommandBlockHolder.java b/src/main/java/io/papermc/paper/commands/PaperCommandBlockHolder.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..0b42306f17bf8850a13a51067c2d19e7583187e5
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/io/papermc/paper/commands/PaperCommandBlockHolder.java
|
||||||
|
@@ -0,0 +1,33 @@
|
||||||
|
+package io.papermc.paper.commands;
|
||||||
|
+
|
||||||
|
+import io.papermc.paper.adventure.PaperAdventure;
|
||||||
|
+import io.papermc.paper.command.CommandBlockHolder;
|
||||||
|
+import net.kyori.adventure.text.Component;
|
||||||
|
+import net.minecraft.world.level.BaseCommandBlock;
|
||||||
|
+import org.jetbrains.annotations.NotNull;
|
||||||
|
+import org.jetbrains.annotations.Nullable;
|
||||||
|
+
|
||||||
|
+public interface PaperCommandBlockHolder extends CommandBlockHolder {
|
||||||
|
+
|
||||||
|
+ BaseCommandBlock getCommandBlockHandle();
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ default @NotNull Component lastOutput() {
|
||||||
|
+ return PaperAdventure.asAdventure(getCommandBlockHandle().getLastOutput());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ default void lastOutput(@Nullable Component lastOutput) {
|
||||||
|
+ getCommandBlockHandle().setLastOutput(PaperAdventure.asVanilla(lastOutput));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ default int getSuccessCount() {
|
||||||
|
+ return getCommandBlockHandle().getSuccessCount();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ default void setSuccessCount(int successCount) {
|
||||||
|
+ getCommandBlockHandle().setSuccessCount(successCount);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
|
||||||
|
index c7af598a039f0d41aa4d1943714ed06986828c2a..ed10b13b29880459d68b6a7a60a5a9e1e1107d71 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
|
||||||
|
@@ -6,7 +6,7 @@ import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.CommandBlock;
|
||||||
|
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||||
|
|
||||||
|
-public class CraftCommandBlock extends CraftBlockEntityState<CommandBlockEntity> implements CommandBlock {
|
||||||
|
+public class CraftCommandBlock extends CraftBlockEntityState<CommandBlockEntity> implements CommandBlock, io.papermc.paper.commands.PaperCommandBlockHolder {
|
||||||
|
|
||||||
|
public CraftCommandBlock(Block block) {
|
||||||
|
super(block, CommandBlockEntity.class);
|
||||||
|
@@ -46,5 +46,10 @@ public class CraftCommandBlock extends CraftBlockEntityState<CommandBlockEntity>
|
||||||
|
public void name(net.kyori.adventure.text.Component name) {
|
||||||
|
getSnapshot().getCommandBlock().setName(name == null ? new net.minecraft.network.chat.TextComponent("@") : io.papermc.paper.adventure.PaperAdventure.asVanilla(name));
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public net.minecraft.world.level.BaseCommandBlock getCommandBlockHandle() {
|
||||||
|
+ return getSnapshot().getCommandBlock();
|
||||||
|
+ }
|
||||||
|
// Paper end
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
||||||
|
index f9863e138994f6c7a7975a852f106faa96d52315..b709a1d909c189f60d0c3aa97b4b96623e7c1db0 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
||||||
|
@@ -14,7 +14,7 @@ import org.bukkit.permissions.PermissionAttachment;
|
||||||
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
-public class CraftMinecartCommand extends CraftMinecart implements CommandMinecart {
|
||||||
|
+public class CraftMinecartCommand extends CraftMinecart implements CommandMinecart, io.papermc.paper.commands.PaperCommandBlockHolder {
|
||||||
|
private final PermissibleBase perm = new PermissibleBase(this);
|
||||||
|
|
||||||
|
public CraftMinecartCommand(CraftServer server, MinecartCommandBlock entity) {
|
||||||
|
@@ -70,6 +70,17 @@ public class CraftMinecartCommand extends CraftMinecart implements CommandMineca
|
||||||
|
public net.kyori.adventure.text.@org.jetbrains.annotations.NotNull Component name() {
|
||||||
|
return io.papermc.paper.adventure.PaperAdventure.asAdventure(this.getHandle().getCommandBlock().getName());
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public net.minecraft.world.level.BaseCommandBlock getCommandBlockHandle() {
|
||||||
|
+ return getHandle().getCommandBlock();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void lastOutput(net.kyori.adventure.text.Component lastOutput) {
|
||||||
|
+ io.papermc.paper.commands.PaperCommandBlockHolder.super.lastOutput(lastOutput);
|
||||||
|
+ getCommandBlockHandle().onUpdated();
|
||||||
|
+ }
|
||||||
|
// Paper end
|
||||||
|
|
||||||
|
@Override
|
Loading…
Reference in a new issue