Skip to content

Commit

Permalink
feat: control which nbt items send to client
Browse files Browse the repository at this point in the history
Closes #994
  • Loading branch information
klikli-dev committed Nov 20, 2023
1 parent 0f13a63 commit 957bcbc
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -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<CommandSourceStack> {

private static final ShareNbtCommand CMD = new ShareNbtCommand();

public static ArgumentBuilder<CommandSourceStack, ?> register(CommandDispatcher<CommandSourceStack> dispatcher) {
return Commands.literal("sharenbt")
.requires(cs -> cs.hasPermission(0))
.executes(CMD);
}

@Override
public int run(CommandContext<CommandSourceStack> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -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 {
Expand Down Expand Up @@ -73,6 +74,17 @@ public void appendHoverText(ItemStack stack, @Nullable Level worldIn, List<Compo
TextUtil.formatDemonName(ItemNBTUtil.getBoundSpiritName(stack))));
}

@Override
public @Nullable CompoundTag getShareTag(ItemStack stack) {
var tag = super.getShareTag(stack);
if (tag != null) {
tag = tag.copy();
tag.remove("Items");
}
return tag;
}


public Container getInventory(ServerPlayer player, ItemStack stack) {
return new SatchelInventory(stack, SatchelContainer.SATCHEL_SIZE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

package com.klikli_dev.occultism.common.item.tool;

import com.klikli_dev.occultism.Occultism;
import com.klikli_dev.occultism.registry.OccultismTags;
import com.klikli_dev.occultism.util.EntityUtil;
import net.minecraft.core.BlockPos;
Expand All @@ -40,8 +39,9 @@
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;

import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.List;

public class SoulGemItem extends Item {
Expand Down Expand Up @@ -174,4 +174,18 @@ public void appendHoverText(ItemStack stack, @Nullable Level worldIn, List<Compo
}
}

@Override
public @Nullable CompoundTag getShareTag(ItemStack stack) {
var tag = super.getShareTag(stack);
if (tag != null) {
tag = tag.copy();
//remove all data that we do not need for client side display
if (tag.contains("entityData")) {
var entityData = tag.getCompound("entityData");
var toRemove = entityData.getAllKeys().stream().filter(key -> !key.equals("id")).toArray(String[]::new);
Arrays.stream(toRemove).forEach(entityData::remove);
}
}
return tag;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -44,6 +45,7 @@ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
LiteralCommandNode<CommandSourceStack> occultismCommand = dispatcher.register(
Commands.literal(Occultism.MODID)
.then(NbtCommand.register(dispatcher))
.then(ShareNbtCommand.register(dispatcher))
.then(debugCommand)
);

Expand Down

0 comments on commit 957bcbc

Please sign in to comment.