From 957bcbc2453826dae9e5983ac21e0b5e4ca3167d Mon Sep 17 00:00:00 2001 From: Kli Kli Date: Mon, 20 Nov 2023 12:47:30 +0100 Subject: [PATCH] feat: control which nbt items send to client Closes #994 --- .../common/command/ShareNbtCommand.java | 57 +++++++++++++++++++ .../common/item/storage/SatchelItem.java | 14 ++++- .../common/item/tool/SoulGemItem.java | 18 +++++- .../occultism/registry/OccultismCommands.java | 2 + 4 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/klikli_dev/occultism/common/command/ShareNbtCommand.java diff --git a/src/main/java/com/klikli_dev/occultism/common/command/ShareNbtCommand.java b/src/main/java/com/klikli_dev/occultism/common/command/ShareNbtCommand.java new file mode 100644 index 000000000..e6e1cca6e --- /dev/null +++ b/src/main/java/com/klikli_dev/occultism/common/command/ShareNbtCommand.java @@ -0,0 +1,57 @@ +/* + * MIT License + * + * Copyright 2020 klikli-dev + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT + * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package com.klikli_dev.occultism.common.command; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.ItemStack; + +public class ShareNbtCommand implements Command { + + private static final ShareNbtCommand CMD = new ShareNbtCommand(); + + public static ArgumentBuilder register(CommandDispatcher dispatcher) { + return Commands.literal("sharenbt") + .requires(cs -> cs.hasPermission(0)) + .executes(CMD); + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException { + ServerPlayer player = context.getSource().getPlayerOrException(); + ItemStack heldItem = player.getItemInHand(InteractionHand.MAIN_HAND); + + Component nbtText = heldItem.isEmpty() || !heldItem.hasTag() ? Component.literal("{}") : NbtUtils.toPrettyComponent(heldItem.getShareTag()); + context.getSource().sendSuccess(() -> nbtText, false); + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/com/klikli_dev/occultism/common/item/storage/SatchelItem.java b/src/main/java/com/klikli_dev/occultism/common/item/storage/SatchelItem.java index dd816d328..4a63f2605 100644 --- a/src/main/java/com/klikli_dev/occultism/common/item/storage/SatchelItem.java +++ b/src/main/java/com/klikli_dev/occultism/common/item/storage/SatchelItem.java @@ -26,6 +26,7 @@ import com.klikli_dev.occultism.common.container.storage.SatchelInventory; import com.klikli_dev.occultism.util.ItemNBTUtil; import com.klikli_dev.occultism.util.TextUtil; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.*; @@ -35,8 +36,8 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import net.minecraftforge.network.NetworkHooks; +import org.jetbrains.annotations.Nullable; -import javax.annotation.Nullable; import java.util.List; public class SatchelItem extends Item { @@ -73,6 +74,17 @@ public void appendHoverText(ItemStack stack, @Nullable Level worldIn, List !key.equals("id")).toArray(String[]::new); + Arrays.stream(toRemove).forEach(entityData::remove); + } + } + return tag; + } } diff --git a/src/main/java/com/klikli_dev/occultism/registry/OccultismCommands.java b/src/main/java/com/klikli_dev/occultism/registry/OccultismCommands.java index 2ec17bf8e..adb93b54f 100644 --- a/src/main/java/com/klikli_dev/occultism/registry/OccultismCommands.java +++ b/src/main/java/com/klikli_dev/occultism/registry/OccultismCommands.java @@ -25,6 +25,7 @@ import com.klikli_dev.occultism.Occultism; import com.klikli_dev.occultism.common.command.DebugAICommand; import com.klikli_dev.occultism.common.command.NbtCommand; +import com.klikli_dev.occultism.common.command.ShareNbtCommand; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.tree.LiteralCommandNode; import net.minecraft.commands.CommandSourceStack; @@ -44,6 +45,7 @@ public static void register(CommandDispatcher dispatcher) { LiteralCommandNode occultismCommand = dispatcher.register( Commands.literal(Occultism.MODID) .then(NbtCommand.register(dispatcher)) + .then(ShareNbtCommand.register(dispatcher)) .then(debugCommand) );