Overlays
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-50
@@ -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<MinionTriggerBlock> 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<MinionTriggerBlockEntity> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<Component> tooltip, TooltipFlag type) {
|
||||
//MinionData data = getData(stack);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
+57
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
@NullMarked
|
||||
package io.github.skippyall.minions.polymer.block;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
@NullMarked
|
||||
package io.github.skippyall.minions.polymer.item;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 extends DataComponentType<?>> T register(String name, T type) {
|
||||
Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, Identifier.fromNamespaceAndPath(Minions.MOD_ID, name), type);
|
||||
PolymerComponent.registerDataComponent(type);
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 extends Item> T registerItem(Identifier identifier, Function<Item.Properties, T> 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<InstructionType<MinionRuntime>> instructionTypes, List<SpecialAbility> specialAbilities) {
|
||||
public static Item registerSimpleItem(Identifier identifier) {
|
||||
return registerItem(identifier, Item::new);
|
||||
}
|
||||
|
||||
public static Item registerModule(Identifier identifier, List<InstructionType<MinionRuntime>> instructionTypes, List<SpecialAbility> 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<InstructionType<MinionRuntime>> instructionTypes) {
|
||||
public static Item registerModule(Identifier identifier, List<InstructionType<MinionRuntime>> instructionTypes) {
|
||||
return registerModule(
|
||||
identifier,
|
||||
vanillaItem,
|
||||
instructionTypes,
|
||||
List.of()
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user