Files
Minions/src/main/java/io/github/skippyall/minions/minion/MinionItem.java
T
2026-01-26 00:03:57 +01:00

107 lines
3.9 KiB
Java

package io.github.skippyall.minions.minion;
import eu.pb4.polymer.core.api.item.PolymerItem;
import eu.pb4.polymer.core.api.item.PolymerItemUtils;
import io.github.skippyall.minions.gui.MinionLookGui;
import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer;
import io.github.skippyall.minions.registration.MinionComponentTypes;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.TooltipDisplayComponent;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.Items;
import net.minecraft.item.tooltip.TooltipType;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Vec2f;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
import xyz.nucleoid.packettweaker.PacketContext;
import java.util.function.Consumer;
public class MinionItem extends Item implements PolymerItem {
public MinionItem(Settings settings) {
super(settings);
}
@Override
public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context) {
return null;
}
@Override
public Item getPolymerItem(ItemStack itemStack, PacketContext player) {
return Items.ARMOR_STAND;
}
@Override
public ItemStack getPolymerItemStack(ItemStack stack, TooltipType tooltipType, PacketContext player) {
ItemStack out = PolymerItemUtils.createItemStack(stack, tooltipType, player);
out.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true);
return out;
}
@Override
public void appendTooltip(ItemStack stack, TooltipContext context, TooltipDisplayComponent component, Consumer<Text> tooltip, TooltipType type) {
MinionData data = null /*getData(stack)*/;
if(data != null) {
tooltip.accept(Text.translatable("minions.minion_item.tooltip", data.name()));
}
}
@Override
public ActionResult use(World world, PlayerEntity user, Hand hand) {
if(user instanceof ServerPlayerEntity serverPlayer) {
ItemStack stack = user.getStackInHand(hand);
MinionLookGui.open(serverPlayer, stack);
return ActionResult.SUCCESS;
}
return ActionResult.SUCCESS_SERVER;
}
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
if(!context.getWorld().isClient) {
MinionData data = getDataOrDefault(context.getWorld().getServer(), context.getStack());
MinionFakePlayer.spawnMinion(data, (ServerWorld) context.getWorld(), context.getBlockPos().toCenterPos().add(0,0.5,0), new Vec2f(0, 0));
}
context.getStack().decrement(1);
return ActionResult.SUCCESS;
}
public static void setData(MinecraftServer server, MinionData data, ItemStack item) {
item.set(MinionComponentTypes.MINION_DATA, data.uuid());
MinionPersistentState.get(server).updateMinionData(data);
}
@Nullable
public static MinionData getData(MinecraftServer server, ItemStack item) {
if(item.contains(MinionComponentTypes.MINION_DATA)) {
return MinionPersistentState.get(server).getMinionData(item.get(MinionComponentTypes.MINION_DATA));
}
return null;
}
public static MinionData getDataOrDefault(MinecraftServer server, ItemStack item) {
MinionData data = getData(server, item);
if(data == null) {
data = MinionData.createDefault(server);
setData(server, data, item);
}
return data;
}
public static boolean containsData(ItemStack item) {
return item.contains(MinionComponentTypes.MINION_DATA);
}
}