From 948741f6636c57f3f154f799b4900df762185f56 Mon Sep 17 00:00:00 2001 From: skippyall <121978267+skippyall@users.noreply.github.com> Date: Sun, 31 May 2026 15:06:34 +0200 Subject: [PATCH] Overlays --- .../io/github/skippyall/minions/Minions.java | 7 +- .../minions/block/MinionsBlockItem.java | 36 ---------- .../miniontrigger/MinionTriggerBlock.java | 51 +------------- .../minions/clipboard/ClipboardItem.java | 31 +-------- .../skippyall/minions/minion/MinionItem.java | 26 +------ .../minions/polymer/PolymerRegistration.java | 67 +++++++++++++++++++ .../block/AnalogInputBlockOverlay.java | 14 ++++ .../block/MinionTriggerBlockOverlay.java | 57 ++++++++++++++++ .../minions/polymer/block/package-info.java | 4 ++ .../polymer/item/ClipboardItemOverlay.java | 31 +++++++++ .../polymer/item/MinionItemOverlay.java | 31 +++++++++ .../polymer/item/MinionsBlockItemOverlay.java | 55 +++++++++++++++ .../polymer/item/SimpleItemOverlay.java | 48 +++++++++++++ .../minions/polymer/item/package-info.java | 4 ++ .../minions/registration/MinionBlocks.java | 3 +- .../registration/MinionComponentTypes.java | 2 - .../registration/MinionCreativeTab.java | 5 +- .../minions/registration/MinionItems.java | 50 ++++++-------- 18 files changed, 337 insertions(+), 185 deletions(-) delete mode 100644 src/main/java/io/github/skippyall/minions/block/MinionsBlockItem.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/PolymerRegistration.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/block/AnalogInputBlockOverlay.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/block/MinionTriggerBlockOverlay.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/block/package-info.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/item/ClipboardItemOverlay.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/item/MinionItemOverlay.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/item/MinionsBlockItemOverlay.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/item/SimpleItemOverlay.java create mode 100644 src/main/java/io/github/skippyall/minions/polymer/item/package-info.java diff --git a/src/main/java/io/github/skippyall/minions/Minions.java b/src/main/java/io/github/skippyall/minions/Minions.java index d259d2a..11e43e8 100644 --- a/src/main/java/io/github/skippyall/minions/Minions.java +++ b/src/main/java/io/github/skippyall/minions/Minions.java @@ -1,11 +1,10 @@ package io.github.skippyall.minions; -import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import io.github.skippyall.minions.command.MinionsCommand; import io.github.skippyall.minions.docs.DocsManager; import io.github.skippyall.minions.minion.MinionPersistentState; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import io.github.skippyall.minions.polymer.VersionSync; +import io.github.skippyall.minions.polymer.PolymerRegistration; import io.github.skippyall.minions.registration.MinionRegistration; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; @@ -27,8 +26,6 @@ public class Minions implements ModInitializer { MinionRegistration.register(); - VersionSync.register(); - ServerLifecycleEvents.SERVER_STARTED.register(server -> { MinionPersistentState.get(server).getMinionData().forEach((uuid, data) -> { if(data.isSpawned()) { @@ -39,7 +36,7 @@ public class Minions implements ModInitializer { CommandRegistrationCallback.EVENT.register(MinionsCommand::register); - PolymerResourcePackUtils.addModAssets(Minions.MOD_ID); + PolymerRegistration.register(); ResourceLoader.get(PackType.SERVER_DATA).registerReloadListener(Identifier.fromNamespaceAndPath(Minions.MOD_ID, "docs"), new DocsManager()); } diff --git a/src/main/java/io/github/skippyall/minions/block/MinionsBlockItem.java b/src/main/java/io/github/skippyall/minions/block/MinionsBlockItem.java deleted file mode 100644 index 3a7a0c8..0000000 --- a/src/main/java/io/github/skippyall/minions/block/MinionsBlockItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.github.skippyall.minions.block; - -import eu.pb4.polymer.core.api.item.PolymerBlockItem; -import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; -import io.github.skippyall.minions.polymer.VersionSync; -import net.fabricmc.fabric.api.networking.v1.context.PacketContext; -import net.minecraft.core.HolderLookup; -import net.minecraft.resources.Identifier; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import org.jspecify.annotations.Nullable; - -public class MinionsBlockItem extends PolymerBlockItem { - public MinionsBlockItem(Block block, Properties settings, Item polymerItem) { - super(block, settings, polymerItem, true); - } - - @Override - public Item getPolymerItem(ItemStack itemStack, PacketContext context) { - if(VersionSync.isOnClient(context)) { - return this; - } else { - return super.getPolymerItem(itemStack, context); - } - } - - @Override - public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context, HolderLookup.Provider lookup) { - if(PolymerResourcePackUtils.hasMainPack(context)) { - return super.getPolymerItemModel(stack, context, lookup); - } else { - return null; - } - } -} diff --git a/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlock.java b/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlock.java index f5e48fc..3b2d8a4 100644 --- a/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlock.java +++ b/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlock.java @@ -1,32 +1,14 @@ package io.github.skippyall.minions.block.miniontrigger; import com.mojang.serialization.MapCodec; -import eu.pb4.polymer.core.api.block.PolymerBlock; -import eu.pb4.polymer.core.api.utils.PolymerClientDecoded; -import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; -import eu.pb4.polymer.virtualentity.api.BlockWithElementHolder; -import eu.pb4.polymer.virtualentity.api.ElementHolder; -import eu.pb4.polymer.virtualentity.api.elements.ItemDisplayElement; -import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.block.instruction_bound.InstructionBoundBlock; -import io.github.skippyall.minions.polymer.VersionSync; import io.github.skippyall.minions.registration.MinionBlocks; -import net.fabricmc.fabric.api.networking.v1.context.PacketContext; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.component.DataComponents; -import net.minecraft.resources.Identifier; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.DiodeBlock; import net.minecraft.world.level.block.SupportType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -39,7 +21,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; -public class MinionTriggerBlock extends InstructionBoundBlock implements PolymerBlock, PolymerClientDecoded, BlockWithElementHolder { +public class MinionTriggerBlock extends InstructionBoundBlock { public static final MapCodec CODEC = simpleCodec(MinionTriggerBlock::new); public static final BooleanProperty POWERED = BooleanProperty.create("powered"); @@ -105,35 +87,4 @@ public class MinionTriggerBlock extends InstructionBoundBlock implements Polymer protected BlockEntityType getBlockEntityType() { return MinionBlocks.MINION_TRIGGER_BE_TYPE; } - - @Override - public BlockState getPolymerBlockState(BlockState state, @Nullable PacketContext context) { - return VersionSync.isOnClient(context) ? state : net.minecraft.world.level.block.Blocks.COMPARATOR.defaultBlockState().setValue(DiodeBlock.POWERED, state.getValue(POWERED)); - } - - @Override - public boolean handleMiningOnServer(ItemStack tool, BlockState state, BlockPos pos, ServerPlayer player) { - return false; - } - - @Override - public @Nullable ElementHolder createElementHolder(ServerLevel world, BlockPos pos, BlockState initialBlockState) { - ElementHolder holder = new ElementHolder() { - @Override - public boolean startWatching(ServerGamePacketListenerImpl player) { - if(PolymerResourcePackUtils.hasMainPack(player) && !VersionSync.isOnClient(player)) { - return super.startWatching(player); - } else { - return false; - } - } - }; - ItemStack stack = new ItemStack(Items.BARRIER); - stack.set(DataComponents.ITEM_MODEL, Identifier.fromNamespaceAndPath(Minions.MOD_ID, "minion_trigger_no_plate_" + (initialBlockState.getValue(MinionTriggerBlock.POWERED) ? "active" : "inactive"))); - - ItemDisplayElement element = new ItemDisplayElement(stack); - element.setItemDisplayContext(ItemDisplayContext.NONE); - holder.addElement(element); - return holder; - } } diff --git a/src/main/java/io/github/skippyall/minions/clipboard/ClipboardItem.java b/src/main/java/io/github/skippyall/minions/clipboard/ClipboardItem.java index 06ba9d1..d2ec2c8 100644 --- a/src/main/java/io/github/skippyall/minions/clipboard/ClipboardItem.java +++ b/src/main/java/io/github/skippyall/minions/clipboard/ClipboardItem.java @@ -1,42 +1,13 @@ package io.github.skippyall.minions.clipboard; -import eu.pb4.polymer.core.api.item.PolymerItem; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.registration.MinionComponentTypes; import io.github.skippyall.minions.registration.MinionItems; -import net.fabricmc.fabric.api.networking.v1.context.PacketContext; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.core.component.DataComponents; -import net.minecraft.resources.Identifier; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; -import org.jspecify.annotations.Nullable; -public class ClipboardItem extends Item implements PolymerItem { - public ClipboardItem(Properties settings) { - super(settings); - } - - @Override - public Item getPolymerItem(ItemStack itemStack, PacketContext context) { - return /*VersionSync.isOnClient(context) ? this : */Items.PAPER; - } - - @Override - public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context, HolderLookup.Provider lookup) { - return null; - } - - @Override - public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipFlag tooltipType, PacketContext context, HolderLookup.Provider lookup) { - ItemStack stack = PolymerItem.super.getPolymerItemStack(itemStack, tooltipType, context, lookup); - stack.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true); - return stack; - } +public class ClipboardItem { public static ItemStack createInstructionReference(MinionFakePlayer minion, String instructionName) { ItemStack stack = new ItemStack(MinionItems.REFERENCE_ITEM); diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionItem.java b/src/main/java/io/github/skippyall/minions/minion/MinionItem.java index 98b9d14..b7ea438 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionItem.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionItem.java @@ -1,13 +1,8 @@ package io.github.skippyall.minions.minion; -import eu.pb4.polymer.core.api.item.PolymerItem; import io.github.skippyall.minions.gui.MinionLookGui; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.registration.MinionComponentTypes; -import net.fabricmc.fabric.api.networking.v1.context.PacketContext; -import net.minecraft.core.HolderLookup; -import net.minecraft.core.component.DataComponents; -import net.minecraft.resources.Identifier; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -16,35 +11,16 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec2; import org.jspecify.annotations.Nullable; -public class MinionItem extends Item implements PolymerItem { +public class MinionItem extends Item { public MinionItem(Properties settings) { super(settings); } - @Override - public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context, HolderLookup.Provider lookup) { - return null; - } - - @Override - public Item getPolymerItem(ItemStack itemStack, PacketContext player) { - return Items.ARMOR_STAND; - } - - @Override - public ItemStack getPolymerItemStack(ItemStack stack, TooltipFlag tooltipType, PacketContext player, HolderLookup.Provider lookup) { - ItemStack out = PolymerItem.super.getPolymerItemStack(stack, tooltipType, player, lookup); - out.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true); - return out; - } - /*@Override public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay component, Consumer tooltip, TooltipFlag type) { //MinionData data = getData(stack); diff --git a/src/main/java/io/github/skippyall/minions/polymer/PolymerRegistration.java b/src/main/java/io/github/skippyall/minions/polymer/PolymerRegistration.java new file mode 100644 index 0000000..a00a81c --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/PolymerRegistration.java @@ -0,0 +1,67 @@ +package io.github.skippyall.minions.polymer; + +import eu.pb4.polymer.core.api.block.PolymerBlock; +import eu.pb4.polymer.core.api.block.PolymerBlockUtils; +import eu.pb4.polymer.core.api.item.PolymerCreativeModeTabUtils; +import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.core.api.other.PolymerComponent; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; +import eu.pb4.polymer.virtualentity.api.BlockWithElementHolder; +import io.github.skippyall.minions.Minions; +import io.github.skippyall.minions.polymer.block.AnalogInputBlockOverlay; +import io.github.skippyall.minions.polymer.block.MinionTriggerBlockOverlay; +import io.github.skippyall.minions.polymer.item.ClipboardItemOverlay; +import io.github.skippyall.minions.polymer.item.MinionItemOverlay; +import io.github.skippyall.minions.polymer.item.MinionsBlockItemOverlay; +import io.github.skippyall.minions.polymer.item.SimpleItemOverlay; +import io.github.skippyall.minions.registration.MinionBlocks; +import io.github.skippyall.minions.registration.MinionComponentTypes; +import io.github.skippyall.minions.registration.MinionCreativeTab; +import io.github.skippyall.minions.registration.MinionItems; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; + +public class PolymerRegistration { + public static void register() { + VersionSync.register(); + PolymerResourcePackUtils.addModAssets(Minions.MOD_ID); + + registerBlockOverlay(MinionBlocks.MINION_TRIGGER_BLOCK, new MinionTriggerBlockOverlay()); + PolymerBlockUtils.registerBlockEntity(MinionBlocks.MINION_TRIGGER_BE_TYPE); + registerBlockOverlay(MinionBlocks.ANALOG_INPUT_BLOCK, new AnalogInputBlockOverlay()); + + registerItemOverlay(MinionItems.MINION_TRIGGER_ITEM, new MinionsBlockItemOverlay(MinionItems.MINION_TRIGGER_ITEM, Items.COMPARATOR)); + registerItemOverlay(MinionItems.ANALOG_INPUT_ITEM, new MinionsBlockItemOverlay(MinionItems.ANALOG_INPUT_ITEM, Items.REPEATER)); + + registerItemOverlay(MinionItems.REFERENCE_ITEM, new ClipboardItemOverlay()); + registerItemOverlay(MinionItems.MINION_ITEM, new MinionItemOverlay()); + registerSimpleItemOverlay(MinionItems.BASIC_UPGRADE_BASE, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + registerSimpleItemOverlay(MinionItems.ADVANCED_UPGRADE_BASE, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + registerSimpleItemOverlay(MinionItems.MOVE_MODULE, Items.IRON_BOOTS); + registerSimpleItemOverlay(MinionItems.ATTACK_MODULE, Items.IRON_PICKAXE); + registerSimpleItemOverlay(MinionItems.INTERACT_MODULE, Items.LEVER); + registerSimpleItemOverlay(MinionItems.MOB_SPAWNING_MODULE, Items.SPAWNER); + + PolymerComponent.registerDataComponent(MinionComponentTypes.MINION_DATA, MinionComponentTypes.REFERENCE, MinionComponentTypes.MODULE); + + PolymerCreativeModeTabUtils.registerPolymerCreativeModeTab(Identifier.fromNamespaceAndPath(Minions.MOD_ID, "main"), MinionCreativeTab.group); + } + + private static void registerBlockOverlay(Block block, PolymerBlock overlay) { + PolymerBlock.registerOverlay(block, overlay); + + if(overlay instanceof BlockWithElementHolder elementHolderOverlay) { + BlockWithElementHolder.registerOverlay(block, elementHolderOverlay); + } + } + + private static void registerItemOverlay(Item item, PolymerItem overlay) { + PolymerItem.registerOverlay(item, overlay); + } + + private static void registerSimpleItemOverlay(Item serverItem, Item polymerItem) { + registerItemOverlay(serverItem, SimpleItemOverlay.withoutModel(serverItem, polymerItem)); + } +} diff --git a/src/main/java/io/github/skippyall/minions/polymer/block/AnalogInputBlockOverlay.java b/src/main/java/io/github/skippyall/minions/polymer/block/AnalogInputBlockOverlay.java new file mode 100644 index 0000000..8eaaad3 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/block/AnalogInputBlockOverlay.java @@ -0,0 +1,14 @@ +package io.github.skippyall.minions.polymer.block; + +import eu.pb4.polymer.core.api.block.PolymerBlock; +import net.fabricmc.fabric.api.networking.v1.context.PacketContext; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import org.jspecify.annotations.Nullable; + +public class AnalogInputBlockOverlay implements PolymerBlock { + @Override + public BlockState getPolymerBlockState(BlockState blockState, @Nullable PacketContext packetContext) { + return Blocks.AMETHYST_BLOCK.defaultBlockState(); + } +} diff --git a/src/main/java/io/github/skippyall/minions/polymer/block/MinionTriggerBlockOverlay.java b/src/main/java/io/github/skippyall/minions/polymer/block/MinionTriggerBlockOverlay.java new file mode 100644 index 0000000..39b6302 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/block/MinionTriggerBlockOverlay.java @@ -0,0 +1,57 @@ +package io.github.skippyall.minions.polymer.block; + +import eu.pb4.polymer.core.api.block.PolymerBlock; +import eu.pb4.polymer.core.api.utils.PolymerClientDecoded; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; +import eu.pb4.polymer.virtualentity.api.BlockWithElementHolder; +import eu.pb4.polymer.virtualentity.api.ElementHolder; +import eu.pb4.polymer.virtualentity.api.elements.ItemDisplayElement; +import io.github.skippyall.minions.Minions; +import io.github.skippyall.minions.block.miniontrigger.MinionTriggerBlock; +import io.github.skippyall.minions.polymer.VersionSync; +import net.fabricmc.fabric.api.networking.v1.context.PacketContext; +import net.minecraft.core.BlockPos; +import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.Identifier; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.DiodeBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.jspecify.annotations.Nullable; + +public class MinionTriggerBlockOverlay implements PolymerBlock, PolymerClientDecoded, BlockWithElementHolder { + @Override + public BlockState getPolymerBlockState(BlockState state, @Nullable PacketContext context) { + return VersionSync.isOnClient(context) ? state : net.minecraft.world.level.block.Blocks.COMPARATOR.defaultBlockState().setValue(DiodeBlock.POWERED, state.getValue(MinionTriggerBlock.POWERED)); + } + + @Override + public boolean handleMiningOnServer(ItemStack tool, BlockState state, BlockPos pos, ServerPlayer player) { + return false; + } + + @Override + public @Nullable ElementHolder createElementHolder(ServerLevel world, BlockPos pos, BlockState initialBlockState) { + ElementHolder holder = new ElementHolder() { + @Override + public boolean startWatching(ServerGamePacketListenerImpl player) { + if(PolymerResourcePackUtils.hasMainPack(player) && !VersionSync.isOnClient(player)) { + return super.startWatching(player); + } else { + return false; + } + } + }; + ItemStack stack = new ItemStack(Items.BARRIER); + stack.set(DataComponents.ITEM_MODEL, Identifier.fromNamespaceAndPath(Minions.MOD_ID, "minion_trigger_no_plate_" + (initialBlockState.getValue(MinionTriggerBlock.POWERED) ? "active" : "inactive"))); + + ItemDisplayElement element = new ItemDisplayElement(stack); + element.setItemDisplayContext(ItemDisplayContext.NONE); + holder.addElement(element); + return holder; + } +} diff --git a/src/main/java/io/github/skippyall/minions/polymer/block/package-info.java b/src/main/java/io/github/skippyall/minions/polymer/block/package-info.java new file mode 100644 index 0000000..65a8a22 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/block/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package io.github.skippyall.minions.polymer.block; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/io/github/skippyall/minions/polymer/item/ClipboardItemOverlay.java b/src/main/java/io/github/skippyall/minions/polymer/item/ClipboardItemOverlay.java new file mode 100644 index 0000000..2baf33b --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/item/ClipboardItemOverlay.java @@ -0,0 +1,31 @@ +package io.github.skippyall.minions.polymer.item; + +import eu.pb4.polymer.core.api.item.PolymerItem; +import net.fabricmc.fabric.api.networking.v1.context.PacketContext; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.TooltipFlag; +import org.jspecify.annotations.Nullable; + +public class ClipboardItemOverlay implements PolymerItem { + @Override + public Item getPolymerItem(ItemStack itemStack, PacketContext context) { + return /*VersionSync.isOnClient(context) ? this : */Items.PAPER; + } + + @Override + public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context, HolderLookup.Provider lookup) { + return null; + } + + @Override + public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipFlag tooltipType, PacketContext context, HolderLookup.Provider lookup) { + ItemStack stack = PolymerItem.super.getPolymerItemStack(itemStack, tooltipType, context, lookup); + stack.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true); + return stack; + } +} diff --git a/src/main/java/io/github/skippyall/minions/polymer/item/MinionItemOverlay.java b/src/main/java/io/github/skippyall/minions/polymer/item/MinionItemOverlay.java new file mode 100644 index 0000000..078868e --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/item/MinionItemOverlay.java @@ -0,0 +1,31 @@ +package io.github.skippyall.minions.polymer.item; + +import eu.pb4.polymer.core.api.item.PolymerItem; +import net.fabricmc.fabric.api.networking.v1.context.PacketContext; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.TooltipFlag; +import org.jspecify.annotations.Nullable; + +public class MinionItemOverlay implements PolymerItem { + @Override + public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context, HolderLookup.Provider lookup) { + return null; + } + + @Override + public Item getPolymerItem(ItemStack itemStack, PacketContext player) { + return Items.ARMOR_STAND; + } + + @Override + public ItemStack getPolymerItemStack(ItemStack stack, TooltipFlag tooltipType, PacketContext player, HolderLookup.Provider lookup) { + ItemStack out = PolymerItem.super.getPolymerItemStack(stack, tooltipType, player, lookup); + out.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true); + return out; + } +} diff --git a/src/main/java/io/github/skippyall/minions/polymer/item/MinionsBlockItemOverlay.java b/src/main/java/io/github/skippyall/minions/polymer/item/MinionsBlockItemOverlay.java new file mode 100644 index 0000000..27dd0f8 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/item/MinionsBlockItemOverlay.java @@ -0,0 +1,55 @@ +package io.github.skippyall.minions.polymer.item; + +import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; +import io.github.skippyall.minions.polymer.VersionSync; +import net.fabricmc.fabric.api.networking.v1.context.PacketContext; +import net.minecraft.core.HolderLookup; +import net.minecraft.resources.Identifier; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import org.jspecify.annotations.Nullable; + +public class MinionsBlockItemOverlay implements PolymerItem { + private final Item serverItem; + private final Item polymerItem; + + public MinionsBlockItemOverlay(Item serverItem, Item polymerItem) { + this.serverItem = serverItem; + this.polymerItem = polymerItem; + } + + @Override + public Item getPolymerItem(ItemStack itemStack, PacketContext context) { + if(VersionSync.isOnClient(context)) { + return serverItem; + } else { + return polymerItem; + } + } + + @Override + public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context, HolderLookup.Provider lookup) { + if(PolymerResourcePackUtils.hasMainPack(context)) { + return PolymerItem.super.getPolymerItemModel(stack, context, lookup); + } else { + return null; + } + } + + @Override + public boolean isPolymerBlockInteraction(BlockState state, ServerPlayer player, InteractionHand hand, ItemStack stack, ServerLevel world, BlockHitResult blockHitResult, InteractionResult actionResult) { + return true; + } + + @Override + public boolean isIgnoringBlockInteractionPlaySoundExceptedEntity(BlockState state, ServerPlayer player, InteractionHand hand, ItemStack stack, ServerLevel world, BlockHitResult blockHitResult) { + return true; + } +} diff --git a/src/main/java/io/github/skippyall/minions/polymer/item/SimpleItemOverlay.java b/src/main/java/io/github/skippyall/minions/polymer/item/SimpleItemOverlay.java new file mode 100644 index 0000000..be2745e --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/item/SimpleItemOverlay.java @@ -0,0 +1,48 @@ +package io.github.skippyall.minions.polymer.item; + +import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; +import io.github.skippyall.minions.polymer.VersionSync; +import net.fabricmc.fabric.api.networking.v1.context.PacketContext; +import net.minecraft.core.HolderLookup; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import org.jspecify.annotations.Nullable; + +public class SimpleItemOverlay implements PolymerItem { + private final Item serverItem; + private final Item polymerItem; + private final boolean useModel; + + private SimpleItemOverlay(Item serverItem, Item polymerItem, boolean useModel) { + this.serverItem = serverItem; + this.polymerItem = polymerItem; + this.useModel = useModel; + } + + public static SimpleItemOverlay withModel(Item serverItem, Item polymerItem) { + return new SimpleItemOverlay(serverItem, polymerItem, true); + } + + public static SimpleItemOverlay withoutModel(Item serverItem, Item polymerItem) { + return new SimpleItemOverlay(serverItem, polymerItem, false); + } + + public Item getPolymerItem(ItemStack itemStack, PacketContext context) { + if(useModel && VersionSync.isOnClient(context)) { + return serverItem; + } else { + return polymerItem; + } + } + + @Override + public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context, HolderLookup.Provider lookup) { + if(PolymerResourcePackUtils.hasMainPack(context) && useModel) { + return PolymerItem.super.getPolymerItemModel(stack, context, lookup); + } else { + return null; + } + } +} diff --git a/src/main/java/io/github/skippyall/minions/polymer/item/package-info.java b/src/main/java/io/github/skippyall/minions/polymer/item/package-info.java new file mode 100644 index 0000000..69a8bfd --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/polymer/item/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package io.github.skippyall.minions.polymer.item; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/io/github/skippyall/minions/registration/MinionBlocks.java b/src/main/java/io/github/skippyall/minions/registration/MinionBlocks.java index d46e75c..4f83d35 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionBlocks.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionBlocks.java @@ -1,6 +1,5 @@ package io.github.skippyall.minions.registration; -import eu.pb4.polymer.core.api.block.PolymerBlockUtils; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.block.input.AnalogInputBlock; import io.github.skippyall.minions.block.miniontrigger.MinionTriggerBlock; @@ -47,6 +46,6 @@ public class MinionBlocks { ); public static void register() { - PolymerBlockUtils.registerBlockEntity(MINION_TRIGGER_BE_TYPE); + } } diff --git a/src/main/java/io/github/skippyall/minions/registration/MinionComponentTypes.java b/src/main/java/io/github/skippyall/minions/registration/MinionComponentTypes.java index aeaef9c..6905281 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionComponentTypes.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionComponentTypes.java @@ -1,6 +1,5 @@ package io.github.skippyall.minions.registration; -import eu.pb4.polymer.core.api.other.PolymerComponent; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.clipboard.Clipboard; import io.github.skippyall.minions.module.MinionModule; @@ -19,7 +18,6 @@ public class MinionComponentTypes { private static > T register(String name, T type) { Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, Identifier.fromNamespaceAndPath(Minions.MOD_ID, name), type); - PolymerComponent.registerDataComponent(type); return type; } diff --git a/src/main/java/io/github/skippyall/minions/registration/MinionCreativeTab.java b/src/main/java/io/github/skippyall/minions/registration/MinionCreativeTab.java index 97a10b1..1161889 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionCreativeTab.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionCreativeTab.java @@ -1,10 +1,7 @@ package io.github.skippyall.minions.registration; -import eu.pb4.polymer.core.api.item.PolymerCreativeModeTabUtils; -import io.github.skippyall.minions.Minions; import net.fabricmc.fabric.api.creativetab.v1.FabricCreativeModeTab; import net.minecraft.network.chat.Component; -import net.minecraft.resources.Identifier; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import org.jspecify.annotations.Nullable; @@ -34,6 +31,6 @@ public class MinionCreativeTab { .icon(MinionItems.MINION_ITEM::getDefaultInstance) .displayItems(MinionCreativeTab::collectEntries) .build(); - PolymerCreativeModeTabUtils.registerPolymerCreativeModeTab(Identifier.fromNamespaceAndPath(Minions.MOD_ID, "main"), group); + } } diff --git a/src/main/java/io/github/skippyall/minions/registration/MinionItems.java b/src/main/java/io/github/skippyall/minions/registration/MinionItems.java index 697fd72..79cd64b 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionItems.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionItems.java @@ -1,8 +1,5 @@ package io.github.skippyall.minions.registration; -import eu.pb4.polymer.core.api.item.SimplePolymerItem; -import io.github.skippyall.minions.block.MinionsBlockItem; -import io.github.skippyall.minions.clipboard.ClipboardItem; import io.github.skippyall.minions.minion.MinionItem; import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.module.MinionModule; @@ -16,8 +13,8 @@ import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; -import net.minecraft.world.item.Items; import net.minecraft.world.item.component.DamageResistant; import java.util.List; @@ -32,55 +29,43 @@ public class MinionItems { settings -> new MinionItem(settings.delayedComponent(DataComponents.DAMAGE_RESISTANT, context -> new DamageResistant(context.getOrThrow(MINION_ITEM_RESISTS)))) ); - public static final SimplePolymerItem BASIC_UPGRADE_BASE = registerItem( - Identifier.fromNamespaceAndPath(MOD_ID, "basic_upgrade_base"), - settings -> new SimplePolymerItem(settings, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) - ); + public static final Item BASIC_UPGRADE_BASE = registerSimpleItem(Identifier.fromNamespaceAndPath(MOD_ID, "basic_upgrade_base")); + public static final Item ADVANCED_UPGRADE_BASE = registerSimpleItem(Identifier.fromNamespaceAndPath(MOD_ID, "advanced_upgrade_base")); - public static final SimplePolymerItem ADVANCED_UPGRADE_BASE = registerItem( - Identifier.fromNamespaceAndPath(MOD_ID, "advanced_upgrade_base"), - settings -> new SimplePolymerItem(settings, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) - ); - - - public static final SimplePolymerItem MOVE_MODULE = registerModule( + public static final Item MOVE_MODULE = registerModule( Identifier.fromNamespaceAndPath(MOD_ID, "move_module"), - Items.IRON_BOOTS, List.of(Instructions.WALK, Instructions.WALK_CONTINUOUS, Instructions.TURN, Instructions.TURN_VECTOR) ); - public static final SimplePolymerItem ATTACK_MODULE = registerModule( + public static final Item ATTACK_MODULE = registerModule( Identifier.fromNamespaceAndPath(MOD_ID, "attack_module"), - Items.IRON_PICKAXE, List.of(Instructions.ATTACK, Instructions.MINE_BLOCK) ); - public static final SimplePolymerItem INTERACT_MODULE = registerModule( + public static final Item INTERACT_MODULE = registerModule( Identifier.fromNamespaceAndPath(MOD_ID, "interact_module"), - Items.LEVER, List.of(Instructions.USE) ); - public static final SimplePolymerItem MOB_SPAWNING_MODULE = registerModule( + public static final Item MOB_SPAWNING_MODULE = registerModule( Identifier.fromNamespaceAndPath(MOD_ID, "mob_spawning_module"), - Items.SPAWNER, List.of(), List.of(SpecialAbilities.MOB_SPAWNING) ); - public static final MinionsBlockItem MINION_TRIGGER_ITEM = registerItem( + public static final BlockItem MINION_TRIGGER_ITEM = registerItem( MinionBlocks.MINION_TRIGGER_ID, - settings -> new MinionsBlockItem(MinionBlocks.MINION_TRIGGER_BLOCK, settings, Items.COMPARATOR), + settings -> new BlockItem(MinionBlocks.MINION_TRIGGER_BLOCK, settings), new Item.Properties().useBlockDescriptionPrefix() ); - public static final MinionsBlockItem ANALOG_INPUT_ITEM = registerItem( + public static final BlockItem ANALOG_INPUT_ITEM = registerItem( MinionBlocks.ANALOG_INPUT_BLOCK_ID, - settings -> new MinionsBlockItem(MinionBlocks.ANALOG_INPUT_BLOCK, settings, Items.REPEATER), + settings -> new BlockItem(MinionBlocks.ANALOG_INPUT_BLOCK, settings), new Item.Properties().useBlockDescriptionPrefix() ); - public static final ClipboardItem REFERENCE_ITEM = registerItem(Identifier.fromNamespaceAndPath(MOD_ID, "clipboard"), ClipboardItem::new); + public static final Item REFERENCE_ITEM = registerItem(Identifier.fromNamespaceAndPath(MOD_ID, "clipboard"), Item::new); public static T registerItem(Identifier identifier, Function constructor, Item.Properties settings) { T item = constructor.apply(settings.setId(ResourceKey.create(Registries.ITEM, identifier))); @@ -94,18 +79,21 @@ public class MinionItems { return registerItem(identifier, constructor, new Item.Properties()); } - public static SimplePolymerItem registerModule(Identifier identifier, Item vanillaItem, List> instructionTypes, List specialAbilities) { + public static Item registerSimpleItem(Identifier identifier) { + return registerItem(identifier, Item::new); + } + + public static Item registerModule(Identifier identifier, List> instructionTypes, List specialAbilities) { return registerItem( identifier, - settings -> new SimplePolymerItem(settings, vanillaItem), + Item::new, new Item.Properties().component(MinionComponentTypes.MODULE, new MinionModule(instructionTypes, specialAbilities)) ); } - public static SimplePolymerItem registerModule(Identifier identifier, Item vanillaItem, List> instructionTypes) { + public static Item registerModule(Identifier identifier, List> instructionTypes) { return registerModule( identifier, - vanillaItem, instructionTypes, List.of() );