Skip to content

Commit 41e6a88

Browse files
committed
Add unbreakable command
1 parent 0a690e1 commit 41e6a88

6 files changed

Lines changed: 90 additions & 3 deletions

File tree

.github/workflows/build.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ jobs:
2121
- name: Generate Paperclip Jar
2222
run: ./gradlew createMojmapPaperclipJar
2323
- name: Upload Paperclip
24-
uses: actions/upload-artifact@v6.0.0
24+
uses: actions/upload-artifact@v7.0.0
2525
with:
2626
name: DeepslateMC
2727
path: deepslateMC-server/build/libs/deepslateMC-paperclip-1.21.11-R0.1-SNAPSHOT-mojmap.jar
28+
archive: false
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
--- a/net/minecraft/server/ReloadableServerResources.java
2+
+++ b/net/minecraft/server/ReloadableServerResources.java
3+
@@ -42,6 +_,7 @@
4+
this.commands = new Commands(commandSelection, CommandBuildContext.simple(registries, enabledFeatures), true); // Paper - Brigadier Command API - use modern alias registration
5+
io.papermc.paper.command.brigadier.PaperCommands.INSTANCE.setDispatcher(this.commands, CommandBuildContext.simple(registries, enabledFeatures)); // Paper - Brigadier Command API
6+
io.papermc.paper.command.PaperCommands.registerCommands(); // Paper
7+
+ de.pascalpex.deepslatemc.commands.DeepslateCmdRegisterer.registerBrigadierCommands(); // Deepslate
8+
this.advancements = new ServerAdvancementManager(registries);
9+
this.functionLibrary = new ServerFunctionLibrary(permissions, this.commands.getDispatcher());
10+
}

deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/commands/DeepslateCmdRegisterer.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package de.pascalpex.deepslatemc.commands;
22

3+
import com.mojang.brigadier.tree.LiteralCommandNode;
4+
import io.papermc.paper.command.brigadier.CommandSourceStack;
35
import net.minecraft.server.MinecraftServer;
46
import org.bukkit.command.SimpleCommandMap;
57

8+
import java.util.List;
9+
import java.util.Set;
10+
611
public class DeepslateCmdRegisterer {
712

813
public static void registerCommands(final MinecraftServer server) {
@@ -22,4 +27,20 @@ public static void registerCommands(final MinecraftServer server) {
2227
commandMap.register("lobby", "Deepslate", new SpawnCommand("lobby"));
2328
}
2429

30+
public static void registerBrigadierCommands() {
31+
registerInternalCommand(UnbreakableCommand.create(), "Makes an item unbreakable", List.of("unbreakable"));
32+
}
33+
34+
private static void registerInternalCommand(final LiteralCommandNode<CommandSourceStack> node, final String description, final List<String> aliases) {
35+
io.papermc.paper.command.brigadier.PaperCommands.INSTANCE.registerWithFlagsInternal(
36+
null,
37+
"deepslate",
38+
"Paper",
39+
node,
40+
description,
41+
aliases,
42+
Set.of()
43+
);
44+
}
45+
2546
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package de.pascalpex.deepslatemc.commands;
2+
3+
import com.mojang.brigadier.Command;
4+
import com.mojang.brigadier.context.CommandContext;
5+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
6+
import com.mojang.brigadier.tree.LiteralCommandNode;
7+
import de.pascalpex.deepslatemc.files.MessagesEntry;
8+
import de.pascalpex.deepslatemc.files.MessagesFile;
9+
import io.papermc.paper.command.brigadier.CommandSourceStack;
10+
import io.papermc.paper.command.brigadier.Commands;
11+
import net.kyori.adventure.text.Component;
12+
import org.bukkit.Material;
13+
import org.bukkit.command.CommandSender;
14+
import org.bukkit.entity.Entity;
15+
import org.bukkit.entity.Player;
16+
import org.bukkit.inventory.ItemStack;
17+
import org.bukkit.inventory.meta.ItemMeta;
18+
19+
public class UnbreakableCommand implements Command<CommandSourceStack> {
20+
21+
public static LiteralCommandNode<CommandSourceStack> create() {
22+
return Commands.literal("unbreakable")
23+
.requires(commandSourceStack -> commandSourceStack.getSender().hasPermission("deepslate.unbreakable"))
24+
.executes(new UnbreakableCommand())
25+
.build();
26+
}
27+
28+
@Override
29+
public int run(CommandContext<CommandSourceStack> context) throws CommandSyntaxException {
30+
Component prefix = MessagesFile.getMessage(MessagesEntry.PREFIX).appendSpace();
31+
Entity executor = context.getSource().getExecutor();
32+
CommandSender sender = context.getSource().getSender();
33+
if(executor instanceof Player player) {
34+
ItemStack item = player.getInventory().getItemInMainHand();
35+
if(item.getType() != Material.AIR) {
36+
ItemMeta meta = item.getItemMeta();
37+
if(meta != null) {
38+
meta.setUnbreakable(true);
39+
item.setItemMeta(meta);
40+
41+
sender.sendMessage(prefix.append(MessagesFile.getMessage(MessagesEntry.ITEM_UNBREAKABLE)));
42+
} else {
43+
sender.sendMessage(prefix.append(MessagesFile.getMessage(MessagesEntry.NO_ITEM)));
44+
}
45+
} else {
46+
sender.sendMessage(prefix.append(MessagesFile.getMessage(MessagesEntry.NO_ITEM)));
47+
}
48+
} else {
49+
sender.sendMessage(prefix.append(MessagesFile.getMessage(MessagesEntry.ONLY_FOR_PLAYERS)));
50+
}
51+
return SINGLE_SUCCESS;
52+
}
53+
}

deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/MessagesEntry.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ public enum MessagesEntry {
1919
HELP_MESSAGE("helpMessage", List.of("&6This is a custom help message.", "&6Configure it in the &bmessages.yml &6file inside the deepslate folder.")),
2020
SPAWN_SET("spawnSet", "&aThe spawn got set successfully"),
2121
SPAWN_NOT_SET("spawnNotSet", "&cThe spawn is not set"),
22-
SPAWN_TELEPORTED("spawnTeleport", "&aYou got teleported to the spawn");
22+
SPAWN_TELEPORTED("spawnTeleport", "&aYou got teleported to the spawn"),
23+
NO_ITEM("noItem", "&cNo valid item was found"),
24+
ITEM_UNBREAKABLE("itemUnbreakable", "&aThe item is now unbreakable"),;
2325

2426
final String key;
2527
final Object defaultValue;

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ group=de.pascalpex.deepslatemc
22
version=1.21.11-R0.1-SNAPSHOT
33
mcVersion=1.21.11
44
apiVersion=1.21.11
5-
leafRef=5baa6c1684039a3c347e7065122260a89626c407
5+
leafRef=00733fc714e9e4cf32a6c2e361d5fd12611fddcd
66

77
org.gradle.configuration-cache=true
88
org.gradle.caching=true

0 commit comments

Comments
 (0)