From f5202a42647248993df4ba10403a5e04baa32c0a Mon Sep 17 00:00:00 2001 From: skippyall <121978267+skippyall@users.noreply.github.com> Date: Wed, 29 Apr 2026 08:51:37 +0200 Subject: [PATCH] Mojang Mappings --- Minions Verbesserungsvorschläge.txt | 10 + build.gradle | 4 +- .../minions/client/MinionsClient.java | 4 +- .../io/github/skippyall/minions/Minions.java | 6 +- .../minions/block/input/AnalogInputBlock.java | 24 +-- .../InstructionBoundBlock.java | 58 ++--- .../InstructionBoundBlockEntity.java | 21 +- .../miniontrigger/MinionTriggerBlock.java | 98 ++++----- .../MinionTriggerBlockEntity.java | 24 +-- .../miniontrigger/MinionTriggerBlockItem.java | 12 +- .../MinionTriggerMinionListener.java | 27 ++- .../minions/clipboard/BlockPosClipboard.java | 23 +- .../minions/clipboard/Clipboard.java | 7 +- .../minions/clipboard/ClipboardItem.java | 30 +-- .../clipboard/InstructionClipboard.java | 17 +- .../minions/command/DocsSubcommand.java | 23 +- .../minions/command/ListSubcommand.java | 13 +- .../minions/command/MinionArgument.java | 11 +- .../minions/command/MinionsCommand.java | 12 +- .../command/MobCapDebugSubcommand.java | 18 +- .../minions/command/SpawnSubcommand.java | 24 +-- .../minions/command/TestSubcommand.java | 35 ++- .../skippyall/minions/docs/DocsEntry.java | 9 +- .../skippyall/minions/docs/DocsManager.java | 95 ++++---- .../skippyall/minions/docs/DocsTree.java | 15 +- .../minions/docs/ReferenceEntry.java | 57 +++-- .../skippyall/minions/gui/GuiDisplay.java | 65 +++--- .../skippyall/minions/gui/MinionLookGui.java | 35 ++- .../skippyall/minions/gui/MinionsGui.java | 8 +- .../skippyall/minions/gui/PaginatedList.java | 25 ++- .../minions/gui/input/ChoiceInput.java | 34 +-- .../minions/gui/input/TextInput.java | 51 +++-- .../minions/gui/instruction/ArgumentGui.java | 30 +-- .../instruction/ConfigureInstructionGui.java | 38 ++-- .../minions/gui/instruction/ConverterGui.java | 24 +-- .../gui/instruction/ConverterListGui.java | 18 +- .../gui/instruction/InstructionGui.java | 66 +++--- .../gui/instruction/InstructionListGui.java | 12 +- .../minions/gui/minion/GuiContext.java | 6 +- .../minions/gui/minion/GuiContextImpl.java | 10 +- .../minions/gui/minion/MinionGui.java | 22 +- .../gui/minion/MinionInventoryGui.java | 34 +-- .../BlockEntityMinionInstructionListener.java | 13 +- .../listener/BlockEntityMinionListener.java | 40 ++-- .../listener/SerializableListenerManager.java | 11 +- .../minions/minion/MinionConfig.java | 9 +- .../skippyall/minions/minion/MinionData.java | 9 +- .../skippyall/minions/minion/MinionItem.java | 70 +++--- .../minions/minion/MinionPersistentState.java | 15 +- .../minions/minion/MinionProfileUtils.java | 17 +- .../minions/minion/MinionRuntime.java | 21 +- .../fakeplayer/EntityPlayerActionPack.java | 193 +++++++++-------- .../fakeplayer/FakeClientConnection.java | 18 +- .../minion/fakeplayer/MinionFakePlayer.java | 204 +++++++++--------- .../fakeplayer/NetHandlerPlayServerFake.java | 38 ++-- .../minions/minion/fakeplayer/Tracer.java | 53 +++-- .../program/instruction/ActionExecution.java | 8 +- .../instruction/MineBlockExecution.java | 52 ++--- .../inventory/SwapItemExecution.java | 46 ++-- .../move/AbstractTurnExecution.java | 18 +- .../move/ContinuousWalkExecution.java | 4 +- .../instruction/move/TurnDirection.java | 9 +- .../instruction/move/TurnExecution.java | 4 +- .../instruction/move/TurnVectorExecution.java | 18 +- .../instruction/move/WalkExecution.java | 18 +- .../program/supplier/AnalogInputSupplier.java | 38 ++-- .../minion/skin/Base64SkinProvider.java | 73 ++++--- .../minions/minion/skin/NameSkinProvider.java | 17 +- .../minions/minion/skin/SkinProvider.java | 9 +- .../minions/minion/skin/UUIDSkinProvider.java | 17 +- .../mixinhelper/EntityViewMixinHelper.java | 3 +- .../antimobcap/ChunkLevelManagerAccessor.java | 8 +- .../mixins/ChunkTicketManagerFixMixin.java | 8 +- ...oundPlayerInfoUpdatePacket$EntryMixin.java | 22 ++ .../minions/mixins/ConnectionMixin.java | 4 +- .../minions/mixins/EntityAccessor.java | 4 +- ...yViewMixin.java => EntityGetterMixin.java} | 10 +- .../skippyall/minions/mixins/EntityMixin.java | 12 +- .../minions/mixins/MinecraftServerMixin.java | 13 +- .../{MobEntityMixin.java => MobMixin.java} | 18 +- .../minions/mixins/NaturalSpawnerMixin.java | 31 +++ .../mixins/PistonMovingBlockEntityMixin.java | 36 ++-- .../PlayerListEntryS2CPacket$EntryMixin.java | 22 -- .../minions/mixins/PlayerListMixin.java | 42 ++-- .../skippyall/minions/mixins/PlayerMixin.java | 12 +- ...=> ServerGamePacketListenerImplMixin.java} | 18 +- ...anagerMixin.java => SleepStatusMixin.java} | 12 +- .../minions/mixins/SpawnHelperMixin.java | 31 --- .../minions/mixins/TickRateManagerMixin.java | 16 +- .../antimobcap/ChunkLevelManagerMixin.java | 52 ----- ...gatorMixin.java => ChunkTrackerMixin.java} | 8 +- ...FixedPlayerDistanceChunkTrackerMixin.java} | 26 +-- .../antimobcap/DistanceManagerMixin.java | 52 +++++ .../antimobcap/ServerChunkCacheAccessor.java | 12 ++ .../antimobcap/ServerChunkCacheMixin.java | 23 ++ .../ServerChunkManagerAccessor.java | 12 -- .../antimobcap/ServerChunkManagerMixin.java | 23 -- .../compat/universal_graves/GraveMixin.java | 6 +- .../minions/module/MinionModule.java | 4 +- .../minions/module/ModuleInventory.java | 43 ++-- .../module/ModuleInventoryScreenHandler.java | 52 ++--- .../minions/polymer/VersionSync.java | 20 +- .../minions/program/InstructionRuntime.java | 6 +- .../program/consumer/ValueConsumer.java | 2 +- .../program/consumer/ValueConsumerType.java | 4 +- .../program/conversion/CastConverter.java | 12 +- .../minions/program/conversion/Casts.java | 8 +- .../program/conversion/ConverterList.java | 18 +- .../program/conversion/EqualityConverter.java | 10 +- .../program/conversion/ValueConverter.java | 8 +- .../instruction/ConfiguredInstruction.java | 26 +-- .../instruction/InstructionExecution.java | 14 +- .../program/instruction/InstructionType.java | 5 +- .../execution/TimedInstructionExecution.java | 10 +- .../program/supplier/FixedValueSupplier.java | 4 +- .../minions/program/supplier/Parameter.java | 2 +- .../program/supplier/ValueSupplier.java | 6 +- .../program/supplier/ValueSupplierList.java | 14 +- .../program/value/SimpleValueType.java | 7 +- .../minions/program/value/ValueType.java | 4 +- .../minions/registration/ClipboardTypes.java | 6 +- .../minions/registration/DocsEntryTypes.java | 6 +- .../minions/registration/GuiDisplayTypes.java | 12 +- .../minions/registration/Instructions.java | 7 +- .../minions/registration/MinionBlocks.java | 44 ++-- .../registration/MinionComponentTypes.java | 21 +- .../registration/MinionConfigOptions.java | 8 +- .../registration/MinionCreativeTab.java | 27 ++- .../minions/registration/MinionItems.java | 61 +++--- .../minions/registration/MinionListeners.java | 6 +- .../registration/MinionRegistries.java | 14 +- .../minions/registration/SkinProviders.java | 6 +- .../registration/SpecialAbilities.java | 6 +- .../minions/registration/ValueConverters.java | 6 +- .../minions/registration/ValueSuppliers.java | 6 +- .../minions/registration/ValueTypes.java | 25 ++- .../skippyall/minions/util/ModelIdUtil.java | 10 +- .../minions/util/TranslationUtil.java | 10 +- src/main/resources/minions.accesswidener | 6 +- src/main/resources/minions.mixins.json | 22 +- 140 files changed, 1646 insertions(+), 1675 deletions(-) create mode 100644 Minions Verbesserungsvorschläge.txt create mode 100644 src/main/java/io/github/skippyall/minions/mixins/ClientboundPlayerInfoUpdatePacket$EntryMixin.java rename src/main/java/io/github/skippyall/minions/mixins/{EntityViewMixin.java => EntityGetterMixin.java} (62%) rename src/main/java/io/github/skippyall/minions/mixins/{MobEntityMixin.java => MobMixin.java} (58%) create mode 100644 src/main/java/io/github/skippyall/minions/mixins/NaturalSpawnerMixin.java delete mode 100644 src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java rename src/main/java/io/github/skippyall/minions/mixins/{ServerPlayNetworkHandlerMixin.java => ServerGamePacketListenerImplMixin.java} (51%) rename src/main/java/io/github/skippyall/minions/mixins/{SleepManagerMixin.java => SleepStatusMixin.java} (68%) delete mode 100644 src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java delete mode 100644 src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManagerMixin.java rename src/main/java/io/github/skippyall/minions/mixins/antimobcap/{ChunkPosDistanceLevelPropagatorMixin.java => ChunkTrackerMixin.java} (63%) rename src/main/java/io/github/skippyall/minions/mixins/antimobcap/{ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin.java => DistanceManager$FixedPlayerDistanceChunkTrackerMixin.java} (71%) create mode 100644 src/main/java/io/github/skippyall/minions/mixins/antimobcap/DistanceManagerMixin.java create mode 100644 src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheAccessor.java create mode 100644 src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheMixin.java delete mode 100644 src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerAccessor.java delete mode 100644 src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerMixin.java diff --git a/Minions Verbesserungsvorschläge.txt b/Minions Verbesserungsvorschläge.txt new file mode 100644 index 0000000..ff3b856 --- /dev/null +++ b/Minions Verbesserungsvorschläge.txt @@ -0,0 +1,10 @@ +Module ohne Instruction nicht bei Instruction Auswahl vorschlagen ✓ +Mob Spawning durch Instruction an/aus +Referenz kopieren als Item, das beim linken verschwindet ✓ +zurück-Button (Jain) +Instructions stoppen / einfrieren bei Entfernung des Moduls ✓ +Verbindung mit Minion anzeigen ✓ +Schlagen auf Entities fixen ✓ +Signaländerung bei Trigger nach Tod des Minions mit Minion synchronisieren ✓ +Menüführung für Argumente verbessern (Nö) +direkt Wert zeigen ✓ diff --git a/build.gradle b/build.gradle index db268b5..344327e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'net.fabricmc.fabric-loom-remap' version '1.14-SNAPSHOT' + id 'net.fabricmc.fabric-loom-remap' version '1.16-SNAPSHOT' id 'maven-publish' } @@ -50,7 +50,7 @@ repositories { dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + mappings loom.officialMojangMappings() modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" // Fabric API. This is technically optional, but you probably want it anyway. diff --git a/src/client/java/io/github/skippyall/minions/client/MinionsClient.java b/src/client/java/io/github/skippyall/minions/client/MinionsClient.java index c99fdde..7981a3e 100644 --- a/src/client/java/io/github/skippyall/minions/client/MinionsClient.java +++ b/src/client/java/io/github/skippyall/minions/client/MinionsClient.java @@ -5,12 +5,12 @@ import io.github.skippyall.minions.polymer.VersionSync; import io.github.skippyall.minions.registration.MinionBlocks; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.rendering.v1.BlockRenderLayerMap; -import net.minecraft.client.render.BlockRenderLayer; +import net.minecraft.client.renderer.chunk.ChunkSectionLayer; public class MinionsClient implements ClientModInitializer { @Override public void onInitializeClient() { - BlockRenderLayerMap.putBlock(MinionBlocks.MINION_TRIGGER_BLOCK, BlockRenderLayer.TRANSLUCENT); + BlockRenderLayerMap.putBlock(MinionBlocks.MINION_TRIGGER_BLOCK, ChunkSectionLayer.TRANSLUCENT); PolymerClientNetworking.registerCommonHandler(VersionSync.VersionSyncPayload.class, (client, handler, payload) -> {}); } diff --git a/src/main/java/io/github/skippyall/minions/Minions.java b/src/main/java/io/github/skippyall/minions/Minions.java index 8aaba56..4231b3c 100644 --- a/src/main/java/io/github/skippyall/minions/Minions.java +++ b/src/main/java/io/github/skippyall/minions/Minions.java @@ -11,7 +11,7 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.minecraft.resource.ResourceType; +import net.minecraft.server.packs.PackType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,7 +31,7 @@ public class Minions implements ModInitializer { ServerLifecycleEvents.SERVER_STARTED.register(server -> { MinionPersistentState.get(server).getMinionData().forEach((uuid, data) -> { if(data.isSpawned()) { - MinionFakePlayer.spawnMinion(data, server.getOverworld(), null, null, true); + MinionFakePlayer.spawnMinion(data, server.overworld(), null, null, true); } }); }); @@ -40,6 +40,6 @@ public class Minions implements ModInitializer { PolymerResourcePackUtils.addModAssets(Minions.MOD_ID); - ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new DocsManager()); + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(new DocsManager()); } } diff --git a/src/main/java/io/github/skippyall/minions/block/input/AnalogInputBlock.java b/src/main/java/io/github/skippyall/minions/block/input/AnalogInputBlock.java index 0a7b247..8f10645 100644 --- a/src/main/java/io/github/skippyall/minions/block/input/AnalogInputBlock.java +++ b/src/main/java/io/github/skippyall/minions/block/input/AnalogInputBlock.java @@ -1,24 +1,24 @@ package io.github.skippyall.minions.block.input; import io.github.skippyall.minions.clipboard.ClipboardItem; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; public class AnalogInputBlock extends Block { - public AnalogInputBlock(Settings settings) { + public AnalogInputBlock(Properties settings) { super(settings); } @Override - protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) { - if(!world.isClient) { - player.getInventory().offer(ClipboardItem.createBlockPosReference(world, pos), true); + protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { + if(!world.isClientSide) { + player.getInventory().placeItemBackInInventory(ClipboardItem.createBlockPosReference(world, pos), true); } - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } } diff --git a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java index dd2d0cb..c814f5a 100644 --- a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java +++ b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java @@ -5,59 +5,59 @@ import io.github.skippyall.minions.clipboard.InstructionClipboard; import io.github.skippyall.minions.minion.MinionPersistentState; import io.github.skippyall.minions.registration.MinionBlocks; import io.github.skippyall.minions.registration.MinionComponentTypes; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; -public abstract class InstructionBoundBlock extends Block implements BlockEntityProvider { - public InstructionBoundBlock(Settings settings) { +public abstract class InstructionBoundBlock extends Block implements EntityBlock { + public InstructionBoundBlock(Properties settings) { super(settings); } protected abstract BlockEntityType> getBlockEntityType(); @Override - protected ActionResult onUseWithItem(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if(stack.get(MinionComponentTypes.REFERENCE) instanceof InstructionClipboard instruction) { world.getBlockEntity(pos, getBlockEntityType()).ifPresent(be -> { be.setInstruction(instruction.selectedMinion(), instruction.selectedInstruction()); - player.playSoundToPlayer(SoundEvents.BLOCK_NOTE_BLOCK_CHIME.value(), SoundCategory.BLOCKS, 1, 1); - stack.decrement(1); + player.playNotifySound(SoundEvents.NOTE_BLOCK_CHIME.value(), SoundSource.BLOCKS, 1, 1); + stack.shrink(1); }); - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } - return super.onUseWithItem(stack, state, world, pos, player, hand, hit); + return super.useItemOn(stack, state, world, pos, player, hand, hit); } @Override - protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) { - if(world.isClient()) { - return ActionResult.CONSUME; + protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { + if(world.isClientSide()) { + return InteractionResult.CONSUME; } world.getBlockEntity(pos, getBlockEntityType()).ifPresent(be -> { String name = MinionPersistentState.get(world.getServer()).getMinionData(be.getMinionUuid()).name(); - player.sendMessage(Text.translatable("minions.reference.instruction.tooltip", name, be.getInstructionName()), true); + player.displayClientMessage(Component.translatable("minions.reference.instruction.tooltip", name, be.getInstructionName()), true); }); - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } @Override - protected void onStateReplaced(BlockState state, ServerWorld world, BlockPos pos, boolean moved) { - super.onStateReplaced(state, world, pos, moved); + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel world, BlockPos pos, boolean moved) { + super.affectNeighborsAfterRemoval(state, world, pos, moved); world.getBlockEntity(pos, MinionBlocks.MINION_TRIGGER_BE_TYPE).ifPresent(MinionTriggerBlockEntity::removeListener); } } diff --git a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java index 39f0c49..5ae7137 100644 --- a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java +++ b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java @@ -4,14 +4,13 @@ import io.github.skippyall.minions.listener.BlockEntityMinionListener; import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.instruction.ConfiguredInstruction; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.math.BlockPos; - import java.util.Optional; import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; public abstract class InstructionBoundBlockEntity> extends BlockEntity { protected UUID minionUuid; @@ -26,14 +25,14 @@ public abstract class InstructionBoundBlockEntity getListenerClass(); public void removeListener() { - if(world instanceof ServerWorld serverWorld) { + if(level instanceof ServerLevel serverWorld) { L listener = getListener(); listener.remove(serverWorld.getServer()); } } public void addListener() { - if(world instanceof ServerWorld serverWorld) { + if(level instanceof ServerLevel serverWorld) { L listener = createListener(); listener.add(serverWorld.getServer()); } @@ -44,11 +43,11 @@ public abstract class InstructionBoundBlockEntity getMinion() { - if(minionUuid != null && world != null && world.getPlayerByUuid(minionUuid) instanceof MinionFakePlayer minion) { + if(minionUuid != null && level != null && level.getPlayerByUUID(minionUuid) instanceof MinionFakePlayer minion) { return Optional.of(minion); } return Optional.empty(); @@ -71,6 +70,6 @@ public abstract class InstructionBoundBlockEntity CODEC = createCodec(MinionTriggerBlock::new); + public static final MapCodec CODEC = simpleCodec(MinionTriggerBlock::new); - public static final BooleanProperty POWERED = BooleanProperty.of("powered"); - public static final VoxelShape SHAPE = Block.createColumnShape(16.0, 0.0, 2.0); + public static final BooleanProperty POWERED = BooleanProperty.create("powered"); + public static final VoxelShape SHAPE = Block.column(16.0, 0.0, 2.0); - public MinionTriggerBlock(Settings settings) { + public MinionTriggerBlock(Properties settings) { super(settings); - setDefaultState(getDefaultState().with(POWERED, false)); + registerDefaultState(defaultBlockState().setValue(POWERED, false)); } @Override - protected VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + protected VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { return SHAPE; } @Override - protected boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { - BlockPos blockPos = pos.down(); + protected boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { + BlockPos blockPos = pos.below(); return this.canPlaceAbove(world, blockPos, world.getBlockState(blockPos)); } - protected boolean canPlaceAbove(WorldView world, BlockPos pos, BlockState state) { - return state.isSideSolid(world, pos, Direction.UP, SideShapeType.RIGID); + protected boolean canPlaceAbove(LevelReader world, BlockPos pos, BlockState state) { + return state.isFaceSturdy(world, pos, Direction.UP, SupportType.RIGID); } @Override - protected void appendProperties(StateManager.Builder builder) { + protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(POWERED); } @Override - protected void neighborUpdate(BlockState state, World world, BlockPos pos, Block sourceBlock, @Nullable WireOrientation wireOrientation, boolean notify) { - if(!canPlaceAt(state, world, pos)) { - dropStacks(state, world, pos); + protected void neighborChanged(BlockState state, Level world, BlockPos pos, Block sourceBlock, @Nullable Orientation wireOrientation, boolean notify) { + if(!canSurvive(state, world, pos)) { + dropResources(state, world, pos); world.removeBlock(pos, false); return; } - boolean newPower = world.isReceivingRedstonePower(pos); - if(state.get(POWERED) != newPower) { - world.setBlockState(pos, state.with(POWERED, newPower)); + boolean newPower = world.hasNeighborSignal(pos); + if(state.getValue(POWERED) != newPower) { + world.setBlockAndUpdate(pos, state.setValue(POWERED, newPower)); world.getBlockEntity(pos, MinionBlocks.MINION_TRIGGER_BE_TYPE).ifPresent(MinionTriggerBlockEntity::updatePower); } } @Override - protected boolean hasComparatorOutput(BlockState state) { + protected boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - protected int getComparatorOutput(BlockState state, World world, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { return world.getBlockEntity(pos, MinionBlocks.MINION_TRIGGER_BE_TYPE).map(MinionTriggerBlockEntity::getComparatorOutput).orElse(0); } @Override - public @Nullable BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new MinionTriggerBlockEntity(pos, state); } @@ -107,19 +107,19 @@ public class MinionTriggerBlock extends InstructionBoundBlock implements Polymer @Override public BlockState getPolymerBlockState(BlockState state, PacketContext context) { - return VersionSync.isOnClient(context) ? state : net.minecraft.block.Blocks.COMPARATOR.getDefaultState().with(AbstractRedstoneGateBlock.POWERED, state.get(POWERED)); + 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, ServerPlayerEntity player) { + public boolean handleMiningOnServer(ItemStack tool, BlockState state, BlockPos pos, ServerPlayer player) { return false; } @Override - public @Nullable ElementHolder createElementHolder(ServerWorld world, BlockPos pos, BlockState initialBlockState) { + public @Nullable ElementHolder createElementHolder(ServerLevel world, BlockPos pos, BlockState initialBlockState) { ElementHolder holder = new ElementHolder() { @Override - public boolean startWatching(ServerPlayNetworkHandler player) { + public boolean startWatching(ServerGamePacketListenerImpl player) { if(PolymerResourcePackUtils.hasMainPack(player) && !VersionSync.isOnClient(player)) { return super.startWatching(player); } else { @@ -128,7 +128,7 @@ public class MinionTriggerBlock extends InstructionBoundBlock implements Polymer } }; ItemStack stack = new ItemStack(Items.BARRIER); - stack.set(DataComponentTypes.ITEM_MODEL, Identifier.of(Minions.MOD_ID, "minion_trigger_no_plate_" + (initialBlockState.get(MinionTriggerBlock.POWERED) ? "active" : "inactive"))); + stack.set(DataComponents.ITEM_MODEL, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "minion_trigger_no_plate_" + (initialBlockState.getValue(MinionTriggerBlock.POWERED) ? "active" : "inactive"))); ItemDisplayElement element = new ItemDisplayElement(stack); element.setItemDisplayContext(ItemDisplayContext.NONE); diff --git a/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlockEntity.java b/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlockEntity.java index 32ed91e..8008187 100644 --- a/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlockEntity.java +++ b/src/main/java/io/github/skippyall/minions/block/miniontrigger/MinionTriggerBlockEntity.java @@ -2,11 +2,11 @@ package io.github.skippyall.minions.block.miniontrigger; import io.github.skippyall.minions.block.instruction_bound.InstructionBoundBlockEntity; import io.github.skippyall.minions.registration.MinionBlocks; -import net.minecraft.block.BlockState; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; -import net.minecraft.util.Uuids; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.UUIDUtil; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; public class MinionTriggerBlockEntity extends InstructionBoundBlockEntity { public MinionTriggerBlockEntity(BlockPos pos, BlockState state) { @@ -15,7 +15,7 @@ public class MinionTriggerBlockEntity extends InstructionBoundBlockEntity { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - World.CODEC.fieldOf("world").forGetter(listener -> listener.worldKey), + Level.RESOURCE_KEY_CODEC.fieldOf("world").forGetter(listener -> listener.worldKey), BlockPos.CODEC.fieldOf("pos").forGetter(listener -> listener.pos), - Uuids.CODEC.fieldOf("minionUuid").forGetter(listener -> listener.minionUuid), + UUIDUtil.AUTHLIB_CODEC.fieldOf("minionUuid").forGetter(listener -> listener.minionUuid), Codec.STRING.fieldOf("instructionName").forGetter(listener -> listener.instructionName) ).apply(instance, MinionTriggerMinionListener::new)); @@ -36,7 +35,7 @@ public class MinionTriggerMinionListener extends BlockEntityMinionInstructionLis boolean runningCache; boolean incomingPowerCache; - MinionTriggerMinionListener(RegistryKey worldKey, BlockPos pos, UUID minionUuid, String instructionName) { + MinionTriggerMinionListener(ResourceKey worldKey, BlockPos pos, UUID minionUuid, String instructionName) { super(worldKey, pos, minionUuid, MinionBlocks.MINION_TRIGGER_BE_TYPE); this.instructionName = Objects.requireNonNull(instructionName); } @@ -83,14 +82,14 @@ public class MinionTriggerMinionListener extends BlockEntityMinionInstructionLis } @Override - public Optional getCodecId() { - return Optional.of(Identifier.of(Minions.MOD_ID, "minion_trigger")); + public Optional getCodecId() { + return Optional.of(ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "minion_trigger")); } public void updateComparatorsIfLoaded(MinecraftServer server) { - World world = server.getWorld(worldKey); - if(world.isPosLoaded(pos)) { - world.updateComparators(pos, MinionBlocks.MINION_TRIGGER_BLOCK); + Level world = server.getLevel(worldKey); + if(world.isLoaded(pos)) { + world.updateNeighbourForOutputSignal(pos, MinionBlocks.MINION_TRIGGER_BLOCK); } } diff --git a/src/main/java/io/github/skippyall/minions/clipboard/BlockPosClipboard.java b/src/main/java/io/github/skippyall/minions/clipboard/BlockPosClipboard.java index fb607d6..ad2fe83 100644 --- a/src/main/java/io/github/skippyall/minions/clipboard/BlockPosClipboard.java +++ b/src/main/java/io/github/skippyall/minions/clipboard/BlockPosClipboard.java @@ -2,20 +2,19 @@ package io.github.skippyall.minions.clipboard; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.component.ComponentsAccess; -import net.minecraft.item.Item; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.registry.RegistryKey; -import net.minecraft.text.Text; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - import java.util.function.Consumer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.component.DataComponentGetter; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; -public record BlockPosClipboard(RegistryKey world, BlockPos pos) implements Clipboard { +public record BlockPosClipboard(ResourceKey world, BlockPos pos) implements Clipboard { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( - World.CODEC.fieldOf("world").forGetter(BlockPosClipboard::world), + Level.RESOURCE_KEY_CODEC.fieldOf("world").forGetter(BlockPosClipboard::world), BlockPos.CODEC.fieldOf("pos").forGetter(BlockPosClipboard::pos) ).apply(instance, BlockPosClipboard::new) ); @@ -27,7 +26,7 @@ public record BlockPosClipboard(RegistryKey world, BlockPos pos) implemen } @Override - public void appendTooltip(Item.TooltipContext context, Consumer textConsumer, TooltipType type, ComponentsAccess components) { - textConsumer.accept(Text.translatable("minions.reference.block.tooltip", pos.toString())); + public void addToTooltip(Item.TooltipContext context, Consumer textConsumer, TooltipFlag type, DataComponentGetter components) { + textConsumer.accept(Component.translatable("minions.reference.block.tooltip", pos.toString())); } } diff --git a/src/main/java/io/github/skippyall/minions/clipboard/Clipboard.java b/src/main/java/io/github/skippyall/minions/clipboard/Clipboard.java index 0f89e7b..8777a60 100644 --- a/src/main/java/io/github/skippyall/minions/clipboard/Clipboard.java +++ b/src/main/java/io/github/skippyall/minions/clipboard/Clipboard.java @@ -3,12 +3,11 @@ package io.github.skippyall.minions.clipboard; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.item.tooltip.TooltipAppender; - import java.util.function.Function; +import net.minecraft.world.item.component.TooltipProvider; -public interface Clipboard extends TooltipAppender { - Codec CODEC = MinionRegistries.CLIPBOARD_TYPES.getCodec().dispatch(Clipboard::getCodec, Function.identity()); +public interface Clipboard extends TooltipProvider { + Codec CODEC = MinionRegistries.CLIPBOARD_TYPES.byNameCodec().dispatch(Clipboard::getCodec, Function.identity()); MapCodec getCodec(); } 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 29e0e23..a898818 100644 --- a/src/main/java/io/github/skippyall/minions/clipboard/ClipboardItem.java +++ b/src/main/java/io/github/skippyall/minions/clipboard/ClipboardItem.java @@ -4,19 +4,19 @@ 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.minecraft.component.DataComponentTypes; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.ResourceLocation; +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.jetbrains.annotations.Nullable; import xyz.nucleoid.packettweaker.PacketContext; public class ClipboardItem extends Item implements PolymerItem { - public ClipboardItem(Settings settings) { + public ClipboardItem(Properties settings) { super(settings); } @@ -26,26 +26,26 @@ public class ClipboardItem extends Item implements PolymerItem { } @Override - public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { + public @Nullable ResourceLocation getPolymerItemModel(ItemStack stack, PacketContext context) { return null; } @Override - public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipType, PacketContext context) { + public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipFlag tooltipType, PacketContext context) { ItemStack stack = PolymerItem.super.getPolymerItemStack(itemStack, tooltipType, context); - stack.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true); + stack.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true); return stack; } public static ItemStack createInstructionReference(MinionFakePlayer minion, String instructionName) { ItemStack stack = new ItemStack(MinionItems.REFERENCE_ITEM); - stack.set(MinionComponentTypes.REFERENCE, new InstructionClipboard(minion.getUuid(), instructionName, minion.getGameProfile().getName())); + stack.set(MinionComponentTypes.REFERENCE, new InstructionClipboard(minion.getUUID(), instructionName, minion.getGameProfile().getName())); return stack; } - public static ItemStack createBlockPosReference(World world, BlockPos pos) { + public static ItemStack createBlockPosReference(Level world, BlockPos pos) { ItemStack stack = new ItemStack(MinionItems.REFERENCE_ITEM); - stack.set(MinionComponentTypes.REFERENCE, new BlockPosClipboard(world.getRegistryKey(), pos)); + stack.set(MinionComponentTypes.REFERENCE, new BlockPosClipboard(world.dimension(), pos)); return stack; } } diff --git a/src/main/java/io/github/skippyall/minions/clipboard/InstructionClipboard.java b/src/main/java/io/github/skippyall/minions/clipboard/InstructionClipboard.java index 2491150..dede17a 100644 --- a/src/main/java/io/github/skippyall/minions/clipboard/InstructionClipboard.java +++ b/src/main/java/io/github/skippyall/minions/clipboard/InstructionClipboard.java @@ -3,19 +3,18 @@ package io.github.skippyall.minions.clipboard; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.component.ComponentsAccess; -import net.minecraft.item.Item; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.text.Text; -import net.minecraft.util.Uuids; - import java.util.UUID; import java.util.function.Consumer; +import net.minecraft.core.UUIDUtil; +import net.minecraft.core.component.DataComponentGetter; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.TooltipFlag; public record InstructionClipboard(UUID selectedMinion, String selectedInstruction, String visualMinionName) implements Clipboard { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( - Uuids.CODEC.fieldOf("selectedMinion").forGetter(InstructionClipboard::selectedMinion), + UUIDUtil.AUTHLIB_CODEC.fieldOf("selectedMinion").forGetter(InstructionClipboard::selectedMinion), Codec.STRING.fieldOf("selectedInstruction").forGetter(InstructionClipboard::selectedInstruction), Codec.STRING.fieldOf("visualMinionName").forGetter(InstructionClipboard::visualMinionName) ).apply(instance, InstructionClipboard::new)); @@ -26,7 +25,7 @@ public record InstructionClipboard(UUID selectedMinion, String selectedInstructi } @Override - public void appendTooltip(Item.TooltipContext context, Consumer textConsumer, TooltipType type, ComponentsAccess components) { - textConsumer.accept(Text.translatable("minions.reference.instruction.tooltip", selectedInstruction, visualMinionName)); + public void addToTooltip(Item.TooltipContext context, Consumer textConsumer, TooltipFlag type, DataComponentGetter components) { + textConsumer.accept(Component.translatable("minions.reference.instruction.tooltip", selectedInstruction, visualMinionName)); } } diff --git a/src/main/java/io/github/skippyall/minions/command/DocsSubcommand.java b/src/main/java/io/github/skippyall/minions/command/DocsSubcommand.java index 07e7362..6db8264 100644 --- a/src/main/java/io/github/skippyall/minions/command/DocsSubcommand.java +++ b/src/main/java/io/github/skippyall/minions/command/DocsSubcommand.java @@ -6,31 +6,30 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import io.github.skippyall.minions.docs.DocsManager; -import net.minecraft.command.argument.IdentifierArgumentType; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.util.Identifier; - import java.util.concurrent.CompletableFuture; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.arguments.ResourceLocationArgument; +import net.minecraft.resources.ResourceLocation; -import static net.minecraft.server.command.CommandManager.argument; -import static net.minecraft.server.command.CommandManager.literal; +import static net.minecraft.commands.Commands.argument; +import static net.minecraft.commands.Commands.literal; public class DocsSubcommand { - public static final LiteralArgumentBuilder DOCS = literal("docs") + public static final LiteralArgumentBuilder DOCS = literal("docs") .then( - argument("docName", IdentifierArgumentType.identifier()) + argument("docName", ResourceLocationArgument.id()) .suggests(DocsSubcommand::getSuggestions) .executes(DocsSubcommand::execute) ); - public static CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) { + public static CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) { DocsManager.getDocsEntryIds().forEach(id -> builder.suggest(id.toString())); return CompletableFuture.completedFuture(builder.build()); } - public static int execute(CommandContext context) throws CommandSyntaxException { - Identifier id = IdentifierArgumentType.getIdentifier(context, "docName"); - DocsManager.showDocsEntry(context.getSource().getPlayerOrThrow(), id); + public static int execute(CommandContext context) throws CommandSyntaxException { + ResourceLocation id = ResourceLocationArgument.getId(context, "docName"); + DocsManager.showDocsEntry(context.getSource().getPlayerOrException(), id); return 1; } } diff --git a/src/main/java/io/github/skippyall/minions/command/ListSubcommand.java b/src/main/java/io/github/skippyall/minions/command/ListSubcommand.java index 4377cc5..f4ac89f 100644 --- a/src/main/java/io/github/skippyall/minions/command/ListSubcommand.java +++ b/src/main/java/io/github/skippyall/minions/command/ListSubcommand.java @@ -4,21 +4,20 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import io.github.skippyall.minions.minion.MinionData; import io.github.skippyall.minions.minion.MinionPersistentState; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.text.Text; - import java.util.Collection; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.network.chat.Component; -import static net.minecraft.server.command.CommandManager.literal; +import static net.minecraft.commands.Commands.literal; public class ListSubcommand { - public static final LiteralArgumentBuilder LIST = literal("list") + public static final LiteralArgumentBuilder LIST = literal("list") .executes(ListSubcommand::list); - public static int list(CommandContext context) { + public static int list(CommandContext context) { Collection minions = MinionPersistentState.get(context.getSource().getServer()).getMinionData().values(); for (MinionData minion : minions) { - context.getSource().sendFeedback(() -> Text.literal(minion.name() + "(" + minion.uuid() + "):" + minion.isSpawned()), false); + context.getSource().sendSuccess(() -> Component.literal(minion.name() + "(" + minion.uuid() + "):" + minion.isSpawned()), false); } return 0; } diff --git a/src/main/java/io/github/skippyall/minions/command/MinionArgument.java b/src/main/java/io/github/skippyall/minions/command/MinionArgument.java index 9bd3a06..bd4308b 100644 --- a/src/main/java/io/github/skippyall/minions/command/MinionArgument.java +++ b/src/main/java/io/github/skippyall/minions/command/MinionArgument.java @@ -9,16 +9,15 @@ import com.mojang.brigadier.suggestion.SuggestionsBuilder; import io.github.skippyall.minions.minion.MinionData; import io.github.skippyall.minions.minion.MinionPersistentState; import io.github.skippyall.minions.minion.MinionProfileUtils; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.text.Text; - import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; public class MinionArgument { - public static final SimpleCommandExceptionType MINION_NOT_PRESENT = new SimpleCommandExceptionType(Text.translatable("minions.command.minion.not_present")); + public static final SimpleCommandExceptionType MINION_NOT_PRESENT = new SimpleCommandExceptionType(Component.translatable("minions.command.minion.not_present")); public static final MinionSuggestionProvider SUGGESTION_PROVIDER = new MinionSuggestionProvider(); @@ -38,9 +37,9 @@ public class MinionArgument { return data.get(); } - public static class MinionSuggestionProvider implements SuggestionProvider { + public static class MinionSuggestionProvider implements SuggestionProvider { @Override - public CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) throws CommandSyntaxException { + public CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) throws CommandSyntaxException { for (MinionData data : MinionPersistentState.get(context.getSource().getServer()).getMinionDataList()) { builder.suggest(data.name()); } diff --git a/src/main/java/io/github/skippyall/minions/command/MinionsCommand.java b/src/main/java/io/github/skippyall/minions/command/MinionsCommand.java index 2823d68..99453de 100644 --- a/src/main/java/io/github/skippyall/minions/command/MinionsCommand.java +++ b/src/main/java/io/github/skippyall/minions/command/MinionsCommand.java @@ -3,15 +3,15 @@ package io.github.skippyall.minions.command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import io.github.skippyall.minions.MinionsConfig; -import net.minecraft.command.CommandRegistryAccess; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.commands.CommandBuildContext; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; -import static net.minecraft.server.command.CommandManager.literal; +import static net.minecraft.commands.Commands.literal; public class MinionsCommand { - public static void register(CommandDispatcher dispatcher, CommandRegistryAccess access, CommandManager.RegistrationEnvironment environment) { - LiteralArgumentBuilder builder = literal("minions") + public static void register(CommandDispatcher dispatcher, CommandBuildContext access, Commands.CommandSelection environment) { + LiteralArgumentBuilder builder = literal("minions") .then(SpawnSubcommand.SPAWN) .then(ListSubcommand.LIST) .then(DocsSubcommand.DOCS) diff --git a/src/main/java/io/github/skippyall/minions/command/MobCapDebugSubcommand.java b/src/main/java/io/github/skippyall/minions/command/MobCapDebugSubcommand.java index aa3f93e..075be6f 100644 --- a/src/main/java/io/github/skippyall/minions/command/MobCapDebugSubcommand.java +++ b/src/main/java/io/github/skippyall/minions/command/MobCapDebugSubcommand.java @@ -4,21 +4,21 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor; -import io.github.skippyall.minions.mixins.antimobcap.ServerChunkManagerAccessor; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.world.ChunkLevelManager; -import net.minecraft.text.Text; +import io.github.skippyall.minions.mixins.antimobcap.ServerChunkCacheAccessor; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.DistanceManager; -import static net.minecraft.server.command.CommandManager.literal; +import static net.minecraft.commands.Commands.literal; public class MobCapDebugSubcommand { - public static final LiteralArgumentBuilder MOB_CAP_DEBUG = literal("mobcapdebug") + public static final LiteralArgumentBuilder MOB_CAP_DEBUG = literal("mobcapdebug") .executes(MobCapDebugSubcommand::mobcapdebugCommand); - public static int mobcapdebugCommand(CommandContext context) { - ChunkLevelManager levelManager = ((ServerChunkManagerAccessor)context.getSource().getWorld().getChunkManager()).getLevelManager(); + public static int mobcapdebugCommand(CommandContext context) { + DistanceManager levelManager = ((ServerChunkCacheAccessor)context.getSource().getLevel().getChunkSource()).getDistanceManager(); int tickedChunkCount = ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)((ChunkLevelManagerAccessor)levelManager).minions$getMinionless()).minions$getTickedChunkCount(); - context.getSource().sendFeedback(() -> Text.of(String.valueOf(tickedChunkCount)), false); + context.getSource().sendSuccess(() -> Component.nullToEmpty(String.valueOf(tickedChunkCount)), false); return 0; } } diff --git a/src/main/java/io/github/skippyall/minions/command/SpawnSubcommand.java b/src/main/java/io/github/skippyall/minions/command/SpawnSubcommand.java index 32c76f9..96970a8 100644 --- a/src/main/java/io/github/skippyall/minions/command/SpawnSubcommand.java +++ b/src/main/java/io/github/skippyall/minions/command/SpawnSubcommand.java @@ -6,24 +6,24 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.CommandSyntaxException; import io.github.skippyall.minions.minion.MinionData; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.command.argument.PosArgument; -import net.minecraft.command.argument.Vec3ArgumentType; -import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.arguments.coordinates.Coordinates; +import net.minecraft.commands.arguments.coordinates.Vec3Argument; -import static net.minecraft.server.command.CommandManager.argument; -import static net.minecraft.server.command.CommandManager.literal; +import static net.minecraft.commands.Commands.argument; +import static net.minecraft.commands.Commands.literal; public class SpawnSubcommand { - public static final LiteralArgumentBuilder SPAWN = literal("spawn") - .requires(source -> source.hasPermissionLevel(2)) + public static final LiteralArgumentBuilder SPAWN = literal("spawn") + .requires(source -> source.hasPermission(2)) .then(argument("minion", StringArgumentType.word()) .suggests(MinionArgument.SUGGESTION_PROVIDER) - .then(argument("pos", Vec3ArgumentType.vec3()) + .then(argument("pos", Vec3Argument.vec3()) .executes(context -> spawnCommand( context.getSource(), StringArgumentType.getString(context, "minion"), - Vec3ArgumentType.getPosArgument(context, "pos"), + Vec3Argument.getCoordinates(context, "pos"), false ) ) @@ -32,7 +32,7 @@ public class SpawnSubcommand { spawnCommand( context.getSource(), StringArgumentType.getString(context, "minion"), - Vec3ArgumentType.getPosArgument(context, "pos"), + Vec3Argument.getCoordinates(context, "pos"), BoolArgumentType.getBool(context, "force") ) ) @@ -47,9 +47,9 @@ public class SpawnSubcommand { )) ); - public static int spawnCommand(ServerCommandSource source, String minion, PosArgument pos, boolean force) throws CommandSyntaxException { + public static int spawnCommand(CommandSourceStack source, String minion, Coordinates pos, boolean force) throws CommandSyntaxException { MinionData data = MinionArgument.parse(source.getServer(), minion); - MinionFakePlayer.spawnMinion(data, source.getWorld(), pos != null ? pos.getPos(source) : null, pos != null ? pos.getRotation(source) : null, force); + MinionFakePlayer.spawnMinion(data, source.getLevel(), pos != null ? pos.getPosition(source) : null, pos != null ? pos.getRotation(source) : null, force); return 0; } } diff --git a/src/main/java/io/github/skippyall/minions/command/TestSubcommand.java b/src/main/java/io/github/skippyall/minions/command/TestSubcommand.java index 089b69a..4b47cdc 100644 --- a/src/main/java/io/github/skippyall/minions/command/TestSubcommand.java +++ b/src/main/java/io/github/skippyall/minions/command/TestSubcommand.java @@ -3,33 +3,32 @@ package io.github.skippyall.minions.command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import io.github.skippyall.minions.Minions; -import net.minecraft.block.Blocks; -import net.minecraft.command.argument.BlockPosArgumentType; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.text.Text; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; - import java.util.Collection; import java.util.HashSet; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.arguments.coordinates.BlockPosArgument; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; -import static net.minecraft.server.command.CommandManager.argument; -import static net.minecraft.server.command.CommandManager.literal; +import static net.minecraft.commands.Commands.argument; +import static net.minecraft.commands.Commands.literal; public class TestSubcommand { - public static LiteralArgumentBuilder TEST = literal("test") - .then(argument("pos", BlockPosArgumentType.blockPos()) + public static LiteralArgumentBuilder TEST = literal("test") + .then(argument("pos", BlockPosArgument.blockPos()) .executes(TestSubcommand::execute) ); - private static int execute(CommandContext context) { + private static int execute(CommandContext context) { try { - BlockPos pos = BlockPosArgumentType.getBlockPos(context, "pos"); - Collection result = findInputs(context.getSource().getWorld(), pos); + BlockPos pos = BlockPosArgument.getBlockPos(context, "pos"); + Collection result = findInputs(context.getSource().getLevel(), pos); for (BlockPos resultPos : result) { - context.getSource().sendFeedback(() -> Text.literal(resultPos.toShortString()), false); + context.getSource().sendSuccess(() -> Component.literal(resultPos.toShortString()), false); } } catch (Throwable e) { Minions.LOGGER.error("Error", e); @@ -37,7 +36,7 @@ public class TestSubcommand { return 0; } - private static Collection findInputs(World world, BlockPos pos) { + private static Collection findInputs(Level world, BlockPos pos) { //positions that are already processed Collection visitedPositions = new HashSet<>(); //positions we are currently looking at @@ -53,7 +52,7 @@ public class TestSubcommand { for(BlockPos currentPosition : currentPositions) { for(Direction dir : Direction.values()) { //check each neighbor of the current positions - BlockPos newPos = currentPosition.offset(dir); + BlockPos newPos = currentPosition.relative(dir); //Do not check blocks that were already checked if(!visitedPositions.contains(newPos)) { if (world.getBlockState(newPos).getBlock() == Blocks.REDSTONE_BLOCK) { diff --git a/src/main/java/io/github/skippyall/minions/docs/DocsEntry.java b/src/main/java/io/github/skippyall/minions/docs/DocsEntry.java index 31a4a75..7da1ca3 100644 --- a/src/main/java/io/github/skippyall/minions/docs/DocsEntry.java +++ b/src/main/java/io/github/skippyall/minions/docs/DocsEntry.java @@ -4,18 +4,17 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.dialog.body.DialogBody; -import net.minecraft.registry.DynamicRegistryManager; - import java.util.List; import java.util.function.Function; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.dialog.body.DialogBody; public interface DocsEntry { - Codec CODEC = MinionRegistries.DOCS_ENTRY_TYPES.getCodec().dispatch(DocsEntry::getCodec, Function.identity()); + Codec CODEC = MinionRegistries.DOCS_ENTRY_TYPES.byNameCodec().dispatch(DocsEntry::getCodec, Function.identity()); Metadata getMetadata(); - List getDialog(DynamicRegistryManager manager); + List getDialog(RegistryAccess manager); MapCodec getCodec(); diff --git a/src/main/java/io/github/skippyall/minions/docs/DocsManager.java b/src/main/java/io/github/skippyall/minions/docs/DocsManager.java index ea7de95..4cf2ba4 100644 --- a/src/main/java/io/github/skippyall/minions/docs/DocsManager.java +++ b/src/main/java/io/github/skippyall/minions/docs/DocsManager.java @@ -4,22 +4,21 @@ import com.google.gson.JsonParseException; import com.mojang.serialization.JsonOps; import io.github.skippyall.minions.Minions; import net.fabricmc.fabric.api.resource.SimpleResourceReloadListener; -import net.minecraft.dialog.AfterAction; -import net.minecraft.dialog.DialogActionButtonData; -import net.minecraft.dialog.DialogButtonData; -import net.minecraft.dialog.DialogCommonData; -import net.minecraft.dialog.action.SimpleDialogAction; -import net.minecraft.dialog.type.MultiActionDialog; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.resource.Resource; -import net.minecraft.resource.ResourceManager; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.ClickEvent; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import net.minecraft.util.Pair; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.dialog.ActionButton; +import net.minecraft.server.dialog.CommonButtonData; +import net.minecraft.server.dialog.CommonDialogData; +import net.minecraft.server.dialog.DialogAction; +import net.minecraft.server.dialog.MultiActionDialog; +import net.minecraft.server.dialog.action.StaticAction; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.util.StrictJsonParser; - +import net.minecraft.util.Tuple; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; @@ -31,46 +30,46 @@ import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -public class DocsManager implements SimpleResourceReloadListener, DocsTree>> { - private static Map docs; +public class DocsManager implements SimpleResourceReloadListener, DocsTree>> { + private static Map docs; private static DocsTree tree; public static DocsTree getTree() { return tree; } - public static void showDocsEntry(ServerPlayerEntity player, Identifier id) { + public static void showDocsEntry(ServerPlayer player, ResourceLocation id) { DocsEntry entry = getDocsEntry(id); if(entry == null) { return; } - List buttons = new ArrayList<>(); + List buttons = new ArrayList<>(); if(tree != null) { DocsTree.DocElement element = tree.getElement(id); if (element.previous() != null) { - Identifier previousId = element.previous().getId(); - buttons.add(getDialogButton(Text.literal("<- ").append(Text.translatable(getDocsEntry(previousId).getMetadata().titleKey())), previousId.toString())); + ResourceLocation previousId = element.previous().getId(); + buttons.add(getDialogButton(Component.literal("<- ").append(Component.translatable(getDocsEntry(previousId).getMetadata().titleKey())), previousId.toString())); } if (element.next() != null) { - Identifier nextId = element.next().getId(); - buttons.add(getDialogButton(Text.translatable(getDocsEntry(nextId).getMetadata().titleKey()).append(Text.literal(" ->")), nextId.toString())); + ResourceLocation nextId = element.next().getId(); + buttons.add(getDialogButton(Component.translatable(getDocsEntry(nextId).getMetadata().titleKey()).append(Component.literal(" ->")), nextId.toString())); } } - buttons.add(new DialogActionButtonData( - new DialogButtonData(Text.translatable("gui.ok"), 100), + buttons.add(new ActionButton( + new CommonButtonData(Component.translatable("gui.ok"), 100), Optional.empty() )); - player.openDialog(RegistryEntry.of(new MultiActionDialog( - new DialogCommonData( - Text.translatable(entry.getMetadata().titleKey()), + player.openDialog(Holder.direct(new MultiActionDialog( + new CommonDialogData( + Component.translatable(entry.getMetadata().titleKey()), Optional.empty(), true, false, - AfterAction.CLOSE, - entry.getDialog(player.getRegistryManager()), + DialogAction.CLOSE, + entry.getDialog(player.registryAccess()), List.of() ), buttons, @@ -79,38 +78,38 @@ public class DocsManager implements SimpleResourceReloadListener getDocsEntryIds() { + public static Collection getDocsEntryIds() { return docs.keySet(); } @Override - public CompletableFuture, DocsTree>> load(ResourceManager resourceManager, Executor executor) { + public CompletableFuture, DocsTree>> load(ResourceManager resourceManager, Executor executor) { return CompletableFuture.supplyAsync(() -> { - Map resources = resourceManager.findResources("docs", id -> id.getNamespace().equals(Minions.MOD_ID) && id.getPath().endsWith(".json")); + Map resources = resourceManager.listResources("docs", id -> id.getNamespace().equals(Minions.MOD_ID) && id.getPath().endsWith(".json")); final DocsTree.BranchElement[] root = {null}; - Map docsEntries = new HashMap<>(); + Map docsEntries = new HashMap<>(); resources.forEach((id, resource) -> { - try(Reader reader = resource.getReader()) { + try(Reader reader = resource.openAsReader()) { if(id.getPath().equals("docs/tree.json")) { DocsTree.BranchElement.CODEC.decode(JsonOps.INSTANCE, StrictJsonParser.parse(reader)) .ifSuccess(entry -> root[0] = entry.getFirst()) .ifError(error -> Minions.LOGGER.warn("Could not parse docs tree {}: {}", id, error.message())); } else { - Identifier docId = Identifier.of(id.getNamespace(), id.getPath().substring("docs/".length(), id.getPath().length() - ".json".length())); + ResourceLocation docId = ResourceLocation.fromNamespaceAndPath(id.getNamespace(), id.getPath().substring("docs/".length(), id.getPath().length() - ".json".length())); DocsEntry.CODEC.decode(JsonOps.INSTANCE, StrictJsonParser.parse(reader)) .ifSuccess(entry -> docsEntries.put(docId, entry.getFirst())) .ifError(error -> Minions.LOGGER.warn("Could not parse docs entry {}: {}", id, error.message())); @@ -121,24 +120,24 @@ public class DocsManager implements SimpleResourceReloadListener(docsEntries, tree); + return new Tuple<>(docsEntries, tree); } else { - return new Pair<>(docsEntries, null); + return new Tuple<>(docsEntries, null); } }, executor); } @Override - public CompletableFuture apply(Pair, DocsTree> o, ResourceManager resourceManager, Executor executor) { + public CompletableFuture apply(Tuple, DocsTree> o, ResourceManager resourceManager, Executor executor) { return CompletableFuture.supplyAsync(() -> { - docs = o.getLeft(); - tree = o.getRight(); + docs = o.getA(); + tree = o.getB(); return null; }); } @Override - public Identifier getFabricId() { - return Identifier.of(Minions.MOD_ID, "docs"); + public ResourceLocation getFabricId() { + return ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "docs"); } } diff --git a/src/main/java/io/github/skippyall/minions/docs/DocsTree.java b/src/main/java/io/github/skippyall/minions/docs/DocsTree.java index a96c210..da8c3ea 100644 --- a/src/main/java/io/github/skippyall/minions/docs/DocsTree.java +++ b/src/main/java/io/github/skippyall/minions/docs/DocsTree.java @@ -2,16 +2,15 @@ package io.github.skippyall.minions.docs; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; -import net.minecraft.util.Identifier; - import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; +import net.minecraft.resources.ResourceLocation; public class DocsTree { private final BranchElement root; - private final Map entries = new HashMap<>(); + private final Map entries = new HashMap<>(); public DocsTree(BranchElement root) { this.root = root; @@ -30,7 +29,7 @@ public class DocsTree { return root; } - public DocElement getElement(Identifier id) { + public DocElement getElement(ResourceLocation id) { return entries.get(id); } @@ -55,15 +54,15 @@ public class DocsTree { } public static final class DocElement extends Element { - public static final Codec CODEC = Identifier.CODEC.xmap(DocElement::new, DocElement::getId); + public static final Codec CODEC = ResourceLocation.CODEC.xmap(DocElement::new, DocElement::getId); - private final Identifier id; + private final ResourceLocation id; - public DocElement(Identifier element) { + public DocElement(ResourceLocation element) { this.id = element; } - public Identifier getId() { + public ResourceLocation getId() { return id; } } diff --git a/src/main/java/io/github/skippyall/minions/docs/ReferenceEntry.java b/src/main/java/io/github/skippyall/minions/docs/ReferenceEntry.java index 2addd61..cc8c044 100644 --- a/src/main/java/io/github/skippyall/minions/docs/ReferenceEntry.java +++ b/src/main/java/io/github/skippyall/minions/docs/ReferenceEntry.java @@ -4,36 +4,35 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import io.github.skippyall.minions.gui.GuiDisplay; -import net.minecraft.dialog.body.DialogBody; -import net.minecraft.dialog.body.ItemDialogBody; -import net.minecraft.dialog.body.PlainMessageDialogBody; -import net.minecraft.item.Item; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.registry.Registries; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.text.Text; -import net.minecraft.text.TextCodecs; -import net.minecraft.util.Identifier; - import java.util.ArrayList; import java.util.List; import java.util.Optional; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.dialog.body.DialogBody; +import net.minecraft.server.dialog.body.ItemBody; +import net.minecraft.server.dialog.body.PlainMessage; +import net.minecraft.world.item.Item; -public record ReferenceEntry(Metadata metadata, RegistryKey object, Text shortDescription, Text longDescription) implements DocsEntry { - private static final Codec> REGISTRY_KEY_CODEC = RecordCodecBuilder.create(instance -> +public record ReferenceEntry(Metadata metadata, ResourceKey object, Component shortDescription, Component longDescription) implements DocsEntry { + private static final Codec> REGISTRY_KEY_CODEC = RecordCodecBuilder.create(instance -> instance.group( - Identifier.CODEC.fieldOf("registry").forGetter(RegistryKey::getRegistry), - Identifier.CODEC.fieldOf("value").forGetter(RegistryKey::getValue) - ).apply(instance, (registry, value) -> RegistryKey.of(RegistryKey.ofRegistry(registry), value)) + ResourceLocation.CODEC.fieldOf("registry").forGetter(ResourceKey::registry), + ResourceLocation.CODEC.fieldOf("value").forGetter(ResourceKey::location) + ).apply(instance, (registry, value) -> ResourceKey.create(ResourceKey.createRegistryKey(registry), value)) ); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( Metadata.CODEC.fieldOf("metadata").forGetter(ReferenceEntry::getMetadata), REGISTRY_KEY_CODEC.fieldOf("object").forGetter(ReferenceEntry::object), - TextCodecs.CODEC.fieldOf("shortDescription").forGetter(ReferenceEntry::shortDescription), - TextCodecs.CODEC.fieldOf("longDescription").forGetter(ReferenceEntry::longDescription) + ComponentSerialization.CODEC.fieldOf("shortDescription").forGetter(ReferenceEntry::shortDescription), + ComponentSerialization.CODEC.fieldOf("longDescription").forGetter(ReferenceEntry::longDescription) ).apply(instance, ReferenceEntry::new)); @Override @@ -42,33 +41,33 @@ public record ReferenceEntry(Metadata metadata, RegistryKey object, Text shor } @Override - public List getDialog(DynamicRegistryManager manager) { + public List getDialog(RegistryAccess manager) { List bodyElements = new ArrayList<>(); GuiDisplay display = getObjectDisplay(manager); if(display != null) { - bodyElements.add(new ItemDialogBody(display.createItemStack(), Optional.empty(), false, false, 16, 16)); + bodyElements.add(new ItemBody(display.createItemStack(), Optional.empty(), false, false, 16, 16)); } - bodyElements.add(new PlainMessageDialogBody(Text.translatable(object.getValue().toTranslationKey(object.getRegistry().getPath())), 200)); - bodyElements.add(new PlainMessageDialogBody(longDescription, 200)); + bodyElements.add(new PlainMessage(Component.translatable(object.location().toLanguageKey(object.registry().getPath())), 200)); + bodyElements.add(new PlainMessage(longDescription, 200)); return bodyElements; } - public GuiDisplay getObjectDisplay(DynamicRegistryManager manager) { + public GuiDisplay getObjectDisplay(RegistryAccess manager) { GuiDisplay display = GuiDisplay.DEFAULT_DISPLAY; - if(object.isOf(RegistryKeys.ITEM) || object.isOf(RegistryKeys.BLOCK)) { + if(object.isFor(Registries.ITEM) || object.isFor(Registries.BLOCK)) { Item item; - if(object.isOf(RegistryKeys.ITEM)) { - item = Registries.ITEM.get(object.getValue()); + if(object.isFor(Registries.ITEM)) { + item = BuiltInRegistries.ITEM.getValue(object.location()); } else { - item = Registries.BLOCK.get(object.getValue()).asItem(); + item = BuiltInRegistries.BLOCK.getValue(object.location()).asItem(); } if(item != null) { display = new GuiDisplay.ItemBased(item); } } else { - Identifier displayId = object.getValue().withPrefixedPath(object.getRegistry().getPath() + "/"); + ResourceLocation displayId = object.location().withPrefix(object.registry().getPath() + "/"); display = GuiDisplay.getGuiDisplay(displayId, manager); } return display; diff --git a/src/main/java/io/github/skippyall/minions/gui/GuiDisplay.java b/src/main/java/io/github/skippyall/minions/gui/GuiDisplay.java index 9328196..3b2c004 100644 --- a/src/main/java/io/github/skippyall/minions/gui/GuiDisplay.java +++ b/src/main/java/io/github/skippyall/minions/gui/GuiDisplay.java @@ -5,49 +5,48 @@ import com.mojang.serialization.Codec; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.util.TranslationUtil; import it.unimi.dsi.fastutil.objects.ReferenceSortedSets; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.ProfileComponent; -import net.minecraft.component.type.TooltipDisplayComponent; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; -import net.minecraft.util.Rarity; -import net.minecraft.util.Uuids; - import java.util.Optional; import java.util.UUID; +import net.minecraft.ChatFormatting; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.UUIDUtil; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.component.ResolvableProfile; +import net.minecraft.world.item.component.TooltipDisplay; public interface GuiDisplay { - Codec CODEC = MinionRegistries.GUI_DISPLAY_TYPE.getCodec().dispatch(GuiDisplay::getCodec, codec -> codec.fieldOf("data")); + Codec CODEC = MinionRegistries.GUI_DISPLAY_TYPE.byNameCodec().dispatch(GuiDisplay::getCodec, codec -> codec.fieldOf("data")); GuiDisplay DEFAULT_DISPLAY = new ItemBased(Items.BARRIER); - static GuiDisplay getGuiDisplay(Identifier id, DynamicRegistryManager manager) { - return manager.getOptional(MinionRegistries.GUI_DISPLAY).map(registry -> registry.get(id)).orElse(DEFAULT_DISPLAY); + static GuiDisplay getGuiDisplay(ResourceLocation id, RegistryAccess manager) { + return manager.lookup(MinionRegistries.GUI_DISPLAY).map(registry -> registry.getValue(id)).orElse(DEFAULT_DISPLAY); } - static GuiDisplay getGuiDisplayFor(Registry registry, T element, DynamicRegistryManager manager) { - Identifier elementId = registry.getId(element); + static GuiDisplay getGuiDisplayFor(Registry registry, T element, RegistryAccess manager) { + ResourceLocation elementId = registry.getKey(element); if(elementId == null) { return DEFAULT_DISPLAY; } - Identifier displayId = elementId.withPrefixedPath(registry.getKey().getValue().getPath() + "/"); + ResourceLocation displayId = elementId.withPrefix(registry.key().location().getPath() + "/"); return getGuiDisplay(displayId, manager); } - static ItemStack getDisplayStack(Registry registry, T element, DynamicRegistryManager manager) { + static ItemStack getDisplayStack(Registry registry, T element, RegistryAccess manager) { return getGuiDisplayFor(registry, element, manager).createItemStack(); } - static ItemStack getDisplayStackWithName(Registry registry, T element, DynamicRegistryManager manager) { + static ItemStack getDisplayStackWithName(Registry registry, T element, RegistryAccess manager) { ItemStack stack = getDisplayStack(registry, element, manager); - stack.set(DataComponentTypes.CUSTOM_NAME, Text.translatable(TranslationUtil.getTranslationKey(element, registry)).styled(style -> style.withItalic(false).withColor(Formatting.WHITE))); + stack.set(DataComponents.CUSTOM_NAME, Component.translatable(TranslationUtil.getTranslationKey(element, registry)).withStyle(style -> style.withItalic(false).withColor(ChatFormatting.WHITE))); return stack; } @@ -56,18 +55,18 @@ public interface GuiDisplay { Codec getCodec(); class ModelBased implements GuiDisplay { - public static final Codec CODEC = Identifier.CODEC.xmap(ModelBased::new, display -> display.model); + public static final Codec CODEC = ResourceLocation.CODEC.xmap(ModelBased::new, display -> display.model); - private final Identifier model; + private final ResourceLocation model; - public ModelBased(Identifier model) { + public ModelBased(ResourceLocation model) { this.model = model; } @Override public ItemStack createItemStack() { ItemStack stack = new ItemStack(Items.BARRIER); - stack.set(DataComponentTypes.ITEM_MODEL, model); + stack.set(DataComponents.ITEM_MODEL, model); return stack; } @@ -78,7 +77,7 @@ public interface GuiDisplay { } class ItemBased implements GuiDisplay { - public static final Codec CODEC = Registries.ITEM.getCodec().xmap(ItemBased::new, display -> display.item); + public static final Codec CODEC = BuiltInRegistries.ITEM.byNameCodec().xmap(ItemBased::new, display -> display.item); private final Item item; @@ -89,8 +88,8 @@ public interface GuiDisplay { @Override public ItemStack createItemStack() { ItemStack stack = new ItemStack(item); - stack.set(DataComponentTypes.TOOLTIP_DISPLAY, new TooltipDisplayComponent(true, ReferenceSortedSets.emptySet())); - stack.set(DataComponentTypes.RARITY, Rarity.COMMON); + stack.set(DataComponents.TOOLTIP_DISPLAY, new TooltipDisplay(true, ReferenceSortedSets.emptySet())); + stack.set(DataComponents.RARITY, Rarity.COMMON); return stack; } @@ -101,7 +100,7 @@ public interface GuiDisplay { } class HeadBased implements GuiDisplay { - public static final Codec CODEC = Uuids.CODEC.xmap(HeadBased::new, display -> display.uuid); + public static final Codec CODEC = UUIDUtil.AUTHLIB_CODEC.xmap(HeadBased::new, display -> display.uuid); private final UUID uuid; @@ -112,7 +111,7 @@ public interface GuiDisplay { @Override public ItemStack createItemStack() { ItemStack stack = new ItemStack(Items.PLAYER_HEAD); - stack.set(DataComponentTypes.PROFILE, new ProfileComponent(Optional.empty(), Optional.of(uuid), new PropertyMap())); + stack.set(DataComponents.PROFILE, new ResolvableProfile(Optional.empty(), Optional.of(uuid), new PropertyMap())); return stack; } diff --git a/src/main/java/io/github/skippyall/minions/gui/MinionLookGui.java b/src/main/java/io/github/skippyall/minions/gui/MinionLookGui.java index b16f338..c1c7ed5 100644 --- a/src/main/java/io/github/skippyall/minions/gui/MinionLookGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/MinionLookGui.java @@ -9,22 +9,21 @@ import io.github.skippyall.minions.minion.MinionProfileUtils; import io.github.skippyall.minions.minion.skin.SkinProvider; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.registration.SkinProviders; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.ProfileComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; - import java.util.Optional; +import net.minecraft.core.component.DataComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.component.ResolvableProfile; public class MinionLookGui extends SimpleGui { private ItemStack minionItem; private SkinProvider currentSkinProvider; - public MinionLookGui(ServerPlayerEntity player, ItemStack minionItem) { - super(ScreenHandlerType.GENERIC_9X3, player, false); + public MinionLookGui(ServerPlayer player, ItemStack minionItem) { + super(MenuType.GENERIC_9x3, player, false); this.minionItem = minionItem; this.currentSkinProvider = SkinProviders.NAME; } @@ -38,7 +37,7 @@ public class MinionLookGui extends SimpleGui { private void updateName() { setSlot(10, new GuiElementBuilder() .setItem(Items.OAK_SIGN) - .setName(Text.literal(getData().name())) + .setName(Component.literal(getData().name())) .setCallback(() -> { openRenameGui(player, minionItem); }) @@ -52,26 +51,26 @@ public class MinionLookGui extends SimpleGui { MinionItem.setData(player.getServer(), getData().withSkin(skin), minionItem); })); if(MinionItem.getData(player.getServer(), minionItem) != null && MinionItem.getData(player.getServer(), minionItem).skin().isPresent()) { - builder.setComponent(DataComponentTypes.PROFILE, new ProfileComponent(Optional.empty(), Optional.empty(), getData().skin().get())); + builder.setComponent(DataComponents.PROFILE, new ResolvableProfile(Optional.empty(), Optional.empty(), getData().skin().get())); } setSlot(16, builder); } private void cycleSkinProvider() { - int currentId = MinionRegistries.SKIN_PROVIDERS.getRawId(currentSkinProvider); + int currentId = MinionRegistries.SKIN_PROVIDERS.getId(currentSkinProvider); currentId++; if(MinionRegistries.SKIN_PROVIDERS.size() == currentId) { currentId = 0; } - currentSkinProvider = MinionRegistries.SKIN_PROVIDERS.get(currentId); + currentSkinProvider = MinionRegistries.SKIN_PROVIDERS.byId(currentId); updateSkinProvider(); } private void updateSkinProvider() { setSlot(25, new GuiElementBuilder() .setItem(Items.GREEN_STAINED_GLASS_PANE) - .setComponent(DataComponentTypes.CUSTOM_NAME, currentSkinProvider.getDisplayName()) + .setComponent(DataComponents.CUSTOM_NAME, currentSkinProvider.getDisplayName()) .setCallback(this::cycleSkinProvider) ); } @@ -80,14 +79,14 @@ public class MinionLookGui extends SimpleGui { return MinionItem.getDataOrDefault(player.getServer(), minionItem); } - public static void open(ServerPlayerEntity player, ItemStack minionItem) { + public static void open(ServerPlayer player, ItemStack minionItem) { MinionLookGui gui = new MinionLookGui(player, minionItem); gui.update(); gui.open(); } - public void openRenameGui(ServerPlayerEntity player, ItemStack minionItem) { - TextInput.inputSync(player, Text.translatable("minions.gui.look.rename.title"), "Minion", name -> MinionProfileUtils.checkMinionNameWithoutPrefix(player.getServer(), name)) + public void openRenameGui(ServerPlayer player, ItemStack minionItem) { + TextInput.inputSync(player, Component.translatable("minions.gui.look.rename.title"), "Minion", name -> MinionProfileUtils.checkMinionNameWithoutPrefix(player.getServer(), name)) .thenAccept(name -> { MinionItem.setData(player.getServer(), getData().withName(MinionProfileUtils.getPrefix() + name), minionItem); open(); diff --git a/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java b/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java index 08ecbf0..a876b5e 100644 --- a/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java @@ -1,11 +1,11 @@ package io.github.skippyall.minions.gui; -import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.level.ServerPlayer; import org.jetbrains.annotations.Nullable; public abstract class MinionsGui { protected final @Nullable MinionsGui parent; - protected final ServerPlayerEntity viewer; + protected final ServerPlayer viewer; protected @Nullable MinionsGui child = null; private boolean open = true; @@ -15,12 +15,12 @@ public abstract class MinionsGui { parent.child = this; } - public MinionsGui(ServerPlayerEntity viewer) { + public MinionsGui(ServerPlayer viewer) { this.viewer = viewer; this.parent = null; } - public ServerPlayerEntity getViewer() { + public ServerPlayer getViewer() { return viewer; } diff --git a/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java b/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java index 3fd3af3..ff5a349 100644 --- a/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java +++ b/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java @@ -2,22 +2,21 @@ package io.github.skippyall.minions.gui; import eu.pb4.sgui.api.elements.GuiElementBuilder; import eu.pb4.sgui.api.gui.SimpleGui; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.text.Text; -import net.minecraft.util.collection.IndexedIterable; - import java.util.List; import java.util.function.BiFunction; +import net.minecraft.core.IdMap; +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Items; public class PaginatedList extends MinionsGui { private int page = 0; private SimpleGui gui; - private final Text title; + private final Component title; private final int size; private final BiFunction display; - public PaginatedList(MinionsGui parent, Text title, int size, BiFunction display) { + public PaginatedList(MinionsGui parent, Component title, int size, BiFunction display) { super(parent); this.title = title; this.size = size; @@ -27,7 +26,7 @@ public class PaginatedList extends MinionsGui { @Override protected void open() { - gui = new SimpleGui(ScreenHandlerType.GENERIC_9X4, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_9x4, viewer, false) { @Override public void onClose() { onBackingClosed(); @@ -43,12 +42,12 @@ public class PaginatedList extends MinionsGui { gui.close(); } - public static void createList(MinionsGui parent, Text title, List list, BiFunction display) { + public static void createList(MinionsGui parent, Component title, List list, BiFunction display) { new PaginatedList(parent, title, list.size(), (i, gui) -> display.apply(list.get(i), gui)); } - public static void createList(MinionsGui parent, Text title, IndexedIterable list, BiFunction display) { - new PaginatedList(parent, title, list.size(), (i, gui) -> display.apply(list.get(i), gui)); + public static void createList(MinionsGui parent, Component title, IdMap list, BiFunction display) { + new PaginatedList(parent, title, list.size(), (i, gui) -> display.apply(list.byId(i), gui)); } private void addItems() { @@ -58,7 +57,7 @@ public class PaginatedList extends MinionsGui { if(page > 0) { gui.setSlot(30, new GuiElementBuilder(Items.SPECTRAL_ARROW) - .setItemName(Text.translatable("book.page_button.previous")) + .setItemName(Component.translatable("book.page_button.previous")) .setCallback(() -> { page--; addItems(); @@ -70,7 +69,7 @@ public class PaginatedList extends MinionsGui { if(27 * (page + 1) < size) { gui.setSlot(32, new GuiElementBuilder(Items.ARROW) - .setItemName(Text.translatable("book.page_button.next")) + .setItemName(Component.translatable("book.page_button.next")) .setCallback(() -> { page++; addItems(); diff --git a/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java b/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java index 2c9df98..e14a8f4 100644 --- a/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java +++ b/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java @@ -6,18 +6,18 @@ import io.github.skippyall.minions.gui.Displayable; import io.github.skippyall.minions.gui.GuiDisplay; import io.github.skippyall.minions.gui.MinionsGui; import io.github.skippyall.minions.gui.minion.SimpleMinionsGui; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.util.concurrent.CompletableFuture; import java.util.function.BiFunction; import java.util.function.Function; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Items; public class ChoiceInput { - public static BiFunction> createDialogOpener(ScreenHandlerType screen, Text title, Function displayFunction, T[] values, @Nullable T fallback) { + public static BiFunction> createDialogOpener(MenuType screen, Component title, Function displayFunction, T[] values, @Nullable T fallback) { return (player, object) -> { CompletableFuture future = new CompletableFuture<>(); @@ -44,14 +44,14 @@ public class ChoiceInput { }; } - public static BiFunction> createDialogOpener(T[] values) { - return createDialogOpener(ScreenHandlerType.GENERIC_9X3, Text.empty(), t -> t != null ? t.getDisplay() : null, values, null); + public static BiFunction> createDialogOpener(T[] values) { + return createDialogOpener(MenuType.GENERIC_9x3, Component.empty(), t -> t != null ? t.getDisplay() : null, values, null); } - public static CompletableFuture confirm(ServerPlayerEntity player, Text title) { + public static CompletableFuture confirm(ServerPlayer player, Component title) { CompletableFuture future = new CompletableFuture<>(); - SimpleGui gui = new SimpleGui(ScreenHandlerType.GENERIC_3X3, player, false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_3x3, player, false) { @Override public void onClose() { future.cancel(false); @@ -61,12 +61,12 @@ public class ChoiceInput { gui.setTitle(title); gui.setSlot(3, new GuiElementBuilder(Items.REDSTONE_BLOCK) - .setName(Text.translatable("minions.gui.abort")) + .setName(Component.translatable("minions.gui.abort")) .setCallback(() -> future.cancel(false)) ); gui.setSlot(5, new GuiElementBuilder(Items.EMERALD_BLOCK) - .setName(Text.translatable("minions.gui.confirm")) + .setName(Component.translatable("minions.gui.confirm")) .setCallback(() -> future.complete(null)) ); @@ -74,11 +74,11 @@ public class ChoiceInput { return future; } - public static CompletableFuture confirm(MinionsGui parent, Text title) { + public static CompletableFuture confirm(MinionsGui parent, Component title) { CompletableFuture future = new CompletableFuture<>(); new SimpleMinionsGui(parent, (onClose, me) -> { - SimpleGui gui = new SimpleGui(ScreenHandlerType.GENERIC_3X3, parent.getViewer(), false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_3x3, parent.getViewer(), false) { @Override public void onClose() { future.cancel(false); @@ -89,12 +89,12 @@ public class ChoiceInput { gui.setTitle(title); gui.setSlot(3, new GuiElementBuilder(Items.REDSTONE_BLOCK) - .setName(Text.translatable("minions.gui.abort")) + .setName(Component.translatable("minions.gui.abort")) .setCallback(() -> future.cancel(false)) ); gui.setSlot(5, new GuiElementBuilder(Items.EMERALD_BLOCK) - .setName(Text.translatable("minions.gui.confirm")) + .setName(Component.translatable("minions.gui.confirm")) .setCallback(() -> future.complete(null)) ); @@ -104,8 +104,8 @@ public class ChoiceInput { return future; } - public static BiFunction> inputBoolean(Text title) { - return createDialogOpener(ScreenHandlerType.GENERIC_3X3, title, value -> { + public static BiFunction> inputBoolean(Component title) { + return createDialogOpener(MenuType.GENERIC_3x3, title, value -> { if(value) { return new GuiDisplay.ItemBased(Items.EMERALD_BLOCK); } else { diff --git a/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java b/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java index bde1964..f8e76f7 100644 --- a/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java +++ b/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java @@ -4,28 +4,27 @@ import eu.pb4.sgui.api.elements.GuiElementBuilder; import eu.pb4.sgui.api.gui.AnvilInputGui; import io.github.skippyall.minions.gui.MinionsGui; import io.github.skippyall.minions.gui.minion.SimpleMinionsGui; -import net.minecraft.item.Items; -import net.minecraft.screen.AnvilScreenHandler; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; - import java.util.concurrent.CompletableFuture; import java.util.function.Function; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.AnvilMenu; +import net.minecraft.world.item.Items; public class TextInput extends AnvilInputGui { private final GuiElementBuilder valid = new GuiElementBuilder() .setItem(Items.EMERALD_BLOCK) - .setName(Text.literal("OK")) + .setName(Component.literal("OK")) .setCallback(this::onConfirm); private final GuiElementBuilder invalid = new GuiElementBuilder() .setItem(Items.REDSTONE_BLOCK); - private final Function>> parser; + private final Function>> parser; private final CompletableFuture future; - private Result result; + private Result result; private boolean isConfirm; - public TextInput(ServerPlayerEntity player, Text title, String defaultValue, Function>> parser, CompletableFuture future) { + public TextInput(ServerPlayer player, Component title, String defaultValue, Function>> parser, CompletableFuture future) { super(player, false); setTitle(title); setDefaultInputValue(defaultValue); @@ -35,21 +34,21 @@ public class TextInput extends AnvilInputGui { updateConfirmButton(defaultValue); } - public static CompletableFuture inputSync(ServerPlayerEntity player, Text title, String defaultValue, Function> parser) { + public static CompletableFuture inputSync(ServerPlayer player, Component title, String defaultValue, Function> parser) { return input(player, title, defaultValue, (String string) -> CompletableFuture.completedFuture(parser.apply(string))); } - public static CompletableFuture inputSync(MinionsGui gui, Text title, String defaultValue, Function> parser) { + public static CompletableFuture inputSync(MinionsGui gui, Component title, String defaultValue, Function> parser) { return input(gui, title, defaultValue, (String string) -> CompletableFuture.completedFuture(parser.apply(string))); } - public static CompletableFuture input(ServerPlayerEntity player, Text title, String defaultValue, Function>> parser) { + public static CompletableFuture input(ServerPlayer player, Component title, String defaultValue, Function>> parser) { CompletableFuture future = new CompletableFuture<>(); new TextInput<>(player, title, defaultValue, parser, future).open(); return future; } - public static CompletableFuture input(MinionsGui gui, Text title, String defaultValue, Function>> parser) { + public static CompletableFuture input(MinionsGui gui, Component title, String defaultValue, Function>> parser) { CompletableFuture future = new CompletableFuture<>(); new SimpleMinionsGui(gui, (onClose, me) -> { TextInput input = new TextInput<>(gui.getViewer(), title, defaultValue, parser, future); @@ -63,28 +62,28 @@ public class TextInput extends AnvilInputGui { return future; } - public static CompletableFuture inputString(ServerPlayerEntity player, Text title, String defaultValue) { + public static CompletableFuture inputString(ServerPlayer player, Component title, String defaultValue) { return inputSync(player, title, defaultValue, Result.Success::new); } - public static CompletableFuture inputString(MinionsGui gui, Text title, String defaultValue) { + public static CompletableFuture inputString(MinionsGui gui, Component title, String defaultValue) { return inputSync(gui, title, defaultValue, Result.Success::new); } - public static CompletableFuture inputLong(ServerPlayerEntity player, Text title, String defaultValue) { - return inputSync(player, title, defaultValue, string -> Result.wrapCustomError(() -> Long.valueOf(string), Text.translatable("minions.command.input.int.fail"))); + public static CompletableFuture inputLong(ServerPlayer player, Component title, String defaultValue) { + return inputSync(player, title, defaultValue, string -> Result.wrapCustomError(() -> Long.valueOf(string), Component.translatable("minions.command.input.int.fail"))); } - public static CompletableFuture inputLong(MinionsGui gui, Text title, String defaultValue) { - return inputSync(gui, title, defaultValue, string -> Result.wrapCustomError(() -> Long.valueOf(string), Text.translatable("minions.command.input.int.fail"))); + public static CompletableFuture inputLong(MinionsGui gui, Component title, String defaultValue) { + return inputSync(gui, title, defaultValue, string -> Result.wrapCustomError(() -> Long.valueOf(string), Component.translatable("minions.command.input.int.fail"))); } - public static CompletableFuture inputDouble(ServerPlayerEntity player, Text title, String defaultValue) { - return inputSync(player, title, defaultValue, string -> Result.wrapCustomError(() -> Double.valueOf(string), Text.translatable("minions.command.input.float.fail"))); + public static CompletableFuture inputDouble(ServerPlayer player, Component title, String defaultValue) { + return inputSync(player, title, defaultValue, string -> Result.wrapCustomError(() -> Double.valueOf(string), Component.translatable("minions.command.input.float.fail"))); } - public static CompletableFuture inputDouble(MinionsGui gui, Text title, String defaultValue) { - return inputSync(gui, title, defaultValue, string -> Result.wrapCustomError(() -> Double.valueOf(string), Text.translatable("minions.command.input.float.fail"))); + public static CompletableFuture inputDouble(MinionsGui gui, Component title, String defaultValue) { + return inputSync(gui, title, defaultValue, string -> Result.wrapCustomError(() -> Double.valueOf(string), Component.translatable("minions.command.input.float.fail"))); } @Override @@ -96,10 +95,10 @@ public class TextInput extends AnvilInputGui { parser.apply(input).thenAccept(result -> { this.result = result; if(result.isSuccess()) { - setSlot(AnvilScreenHandler.OUTPUT_ID, valid); + setSlot(AnvilMenu.RESULT_SLOT, valid); } else { - Text text = result.getErrorOrThrow(); - setSlot(AnvilScreenHandler.OUTPUT_ID, invalid.setName(text)); + Component text = result.getErrorOrThrow(); + setSlot(AnvilMenu.RESULT_SLOT, invalid.setName(text)); } }); } diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java index 8e91d55..853f8bb 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java @@ -15,10 +15,10 @@ import io.github.skippyall.minions.program.supplier.ValueSupplierList; import io.github.skippyall.minions.program.supplier.ValueSupplierType; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.util.TranslationUtil; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import org.jetbrains.annotations.Nullable; public class ArgumentGui extends MinionsGui { @@ -59,16 +59,16 @@ public class ArgumentGui extends MinionsGui { @Override protected void open() { - gui = new SimpleGui(ScreenHandlerType.GENERIC_3X3, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_3x3, viewer, false) { @Override public void onClose() { onBackingClosed(); } }; - gui.setTitle(Text.translatable( + gui.setTitle(Component.translatable( "minions.gui.instruction.argument.title", parameter.name(), - Text.translatable(TranslationUtil.getTranslationKey(parameter.type(), MinionRegistries.VALUE_TYPES)) + Component.translatable(TranslationUtil.getTranslationKey(parameter.type(), MinionRegistries.VALUE_TYPES)) )); updateTypeConfiguration(); @@ -80,14 +80,14 @@ public class ArgumentGui extends MinionsGui { private void updateTypeConfiguration() { ItemStack displayStack; if(argumentType != null) { - displayStack = GuiDisplay.getDisplayStack(MinionRegistries.VALUE_SUPPLIER_TYPES, argumentType, viewer.getRegistryManager()); + displayStack = GuiDisplay.getDisplayStack(MinionRegistries.VALUE_SUPPLIER_TYPES, argumentType, viewer.registryAccess()); } else { displayStack = new ItemStack(Items.BARRIER); } gui.setSlot(3, new GuiElementBuilder(displayStack) - .setName(Text.translatable("minions.gui.instruction.argument.configure.type")) - .addLoreLine(Text.translatable(TranslationUtil.getTranslationKey( + .setName(Component.translatable("minions.gui.instruction.argument.configure.type")) + .addLoreLine(Component.translatable(TranslationUtil.getTranslationKey( argumentType, MinionRegistries.VALUE_SUPPLIER_TYPES, "minions.gui.not_set" @@ -99,8 +99,8 @@ public class ArgumentGui extends MinionsGui { private void updateArgumentConfiguration() { if(argumentType != null) { gui.setSlot(4, new GuiElementBuilder(Items.STRUCTURE_VOID) - .setName(Text.translatable("minions.gui.instruction.argument.configure.data")) - .addLoreLine(getArgument() != null ? getArgument().getDisplayText() : Text.translatable("minions.gui.not_set")) + .setName(Component.translatable("minions.gui.instruction.argument.configure.data")) + .addLoreLine(getArgument() != null ? getArgument().getDisplayText() : Component.translatable("minions.gui.not_set")) .setCallback(() -> argumentType.openConfiguration(this, parameter.type(), getArgument()) .thenAccept(newArgument -> { setArgument(newArgument); @@ -116,7 +116,7 @@ public class ArgumentGui extends MinionsGui { private void updateConverterConfiguration() { if(entry != null) { gui.setSlot(5, new GuiElementBuilder(Items.CRAFTER) - .setName(Text.translatable("minions.gui.instruction.converters")) + .setName(Component.translatable("minions.gui.instruction.converters")) .setCallback(this::configureConvertersMenu) ); } @@ -145,8 +145,8 @@ public class ArgumentGui extends MinionsGui { } public void selectArgumentType() { - PaginatedList.createList(this, Text.translatable("minions.gui.instruction.argument.configure.type.title"), MinionRegistries.VALUE_SUPPLIER_TYPES, (type, me) -> - new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_SUPPLIER_TYPES, type, viewer.getRegistryManager())) + PaginatedList.createList(this, Component.translatable("minions.gui.instruction.argument.configure.type.title"), MinionRegistries.VALUE_SUPPLIER_TYPES, (type, me) -> + new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_SUPPLIER_TYPES, type, viewer.registryAccess())) .setCallback(() -> { setArgumentType(type); me.close(); diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java index 4d502b9..d93cbf3 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java @@ -12,11 +12,11 @@ import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.instruction.ConfiguredInstruction; import io.github.skippyall.minions.program.instruction.ConfiguredInstructionListener; import io.github.skippyall.minions.program.supplier.Parameter; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Items; public class ConfigureInstructionGui extends MinionsGui implements ConfiguredInstructionListener, MinionListener { private String name; @@ -40,17 +40,17 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns @Override protected void open() { - gui = new SimpleGui(ScreenHandlerType.GENERIC_9X3, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_9x3, viewer, false) { @Override public void onClose() { onBackingClosed(); } }; - gui.setTitle(Text.literal(name)); + gui.setTitle(Component.literal(name)); gui.setSlot(7, new GuiElementBuilder(Items.ANVIL) - .setName(Text.translatable("minions.gui.instruction.configure.rename")) + .setName(Component.translatable("minions.gui.instruction.configure.rename")) .setCallback(() -> InstructionGui.inputInstructionName(this, context, name).thenAccept(newName -> { minion.getInstructionManager().setInstructionName(name, newName); reopen(); @@ -58,8 +58,8 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns ); gui.setSlot(8, new GuiElementBuilder(Items.LAVA_BUCKET) - .setName(Text.translatable("minions.gui.instruction.configure.delete")) - .setCallback(() -> ChoiceInput.confirm(this, Text.translatable("minions.gui.instruction.configure.delete.confirm", name)) + .setName(Component.translatable("minions.gui.instruction.configure.delete")) + .setCallback(() -> ChoiceInput.confirm(this, Component.translatable("minions.gui.instruction.configure.delete.confirm", name)) .thenAccept(v -> { minion.getInstructionManager().removeInstruction(name); close(); @@ -68,14 +68,14 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns updateSuppliers(); - gui.setSlot(13, InstructionGui.createInstructionElement(instruction.getInstruction(), viewer.getRegistryManager())); + gui.setSlot(13, InstructionGui.createInstructionElement(instruction.getInstruction(), viewer.registryAccess())); gui.setSlot(25, new GuiElementBuilder(Items.FEATHER) - .setName(Text.translatable("minions.gui.instruction.configure.copy")) - .addLoreLine(Text.translatable("minions.gui.instruction.configure.copy.description")) + .setName(Component.translatable("minions.gui.instruction.configure.copy")) + .addLoreLine(Component.translatable("minions.gui.instruction.configure.copy.description")) .setCallback(() -> { - viewer.getInventory().offer(ClipboardItem.createInstructionReference(minion, name), true); - viewer.playSoundToPlayer(SoundEvents.BLOCK_NOTE_BLOCK_CHIME.value(), SoundCategory.BLOCKS, 1, 1); + viewer.getInventory().placeItemBackInInventory(ClipboardItem.createInstructionReference(minion, name), true); + viewer.playNotifySound(SoundEvents.NOTE_BLOCK_CHIME.value(), SoundSource.BLOCKS, 1, 1); }) ); @@ -92,7 +92,7 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns @Override public void onInstructionRename(MinionFakePlayer minion, ConfiguredInstruction instruction, String oldName, String newName) { - gui.setTitle(Text.literal(newName)); + gui.setTitle(Component.literal(newName)); name = newName; context.setName(newName); } @@ -115,12 +115,12 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns private void updateRunSlot() { if(!instruction.isRunning()) { gui.setSlot(26, new GuiElementBuilder(Items.ARROW) - .setName(Text.translatable("minions.gui.instruction.run")) + .setName(Component.translatable("minions.gui.instruction.run")) .setCallback(() -> instruction.run(minion.getInstructionManager())) ); } else { gui.setSlot(26, new GuiElementBuilder(Items.BARRIER) - .setName(Text.translatable("minions.gui.instruction.stop")) + .setName(Component.translatable("minions.gui.instruction.stop")) .setCallback(() -> instruction.stop(minion.getInstructionManager())) ); } @@ -129,7 +129,7 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns private void updateSuppliers() { int slot = 12; for(Parameter parameter : instruction.getInstruction().getParameters().reversed()) { - gui.setSlot(slot, InstructionGui.createParameterElement(parameter, instruction.getArguments().getArgument(parameter), viewer.getRegistryManager()) + gui.setSlot(slot, InstructionGui.createParameterElement(parameter, instruction.getArguments().getArgument(parameter), viewer.registryAccess()) .setCallback(() -> new ArgumentGui(this, GuiContext.ValueSupplier.create(context, parameter))) ); slot--; diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java index 8cfccac..09017cc 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java @@ -10,10 +10,10 @@ import io.github.skippyall.minions.program.conversion.ValueConverter; import io.github.skippyall.minions.program.conversion.ValueConverterType; import io.github.skippyall.minions.program.value.ValueType; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.item.Items; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.text.Text; +import net.minecraft.core.RegistryAccess; +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Items; import org.jetbrains.annotations.Nullable; public class ConverterGui extends MinionsGui { @@ -42,14 +42,14 @@ public class ConverterGui extends MinionsGui { @Override protected void open() { - gui = new SimpleGui(ScreenHandlerType.GENERIC_3X3, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_3x3, viewer, false) { @Override public void onClose() { onBackingClosed(); } }; - gui.setTitle(Text.translatable("minions.gui.instruction.converter.title")); + gui.setTitle(Component.translatable("minions.gui.instruction.converter.title")); updateTypeDisplay(); updateConverterDisplay(); @@ -63,15 +63,15 @@ public class ConverterGui extends MinionsGui { } private void updateTypeDisplay() { - gui.setSlot(3, new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_CONVERTER_TYPES, valueConverterType, viewer.getRegistryManager())) + gui.setSlot(3, new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_CONVERTER_TYPES, valueConverterType, viewer.registryAccess())) .setCallback(this::configureType) ); } private void updateConverterDisplay() { gui.setSlot(5, new GuiElementBuilder(Items.STRUCTURE_VOID) - .setName(Text.translatable("minions.gui.instruction.converter.title")) - .addLoreLine(converter == null ? Text.translatable("minions.gui.not_set") : converter.getDisplayText()) + .setName(Component.translatable("minions.gui.instruction.converter.title")) + .addLoreLine(converter == null ? Component.translatable("minions.gui.not_set") : converter.getDisplayText()) .setCallback(this::configureData) ); } @@ -100,10 +100,10 @@ public class ConverterGui extends MinionsGui { private void configureType() { PaginatedList.createList( this, - Text.translatable("minions.gui.instruction.converter.type.title"), + Component.translatable("minions.gui.instruction.converter.type.title"), MinionRegistries.VALUE_CONVERTER_TYPES, (type, me) -> new GuiElementBuilder( - GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_CONVERTER_TYPES, type, viewer.getRegistryManager()) + GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_CONVERTER_TYPES, type, viewer.registryAccess()) ).setCallback(() -> { setType(type); me.close(); @@ -123,7 +123,7 @@ public class ConverterGui extends MinionsGui { } } - public static GuiElementBuilder createConverterElement(ValueConverter converter, DynamicRegistryManager manager) { + public static GuiElementBuilder createConverterElement(ValueConverter converter, RegistryAccess manager) { GuiElementBuilder builder = new GuiElementBuilder(GuiDisplay.getDisplayStack(MinionRegistries.VALUE_CONVERTER_TYPES, converter.getType(), manager)); builder.addLoreLine(converter.getDisplayText()); return builder; diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java index 9be8480..b4e9285 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java @@ -9,9 +9,9 @@ import io.github.skippyall.minions.program.conversion.ValueConverter; import io.github.skippyall.minions.program.value.ValueType; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.util.TranslationUtil; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Items; public class ConverterListGui extends MinionsGui { private ConverterList converters; @@ -32,14 +32,14 @@ public class ConverterListGui extends MinionsGui { @Override protected void open() { - gui = new SimpleGui(ScreenHandlerType.GENERIC_9X3, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_9x3, viewer, false) { @Override public void onClose() { onBackingClosed(); } }; - gui.setTitle(Text.translatable("minions.gui.instruction.converters")); + gui.setTitle(Component.translatable("minions.gui.instruction.converters")); updateConverters(); @@ -81,7 +81,7 @@ public class ConverterListGui extends MinionsGui { ValueType fromType = actualConverterIndex >= 1 ? converters.getConverters().get(actualConverterIndex - 1).getTo() : inputType; ValueType toType = actualConverterIndex < converters.getConverters().size() - 1 ? converters.getConverters().get(actualConverterIndex + 1).getFrom() : outputType; - gui.setSlot(slot, new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_CONVERTER_TYPES, converter.getType(), viewer.getRegistryManager())) + gui.setSlot(slot, new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_CONVERTER_TYPES, converter.getType(), viewer.registryAccess())) .addLoreLine(converter.getDisplayText()) .setCallback(() -> new ConverterGui(this, converter, fromType, toType, converters, false, actualConverterIndex)) ); @@ -91,10 +91,10 @@ public class ConverterListGui extends MinionsGui { ValueType toType = actualConverterIndex < converters.getConverters().size() - 1 ? converters.getConverters().get(actualConverterIndex + 1).getFrom() : outputType; gui.setSlot(slot + 1, new GuiElementBuilder(Items.MAGENTA_GLAZED_TERRACOTTA) - .setName(Text.translatable( + .setName(Component.translatable( "minions.gui.instruction.converters.cast", - Text.translatable(TranslationUtil.getTranslationKey(fromType, MinionRegistries.VALUE_TYPES)), - Text.translatable(TranslationUtil.getTranslationKey(toType, MinionRegistries.VALUE_TYPES)) + Component.translatable(TranslationUtil.getTranslationKey(fromType, MinionRegistries.VALUE_TYPES)), + Component.translatable(TranslationUtil.getTranslationKey(toType, MinionRegistries.VALUE_TYPES)) )) .setCallback(() -> new ConverterGui(this, null, fromType, toType, converters, true, actualConverterIndex + 1)) ); diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java index 18066d1..c01b746 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java @@ -18,38 +18,38 @@ import io.github.skippyall.minions.program.supplier.ValueSupplier; import io.github.skippyall.minions.registration.MinionComponentTypes; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.util.TranslationUtil; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.util.NoSuchElementException; import java.util.concurrent.CompletableFuture; +import net.minecraft.core.RegistryAccess; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; public class InstructionGui { public static MinionsGui openInstructionMainMenu(MinionsGui parent, GuiContext.Minion context) { return new SimpleMinionsGui(parent, (onClose, me) -> { - ServerPlayerEntity player = parent.getViewer(); + ServerPlayer player = parent.getViewer(); - SimpleGui gui = new SimpleGui(ScreenHandlerType.GENERIC_3X3, player, false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_3x3, player, false) { @Override public void onClose() { onClose.run(); } }; - gui.setTitle(Text.translatable("minions.gui.instruction.title")); + gui.setTitle(Component.translatable("minions.gui.instruction.title")); gui.setSlot(3, new GuiElementBuilder() .setItem(Items.BOOK) - .setName(Text.translatable("minions.gui.instruction.list")) + .setName(Component.translatable("minions.gui.instruction.list")) .setCallback(() -> new InstructionListGui(me, context)) ); gui.setSlot(5, new GuiElementBuilder() .setItem(Items.WRITABLE_BOOK) - .setName(Text.translatable("minions.gui.instruction.create")) + .setName(Component.translatable("minions.gui.instruction.create")) .setCallback(() -> createNewInstruction(me, context)) ); @@ -60,10 +60,10 @@ public class InstructionGui { public static void createNewInstruction(MinionsGui parent, GuiContext.Minion context) { MinionFakePlayer minion = context.getMinion(); - ServerPlayerEntity viewer = parent.getViewer(); + ServerPlayer viewer = parent.getViewer(); selectInstructionModuleMenu(parent, context).thenAccept(instructionType -> inputInstructionName(parent, context, "Instruction").thenAccept(name -> { - if (!minion.isRemoved() && !minion.isDisconnected()) { + if (!minion.isRemoved() && !minion.hasDisconnected()) { ConfiguredInstruction configuredInstruction = minion.getInstructionManager().createInstruction(name, instructionType); new ConfigureInstructionGui(parent, GuiContext.Instruction.create(context, configuredInstruction, name)); } @@ -72,36 +72,36 @@ public class InstructionGui { } public static CompletableFuture inputInstructionName(MinionsGui parent, GuiContext.Minion context, String defaultValue) { - return TextInput.inputSync(parent, Text.translatable("minions.gui.instruction.enter_name"), defaultValue, name -> { + return TextInput.inputSync(parent, Component.translatable("minions.gui.instruction.enter_name"), defaultValue, name -> { if (context.getMinion().getInstructionManager().hasInstruction(name)) { - return new Result.Error<>(Text.translatable("minions.gui.instruction.name_already_used")); + return new Result.Error<>(Component.translatable("minions.gui.instruction.name_already_used")); } return new Result.Success<>(name); }); } - public static boolean checkInstructionExists(String name, ConfiguredInstruction instruction, MinionFakePlayer minion, ServerPlayerEntity player) { - boolean stillExists = !minion.isRemoved() && !minion.isDisconnected() && minion.getInstructionManager().getInstruction(name) == instruction; + public static boolean checkInstructionExists(String name, ConfiguredInstruction instruction, MinionFakePlayer minion, ServerPlayer player) { + boolean stillExists = !minion.isRemoved() && !minion.hasDisconnected() && minion.getInstructionManager().getInstruction(name) == instruction; if (!stillExists) { - player.closeHandledScreen(); - player.sendMessage(Text.translatable("minions.gui.instruction.removed")); + player.closeContainer(); + player.sendSystemMessage(Component.translatable("minions.gui.instruction.removed")); } return stillExists; } public static CompletableFuture> selectInstructionModuleMenu(MinionsGui parent, GuiContext.Minion context) { MinionFakePlayer minion = context.getMinion(); - ServerPlayerEntity viewer = parent.getViewer(); + ServerPlayer viewer = parent.getViewer(); if (minion.getModuleInventory().getModules().isEmpty()) { - viewer.sendMessage(Text.translatable("minions.gui.instruction.no_modules")); + viewer.sendSystemMessage(Component.translatable("minions.gui.instruction.no_modules")); return CompletableFuture.failedFuture(new NoSuchElementException("No modules")); } CompletableFuture> future = new CompletableFuture<>(); new SimpleMinionsGui(parent, (closeHandler, me) -> { - SimpleGui gui = new SimpleGui(ScreenHandlerType.GENERIC_9X3, viewer, false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_9x3, viewer, false) { @Override public void onClose() { if (!future.isDone()) { @@ -110,10 +110,10 @@ public class InstructionGui { closeHandler.run(); } }; - gui.setTitle(Text.translatable("minions.gui.instruction.select_instruction")); + gui.setTitle(Component.translatable("minions.gui.instruction.select_instruction")); - for (int i = 0; i < minion.getModuleInventory().size(); i++) { - ItemStack moduleItem = minion.getModuleInventory().getStack(i); + for (int i = 0; i < minion.getModuleInventory().getContainerSize(); i++) { + ItemStack moduleItem = minion.getModuleInventory().getItem(i); MinionModule module = moduleItem.get(MinionComponentTypes.MODULE); if (module != null && !module.instructions().isEmpty()) { gui.addSlot(new GuiElementBuilder(moduleItem) @@ -134,7 +134,7 @@ public class InstructionGui { CompletableFuture> future = new CompletableFuture<>(); new SimpleMinionsGui(parent, (closeHandler, me) -> { - SimpleGui gui = new SimpleGui(ScreenHandlerType.GENERIC_9X3, parent.getViewer(), false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_9x3, parent.getViewer(), false) { @Override public void onClose() { if (!future.isDone()) { @@ -143,10 +143,10 @@ public class InstructionGui { closeHandler.run(); } }; - gui.setTitle(Text.translatable("minions.gui.instruction.select_instruction")); + gui.setTitle(Component.translatable("minions.gui.instruction.select_instruction")); for (InstructionType instructionType : module.instructions()) { - gui.addSlot(createInstructionElement(instructionType, parent.getViewer().getRegistryManager()) + gui.addSlot(createInstructionElement(instructionType, parent.getViewer().registryAccess()) .setCallback(() -> future.complete(instructionType)) ); } @@ -157,22 +157,22 @@ public class InstructionGui { return future; } - public static GuiElementBuilder createInstructionElement(InstructionType instructionType, DynamicRegistryManager manager) { + public static GuiElementBuilder createInstructionElement(InstructionType instructionType, RegistryAccess manager) { GuiElementBuilder instructionBuilder; if (instructionType != null) { instructionBuilder = new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.INSTRUCTION_TYPES, instructionType, manager)); } else { instructionBuilder = new GuiElementBuilder(Items.RED_WOOL) - .setName(Text.translatable("minions.gui.instruction.no_instruction_set")); + .setName(Component.translatable("minions.gui.instruction.no_instruction_set")); } return instructionBuilder; } - public static GuiElementBuilder createParameterElement(Parameter parameter, @Nullable ValueSupplier valueSupplier, DynamicRegistryManager manager) { + public static GuiElementBuilder createParameterElement(Parameter parameter, @Nullable ValueSupplier valueSupplier, RegistryAccess manager) { GuiElementBuilder builder = new GuiElementBuilder(GuiDisplay.getDisplayStack(MinionRegistries.VALUE_TYPES, parameter.type(), manager)) - .setName(Text.translatable("minions.gui.instruction.parameter", parameter.name(), Text.translatable(TranslationUtil.getTranslationKey(parameter.type(), MinionRegistries.VALUE_TYPES)))); + .setName(Component.translatable("minions.gui.instruction.parameter", parameter.name(), Component.translatable(TranslationUtil.getTranslationKey(parameter.type(), MinionRegistries.VALUE_TYPES)))); if(valueSupplier != null) { - builder.addLoreLine(Text.translatable("minions.gui.instruction.argument", valueSupplier.getDisplayText())); + builder.addLoreLine(Component.translatable("minions.gui.instruction.argument", valueSupplier.getDisplayText())); } return builder; } diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java index f967780..b7fb49e 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java @@ -10,8 +10,8 @@ import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.instruction.ConfiguredInstruction; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.MenuType; public class InstructionListGui extends MinionsGui implements MinionListener { private final GuiContext.Minion context; @@ -33,13 +33,13 @@ public class InstructionListGui extends MinionsGui implements MinionListener { @Override protected void open() { minion.addMinionListener(this); - gui = new SimpleGui(ScreenHandlerType.GENERIC_9X3, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_9x3, viewer, false) { @Override public void onClose() { onBackingClosed(); } }; - gui.setTitle(Text.translatable("minions.gui.instruction.title")); + gui.setTitle(Component.translatable("minions.gui.instruction.title")); resetInstructionList(); gui.open(); } @@ -59,8 +59,8 @@ public class InstructionListGui extends MinionsGui implements MinionListener { int i = 0; for (String instructionName : minion.getInstructionManager().getInstructionNames()) { ConfiguredInstruction instruction = minion.getInstructionManager().getInstruction(instructionName); - gui.setSlot(i, new GuiElementBuilder(GuiDisplay.getGuiDisplayFor(MinionRegistries.INSTRUCTION_TYPES, instruction.getInstruction(), viewer.getRegistryManager()).createItemStack()) - .setName(Text.literal(instructionName)) + gui.setSlot(i, new GuiElementBuilder(GuiDisplay.getGuiDisplayFor(MinionRegistries.INSTRUCTION_TYPES, instruction.getInstruction(), viewer.registryAccess()).createItemStack()) + .setName(Component.literal(instructionName)) .setCallback(() -> new ConfigureInstructionGui(this, GuiContext.Instruction.create(context, instruction, instructionName))) ); i++; diff --git a/src/main/java/io/github/skippyall/minions/gui/minion/GuiContext.java b/src/main/java/io/github/skippyall/minions/gui/minion/GuiContext.java index a9e0334..29854db 100644 --- a/src/main/java/io/github/skippyall/minions/gui/minion/GuiContext.java +++ b/src/main/java/io/github/skippyall/minions/gui/minion/GuiContext.java @@ -4,12 +4,12 @@ import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.instruction.ConfiguredInstruction; import io.github.skippyall.minions.program.supplier.Parameter; -import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.level.ServerPlayer; public interface GuiContext { - ServerPlayerEntity getViewer(); + ServerPlayer getViewer(); - static GuiContext create(ServerPlayerEntity viewer) { + static GuiContext create(ServerPlayer viewer) { return new GuiContextImpl(viewer); } diff --git a/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java b/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java index 20b4feb..1090933 100644 --- a/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java +++ b/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java @@ -4,18 +4,18 @@ import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.instruction.ConfiguredInstruction; import io.github.skippyall.minions.program.supplier.Parameter; -import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.level.ServerPlayer; //If only this mod was kotlin public class GuiContextImpl implements GuiContext { - private final ServerPlayerEntity viewer; + private final ServerPlayer viewer; - public GuiContextImpl(ServerPlayerEntity viewer) { + public GuiContextImpl(ServerPlayer viewer) { this.viewer = viewer; } @Override - public ServerPlayerEntity getViewer() { + public ServerPlayer getViewer() { return viewer; } @@ -81,7 +81,7 @@ public class GuiContextImpl implements GuiContext { } @Override - public ServerPlayerEntity getViewer() { + public ServerPlayer getViewer() { return context.getViewer(); } } diff --git a/src/main/java/io/github/skippyall/minions/gui/minion/MinionGui.java b/src/main/java/io/github/skippyall/minions/gui/minion/MinionGui.java index fb3c2eb..f572f93 100644 --- a/src/main/java/io/github/skippyall/minions/gui/minion/MinionGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/minion/MinionGui.java @@ -7,16 +7,16 @@ import io.github.skippyall.minions.gui.instruction.InstructionGui; import io.github.skippyall.minions.minion.MinionListener; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.module.ModuleInventory; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Items; public class MinionGui extends MinionsGui implements MinionListener { private final MinionFakePlayer minion; private SimpleGui gui; - public MinionGui(ServerPlayerEntity viewer, MinionFakePlayer minion) { + public MinionGui(ServerPlayer viewer, MinionFakePlayer minion) { super(viewer); this.minion = minion; minion.addMinionListener(this); @@ -29,7 +29,7 @@ public class MinionGui extends MinionsGui implements MinionListener { @Override protected void open() { - gui = new SimpleGui(ScreenHandlerType.GENERIC_3X3, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_3x3, viewer, false) { @Override public void onClose() { onBackingClosed(); @@ -40,27 +40,27 @@ public class MinionGui extends MinionsGui implements MinionListener { gui.setSlot(1, new GuiElementBuilder() .setItem(Items.COMMAND_BLOCK) - .setName(Text.translatable("minions.gui.main.instructions")) + .setName(Component.translatable("minions.gui.main.instructions")) .setCallback(() -> { InstructionGui.openInstructionMainMenu(this, GuiContext.Minion.create(GuiContext.create(viewer), minion)); }) ); gui.setSlot(3, new GuiElementBuilder() .setItem(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) - .setName(Text.translatable("minions.gui.main.modules")) + .setName(Component.translatable("minions.gui.main.modules")) .setCallback(() -> { ModuleInventory.openModuleInventory(viewer, minion); }) ); gui.setSlot(5, new GuiElementBuilder() .setItem(Items.CHEST) - .setName(Text.translatable("minions.gui.main.inventory")) + .setName(Component.translatable("minions.gui.main.inventory")) .setCallback(() -> new MinionInventoryGui(this)) ); gui.setSlot(7, new GuiElementBuilder() .setItem(Items.BARRIER) - .setName(Text.translatable("minions.gui.main.pickup")) - .setCallback(() -> minion.kill(minion.getWorld())) + .setName(Component.translatable("minions.gui.main.pickup")) + .setCallback(() -> minion.kill(minion.level())) ); gui.open(); } diff --git a/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java b/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java index 439e708..291aac6 100644 --- a/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java @@ -3,14 +3,14 @@ package io.github.skippyall.minions.gui.minion; import eu.pb4.sgui.api.gui.SimpleGui; import io.github.skippyall.minions.gui.MinionsGui; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.screen.slot.ArmorSlot; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.ArmorSlot; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; public class MinionInventoryGui extends MinionsGui { protected final MinionGui parent; @@ -27,13 +27,13 @@ public class MinionInventoryGui extends MinionsGui { @Override protected void open() { - gui = new SimpleGui(ScreenHandlerType.GENERIC_9X6, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_9x6, viewer, false) { @Override public void onClose() { onBackingClosed(); } }; - gui.setTitle(Text.translatable("minions.gui.inventory.title")); + gui.setTitle(Component.translatable("minions.gui.inventory.title")); for(int i = 0; i < 18; i++) { gui.setSlot(i, new ItemStack(Items.BARRIER)); @@ -45,17 +45,17 @@ public class MinionInventoryGui extends MinionsGui { gui.setSlot(5, new ItemStack(Items.LEATHER_BOOTS)); gui.setSlot(6, new ItemStack(Items.SHIELD)); - gui.setSlotRedirect(2 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.HEAD, EquipmentSlot.HEAD.getOffsetEntitySlotId(PlayerInventory.MAIN_SIZE), 0, 0, null)); - gui.setSlotRedirect(3 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.CHEST, EquipmentSlot.CHEST.getOffsetEntitySlotId(PlayerInventory.MAIN_SIZE), 0, 0, null)); - gui.setSlotRedirect(4 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.LEGS, EquipmentSlot.LEGS.getOffsetEntitySlotId(PlayerInventory.MAIN_SIZE), 0, 0, null)); - gui.setSlotRedirect(5 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.FEET, EquipmentSlot.FEET.getOffsetEntitySlotId(PlayerInventory.MAIN_SIZE), 0, 0, null)); - gui.setSlotRedirect(6 + 9, new Slot(minion.getInventory(), PlayerInventory.OFF_HAND_SLOT, 0, 0)); + gui.setSlotRedirect(2 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.HEAD, EquipmentSlot.HEAD.getIndex(Inventory.INVENTORY_SIZE), 0, 0, null)); + gui.setSlotRedirect(3 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.CHEST, EquipmentSlot.CHEST.getIndex(Inventory.INVENTORY_SIZE), 0, 0, null)); + gui.setSlotRedirect(4 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.LEGS, EquipmentSlot.LEGS.getIndex(Inventory.INVENTORY_SIZE), 0, 0, null)); + gui.setSlotRedirect(5 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.FEET, EquipmentSlot.FEET.getIndex(Inventory.INVENTORY_SIZE), 0, 0, null)); + gui.setSlotRedirect(6 + 9, new Slot(minion.getInventory(), Inventory.SLOT_OFFHAND, 0, 0)); - for (int i = PlayerInventory.HOTBAR_SIZE; i < PlayerInventory.MAIN_SIZE; i++) { + for (int i = Inventory.SELECTION_SIZE; i < Inventory.INVENTORY_SIZE; i++) { gui.setSlotRedirect(i + 9, new Slot(minion.getInventory(), i, 0, 0)); } - for (int i = 0; i < PlayerInventory.HOTBAR_SIZE; i++) { + for (int i = 0; i < Inventory.SELECTION_SIZE; i++) { gui.setSlotRedirect(i + 45, new Slot(minion.getInventory(), i, 0, 0)); } gui.open(); diff --git a/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionInstructionListener.java b/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionInstructionListener.java index 02b6581..a643c79 100644 --- a/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionInstructionListener.java +++ b/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionInstructionListener.java @@ -2,18 +2,17 @@ package io.github.skippyall.minions.listener; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.instruction.ConfiguredInstructionListener; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.registry.RegistryKey; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import java.util.Map; import java.util.UUID; public abstract class BlockEntityMinionInstructionListener extends BlockEntityMinionListener { - protected BlockEntityMinionInstructionListener(RegistryKey worldKey, BlockPos pos, UUID minionUuid, BlockEntityType type) { + protected BlockEntityMinionInstructionListener(ResourceKey worldKey, BlockPos pos, UUID minionUuid, BlockEntityType type) { super(worldKey, pos, minionUuid, type); } diff --git a/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionListener.java b/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionListener.java index 77c384f..505b755 100644 --- a/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionListener.java +++ b/src/main/java/io/github/skippyall/minions/listener/BlockEntityMinionListener.java @@ -6,26 +6,26 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import io.github.skippyall.minions.minion.MinionListener; import io.github.skippyall.minions.minion.MinionPersistentState; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.registry.RegistryKey; +import net.minecraft.core.BlockPos; +import net.minecraft.core.UUIDUtil; +import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Uuids; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import org.jetbrains.annotations.Nullable; import java.util.Optional; import java.util.UUID; public abstract class BlockEntityMinionListener implements MinionListener { - protected RegistryKey worldKey; + protected ResourceKey worldKey; protected BlockPos pos; protected UUID minionUuid; protected BlockEntityType type; protected @Nullable MinionFakePlayer minion; - protected BlockEntityMinionListener(RegistryKey worldKey, BlockPos pos, UUID minionUuid, BlockEntityType type) { + protected BlockEntityMinionListener(ResourceKey worldKey, BlockPos pos, UUID minionUuid, BlockEntityType type) { this.worldKey = worldKey; this.pos = pos; this.minionUuid = minionUuid; @@ -45,10 +45,10 @@ public abstract class BlockEntityMinionListener implement this.minion = null; } - public static > T getListener(World world, BlockPos pos, UUID minionUuid, Class clazz) { + public static > T getListener(Level world, BlockPos pos, UUID minionUuid, Class clazz) { if(minionUuid != null) { for (MinionListener listener : MinionPersistentState.get(world.getServer()).getMinionData(minionUuid).listeners()) { - if (listener instanceof BlockEntityMinionListener tl && tl.pos.equals(pos) && tl.worldKey.equals(world.getRegistryKey()) && clazz.isInstance(tl)) { + if (listener instanceof BlockEntityMinionListener tl && tl.pos.equals(pos) && tl.worldKey.equals(world.dimension()) && clazz.isInstance(tl)) { return clazz.cast(tl); } } @@ -56,18 +56,18 @@ public abstract class BlockEntityMinionListener implement return null; } - public static > Codec getCodec(Function3, BlockPos, UUID, L> constructor) { + public static > Codec getCodec(Function3, BlockPos, UUID, L> constructor) { return RecordCodecBuilder.create(instance -> instance.group( - World.CODEC.fieldOf("world").forGetter(listener -> listener.worldKey), + Level.RESOURCE_KEY_CODEC.fieldOf("world").forGetter(listener -> listener.worldKey), BlockPos.CODEC.fieldOf("pos").forGetter(listener -> listener.pos), - Uuids.CODEC.fieldOf("minionUuid").forGetter(listener -> listener.minionUuid) + UUIDUtil.AUTHLIB_CODEC.fieldOf("minionUuid").forGetter(listener -> listener.minionUuid) ).apply(instance, constructor)); } private BlockEntityState getBlockEntityState(MinecraftServer server) { - World world = server.getWorld(worldKey); - if(world == null || !world.isPosLoaded(pos)) { + Level world = server.getLevel(worldKey); + if(world == null || !world.isLoaded(pos)) { return BlockEntityState.UNLOADED; } @@ -79,8 +79,8 @@ public abstract class BlockEntityMinionListener implement } public Optional getBlockEntity(MinecraftServer server) { - World world = server.getWorld(worldKey); - if(world != null && world.isPosLoaded(pos)) { + Level world = server.getLevel(worldKey); + if(world != null && world.isLoaded(pos)) { return world.getBlockEntity(pos, type); } return Optional.empty(); @@ -96,13 +96,13 @@ public abstract class BlockEntityMinionListener implement public void add(MinecraftServer server) { MinionPersistentState.get(server).getMinionData(minionUuid).listeners().addListener(this); - MinionPersistentState.get(server).markDirty(); - this.minion = (MinionFakePlayer) server.getPlayerManager().getPlayer(minionUuid); + MinionPersistentState.get(server).setDirty(); + this.minion = (MinionFakePlayer) server.getPlayerList().getPlayer(minionUuid); } public void remove(MinecraftServer server) { MinionPersistentState.get(server).getMinionData(minionUuid).listeners().removeListener(this); - MinionPersistentState.get(server).markDirty(); + MinionPersistentState.get(server).setDirty(); } public enum BlockEntityState { diff --git a/src/main/java/io/github/skippyall/minions/listener/SerializableListenerManager.java b/src/main/java/io/github/skippyall/minions/listener/SerializableListenerManager.java index fa4cc9a..325cc0e 100644 --- a/src/main/java/io/github/skippyall/minions/listener/SerializableListenerManager.java +++ b/src/main/java/io/github/skippyall/minions/listener/SerializableListenerManager.java @@ -1,14 +1,13 @@ package io.github.skippyall.minions.listener; import com.mojang.serialization.Codec; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; - import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class SerializableListenerManager extends ListenerManager { public SerializableListenerManager() { @@ -20,8 +19,8 @@ public class SerializableListenerManager Codec> getCodec(Registry> registry) { - return registry.getCodec().dispatch( - listener -> listener.getCodecId().map(registry::get).orElse(Codec.unit(null)), + return registry.byNameCodec().dispatch( + listener -> listener.getCodecId().map(registry::getValue).orElse(Codec.unit(null)), codec -> codec.fieldOf("data") ).listOf().xmap( list -> new SerializableListenerManager<>(new CopyOnWriteArraySet<>(list)), @@ -38,7 +37,7 @@ public class SerializableListenerManager getCodecId() { + default Optional getCodecId() { return Optional.empty(); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionConfig.java b/src/main/java/io/github/skippyall/minions/minion/MinionConfig.java index 0a7c2f2..84f5a8b 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionConfig.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionConfig.java @@ -2,15 +2,14 @@ package io.github.skippyall.minions.minion; import com.mojang.serialization.Codec; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.util.Identifier; - import java.util.HashMap; import java.util.Map; import java.util.Objects; +import net.minecraft.resources.ResourceLocation; public class MinionConfig { public static final Codec CODEC = Codec., Object>dispatchedMap( - MinionRegistries.MINION_CONFIG_OPTIONS.getCodec(), + MinionRegistries.MINION_CONFIG_OPTIONS.byNameCodec(), Option::codec ).xmap(MinionConfig::new, config -> config.values); @@ -44,11 +43,11 @@ public class MinionConfig { return Objects.hashCode(values); } - public static Option booleanOption(Identifier key, boolean defaultValue) { + public static Option booleanOption(ResourceLocation key, boolean defaultValue) { return new Option<>(key, defaultValue, Codec.BOOL); } - public record Option(Identifier key, T defaultValue, Codec codec) { + public record Option(ResourceLocation key, T defaultValue, Codec codec) { @Override public boolean equals(Object o) { if (!(o instanceof Option option)) return false; diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionData.java b/src/main/java/io/github/skippyall/minions/minion/MinionData.java index 6f15fb1..274471d 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionData.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionData.java @@ -5,10 +5,9 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import io.github.skippyall.minions.listener.SerializableListenerManager; import io.github.skippyall.minions.registration.MinionRegistries; +import net.minecraft.core.UUIDUtil; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Uuids; -import net.minecraft.util.dynamic.Codecs; - +import net.minecraft.util.ExtraCodecs; import java.util.Optional; import java.util.UUID; @@ -22,9 +21,9 @@ public record MinionData( ) { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Uuids.CODEC.fieldOf("uuid").forGetter(MinionData::uuid), + UUIDUtil.AUTHLIB_CODEC.fieldOf("uuid").forGetter(MinionData::uuid), Codec.STRING.fieldOf("name").forGetter(MinionData::name), - Codecs.GAME_PROFILE_PROPERTY_MAP.optionalFieldOf("skin").forGetter(MinionData::skin), + ExtraCodecs.PROPERTY_MAP.optionalFieldOf("skin").forGetter(MinionData::skin), Codec.BOOL.optionalFieldOf("isSpawned", false).forGetter(MinionData::isSpawned), SerializableListenerManager.getCodec(MinionRegistries.MINION_LISTENER_CODECS).optionalFieldOf("listeners").xmap( optional -> optional.orElseGet(SerializableListenerManager::new), 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 d3085db..9341a38 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionItem.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionItem.java @@ -5,35 +5,35 @@ 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.core.component.DataComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; 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 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.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.component.TooltipDisplay; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec2; 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) { + public MinionItem(Properties settings) { super(settings); } @Override - public @Nullable Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { + public @Nullable ResourceLocation getPolymerItemModel(ItemStack stack, PacketContext context) { return null; } @@ -43,39 +43,39 @@ public class MinionItem extends Item implements PolymerItem { } @Override - public ItemStack getPolymerItemStack(ItemStack stack, TooltipType tooltipType, PacketContext player) { + public ItemStack getPolymerItemStack(ItemStack stack, TooltipFlag tooltipType, PacketContext player) { ItemStack out = PolymerItemUtils.createItemStack(stack, tooltipType, player); - out.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true); + out.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true); return out; } @Override - public void appendTooltip(ItemStack stack, TooltipContext context, TooltipDisplayComponent component, Consumer tooltip, TooltipType type) { + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay component, Consumer tooltip, TooltipFlag type) { MinionData data = null /*getData(stack)*/; if(data != null) { - tooltip.accept(Text.translatable("minions.minion_item.tooltip", data.name())); + tooltip.accept(Component.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); + public InteractionResult use(Level world, Player user, InteractionHand hand) { + if(user instanceof ServerPlayer serverPlayer) { + ItemStack stack = user.getItemInHand(hand); MinionLookGui.open(serverPlayer, stack); - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } - return ActionResult.SUCCESS_SERVER; + return InteractionResult.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)); + public InteractionResult useOn(UseOnContext context) { + if(!context.getLevel().isClientSide) { + MinionData data = getDataOrDefault(context.getLevel().getServer(), context.getItemInHand()); + MinionFakePlayer.spawnMinion(data, (ServerLevel) context.getLevel(), context.getClickedPos().getCenter().add(0,0.5,0), new Vec2(0, 0)); } - context.getStack().decrement(1); - return ActionResult.SUCCESS; + context.getItemInHand().shrink(1); + return InteractionResult.SUCCESS; } public static void setData(MinecraftServer server, MinionData data, ItemStack item) { @@ -85,7 +85,7 @@ public class MinionItem extends Item implements PolymerItem { @Nullable public static MinionData getData(MinecraftServer server, ItemStack item) { - if(item.contains(MinionComponentTypes.MINION_DATA)) { + if(item.has(MinionComponentTypes.MINION_DATA)) { return MinionPersistentState.get(server).getMinionData(item.get(MinionComponentTypes.MINION_DATA)); } return null; @@ -101,6 +101,6 @@ public class MinionItem extends Item implements PolymerItem { } public static boolean containsData(ItemStack item) { - return item.contains(MinionComponentTypes.MINION_DATA); + return item.has(MinionComponentTypes.MINION_DATA); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java b/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java index f3b99b4..b47c97f 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java @@ -2,20 +2,19 @@ package io.github.skippyall.minions.minion; import com.mojang.serialization.Codec; import net.minecraft.server.MinecraftServer; -import net.minecraft.world.PersistentState; -import net.minecraft.world.PersistentStateType; -import net.minecraft.world.World; - +import net.minecraft.world.level.Level; +import net.minecraft.world.level.saveddata.SavedData; +import net.minecraft.world.level.saveddata.SavedDataType; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; -public class MinionPersistentState extends PersistentState { +public class MinionPersistentState extends SavedData { public static final Codec CODEC = MinionData.CODEC.listOf().xmap(MinionPersistentState::new, MinionPersistentState::getMinionDataList); - public static PersistentStateType TYPE = new PersistentStateType<>("minion", MinionPersistentState::new, MinionPersistentState.CODEC, null); + public static SavedDataType TYPE = new SavedDataType<>("minion", MinionPersistentState::new, MinionPersistentState.CODEC, null); private final Map minionData = new HashMap<>(); @@ -43,7 +42,7 @@ public class MinionPersistentState extends PersistentState { public void updateMinionData(MinionData data) { minionData.put(data.uuid(), data); - markDirty(); + setDirty(); } public boolean isMinion(UUID uuid) { @@ -61,6 +60,6 @@ public class MinionPersistentState extends PersistentState { } public static MinionPersistentState get(MinecraftServer server) { - return server.getWorld(World.OVERWORLD).getPersistentStateManager().getOrCreate(TYPE); + return server.getLevel(Level.OVERWORLD).getDataStorage().computeIfAbsent(TYPE); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionProfileUtils.java b/src/main/java/io/github/skippyall/minions/minion/MinionProfileUtils.java index 08e4d19..265c7f8 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionProfileUtils.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionProfileUtils.java @@ -5,10 +5,9 @@ import com.mojang.authlib.properties.PropertyMap; import com.mojang.brigadier.StringReader; import io.github.skippyall.minions.MinionsConfig; import io.github.skippyall.minions.gui.input.Result; +import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; -import net.minecraft.text.Text; -import net.minecraft.util.StringHelper; - +import net.minecraft.util.StringUtil; import java.util.UUID; import static io.github.skippyall.minions.Minions.LOGGER; @@ -31,23 +30,23 @@ public class MinionProfileUtils { return newProfile; } - public static Result checkMinionNameWithoutPrefix(MinecraftServer server, String name) { + public static Result checkMinionNameWithoutPrefix(MinecraftServer server, String name) { for(char c : name.toCharArray()) { if(!StringReader.isAllowedInUnquotedString(c)) { - return new Result.Error<>(Text.translatable("minions.generic.name.invalid_char")); + return new Result.Error<>(Component.translatable("minions.generic.name.invalid_char")); } } if((getPrefix() + name).length() > 16) { - return new Result.Error<>(Text.translatable("minions.generic.name.too_long")); + return new Result.Error<>(Component.translatable("minions.generic.name.too_long")); } - if(!StringHelper.isValidPlayerName(getPrefix() + name)) { - return new Result.Error<>(Text.translatable("minions.generic.name.invalid")); + if(!StringUtil.isValidPlayerName(getPrefix() + name)) { + return new Result.Error<>(Component.translatable("minions.generic.name.invalid")); } if(MinionPersistentState.get(server).isMinionNameTaken(getPrefix() + name)) { - return new Result.Error<>(Text.translatable("minions.generic.name.taken")); + return new Result.Error<>(Component.translatable("minions.generic.name.taken")); } return new Result.Success<>(name); diff --git a/src/main/java/io/github/skippyall/minions/minion/MinionRuntime.java b/src/main/java/io/github/skippyall/minions/minion/MinionRuntime.java index 4d7cb80..4bb895a 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionRuntime.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionRuntime.java @@ -8,14 +8,13 @@ import io.github.skippyall.minions.program.instruction.ConfiguredInstruction; import io.github.skippyall.minions.program.instruction.InstructionType; import io.github.skippyall.minions.program.supplier.ValueSupplierType; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.registry.Registry; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; - import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.Set; +import net.minecraft.core.Registry; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; public class MinionRuntime implements InstructionRuntime { private final MinionFakePlayer minion; @@ -102,19 +101,19 @@ public class MinionRuntime implements InstructionRuntime { } } - public void save(WriteView view) { - WriteView.ListView list = view.getList("configuredInstructions"); + public void save(ValueOutput view) { + ValueOutput.ValueOutputList list = view.childrenList("configuredInstructions"); for (Map.Entry> instruction : configuredInstructions.entrySet()) { - WriteView inner = list.add(); + ValueOutput inner = list.addChild(); inner.putString("name", instruction.getKey()); instruction.getValue().save(inner, this); } } - public void load(ReadView view) { - ReadView.ListReadView list = view.getListReadView("configuredInstructions"); - for (ReadView inner : list) { - Optional name = inner.getOptionalString("name"); + public void load(ValueInput view) { + ValueInput.ValueInputList list = view.childrenListOrEmpty("configuredInstructions"); + for (ValueInput inner : list) { + Optional name = inner.getString("name"); if(name.isEmpty()) { Minions.LOGGER.error("Tried deserializing configured instruction without a name of minion \"{}\":", minion.getGameProfile().getName()); continue; diff --git a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/EntityPlayerActionPack.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/EntityPlayerActionPack.java index 53a39ff..6bc0f84 100644 --- a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/EntityPlayerActionPack.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/EntityPlayerActionPack.java @@ -3,34 +3,33 @@ package io.github.skippyall.minions.minion.fakeplayer; import io.github.skippyall.minions.mixins.EntityAccessor; -import net.minecraft.block.BlockState; -import net.minecraft.command.argument.EntityAnchorArgumentType; -import net.minecraft.entity.Entity; -import net.minecraft.entity.decoration.ItemFrameEntity; -import net.minecraft.entity.passive.AbstractHorseEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.entity.vehicle.BoatEntity; -import net.minecraft.entity.vehicle.MinecartEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; -import net.minecraft.network.packet.s2c.play.UpdateSelectedSlotS2CPacket; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.EntityHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec2f; -import net.minecraft.util.math.Vec3d; - import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; +import net.minecraft.commands.arguments.EntityAnchorArgument; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.protocol.game.ClientboundSetHeldSlotPacket; +import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.entity.decoration.ItemFrame; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.Minecart; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; public class EntityPlayerActionPack { @@ -100,7 +99,7 @@ public class EntityPlayerActionPack public EntityPlayerActionPack setSneaking(boolean doSneak) { sneaking = doSneak; - player.setSneaking(doSneak); + player.setShiftKeyDown(doSneak); if (sprinting && sneaking) setSprinting(false); return this; @@ -132,35 +131,35 @@ public class EntityPlayerActionPack case SOUTH -> look(0, 0); case EAST -> look(-90, 0); case WEST -> look(90, 0); - case UP -> look(player.getYaw(), -90); - case DOWN -> look(player.getYaw(), 90); + case UP -> look(player.getYRot(), -90); + case DOWN -> look(player.getYRot(), 90); }; } - public EntityPlayerActionPack look(Vec2f rotation) + public EntityPlayerActionPack look(Vec2 rotation) { return look(rotation.x, rotation.y); } public EntityPlayerActionPack look(float yaw, float pitch) { - player.setYaw(yaw % 360); //setYaw - player.setPitch(MathHelper.clamp(pitch, -90, 90)); // setPitch + player.setYRot(yaw % 360); //setYaw + player.setXRot(Mth.clamp(pitch, -90, 90)); // setPitch // maybe player.moveTo(player.getX(), player.getY(), player.getZ(), yaw, Mth.clamp(pitch,-90.0F, 90.0F)); return this; } - public EntityPlayerActionPack lookAt(Vec3d position) + public EntityPlayerActionPack lookAt(Vec3 position) { - player.lookAt(EntityAnchorArgumentType.EntityAnchor.EYES, position); + player.lookAt(EntityAnchorArgument.Anchor.EYES, position); return this; } public EntityPlayerActionPack turn(float yaw, float pitch) { - return look(player.getYaw() + yaw, player.getPitch() + pitch); + return look(player.getYRot() + yaw, player.getXRot() + pitch); } - public EntityPlayerActionPack turn(Vec2f rotation) + public EntityPlayerActionPack turn(Vec2 rotation) { return turn(rotation.x, rotation.y); } @@ -189,12 +188,12 @@ public class EntityPlayerActionPack List entities; if (onlyRideables) { - entities = player.getWorld().getOtherEntities(player, player.getBoundingBox().expand(3.0D, 1.0D, 3.0D), - e -> (e instanceof MinecartEntity || e instanceof BoatEntity || e instanceof AbstractHorseEntity) && ((EntityAccessor)e).minions$canAddPassenger(player)); + entities = player.level().getEntities(player, player.getBoundingBox().inflate(3.0D, 1.0D, 3.0D), + e -> (e instanceof Minecart || e instanceof Boat || e instanceof AbstractHorse) && ((EntityAccessor)e).minions$canAddPassenger(player)); } else { - entities = player.getWorld().getOtherEntities(player, player.getBoundingBox().expand(3.0D, 1.0D, 3.0D)); + entities = player.level().getEntities(player, player.getBoundingBox().inflate(3.0D, 1.0D, 3.0D)); } if (entities.size()==0) return this; @@ -205,7 +204,7 @@ public class EntityPlayerActionPack { if (e == player || (currentVehicle == e)) continue; - double dd = player.squaredDistanceTo(e); + double dd = player.distanceToSqr(e); if (dd 0) { @@ -267,27 +266,27 @@ public class EntityPlayerActionPack } } - public static HitResult getTarget(ServerPlayerEntity player) + public static HitResult getTarget(ServerPlayer player) { - double reach = player.interactionManager.isCreative() ? 5 : 4.5f; + double reach = player.gameMode.isCreative() ? 5 : 4.5f; return Tracer.rayTrace(player, 1, reach, false); } private void dropItemFromSlot(int slot, boolean dropAll) { - PlayerInventory inv = player.getInventory(); // getInventory; - if (!inv.getStack(slot).isEmpty()) - player.dropItem(inv.removeStack(slot, - dropAll ? inv.getStack(slot).getCount() : 1 + Inventory inv = player.getInventory(); // getInventory; + if (!inv.getItem(slot).isEmpty()) + player.drop(inv.removeItem(slot, + dropAll ? inv.getItem(slot).getCount() : 1 ), false, true); // scatter, keep owner } public void drop(int selectedSlot, boolean dropAll) { - PlayerInventory inv = player.getInventory(); // getInventory; + Inventory inv = player.getInventory(); // getInventory; if (selectedSlot == -2) // all { - for (int i = inv.size(); i >= 0; i--) + for (int i = inv.getContainerSize(); i >= 0; i--) dropItemFromSlot(i, dropAll); } else // one slot @@ -301,7 +300,7 @@ public class EntityPlayerActionPack public void setSlot(int slot) { player.getInventory().setSelectedSlot(slot-1); - player.networkHandler.sendPacket(new UpdateSelectedSlotS2CPacket(slot-1)); + player.connection.send(new ClientboundSetHeldSlotPacket(slot-1)); } public enum ActionType @@ -322,23 +321,23 @@ public class EntityPlayerActionPack return true; } HitResult hit = getTarget(player); - for (Hand hand : Hand.values()) + for (InteractionHand hand : InteractionHand.values()) { switch (hit.getType()) { case BLOCK: { - player.updateLastActionTime(); - ServerWorld world = player.getWorld(); + player.resetLastActionTime(); + ServerLevel world = player.level(); BlockHitResult blockHit = (BlockHitResult) hit; BlockPos pos = blockHit.getBlockPos(); - Direction side = blockHit.getSide(); - if (pos.getY() < player.getWorld().getTopYInclusive() - (side == Direction.UP ? 1 : 0) && world.canEntityModifyAt(player, pos)) + Direction side = blockHit.getDirection(); + if (pos.getY() < player.level().getMaxY() - (side == Direction.UP ? 1 : 0) && world.mayInteract(player, pos)) { - ActionResult result = player.interactionManager.interactBlock(player, world, player.getStackInHand(hand), hand, blockHit); - if (result instanceof ActionResult.Success success) + InteractionResult result = player.gameMode.useItemOn(player, world, player.getItemInHand(hand), hand, blockHit); + if (result instanceof InteractionResult.Success success) { - if (success.swingSource() == ActionResult.SwingSource.SERVER) player.swingHand(hand); + if (success.swingSource() == InteractionResult.SwingSource.SERVER) player.swing(hand); ap.itemUseCooldown = 3; return true; } @@ -347,19 +346,19 @@ public class EntityPlayerActionPack } case ENTITY: { - player.updateLastActionTime(); + player.resetLastActionTime(); EntityHitResult entityHit = (EntityHitResult) hit; Entity entity = entityHit.getEntity(); - boolean handWasEmpty = player.getStackInHand(hand).isEmpty(); - boolean itemFrameEmpty = (entity instanceof ItemFrameEntity) && ((ItemFrameEntity) entity).getHeldItemStack().isEmpty(); - Vec3d relativeHitPos = entityHit.getPos().subtract(entity.getX(), entity.getY(), entity.getZ()); - if (entity.interactAt(player, relativeHitPos, hand).isAccepted()) + boolean handWasEmpty = player.getItemInHand(hand).isEmpty(); + boolean itemFrameEmpty = (entity instanceof ItemFrame) && ((ItemFrame) entity).getItem().isEmpty(); + Vec3 relativeHitPos = entityHit.getLocation().subtract(entity.getX(), entity.getY(), entity.getZ()); + if (entity.interactAt(player, relativeHitPos, hand).consumesAction()) { ap.itemUseCooldown = 3; return true; } // fix for SS itemframe always returns CONSUME even if no action is performed - if (player.interact(entity, hand).isAccepted() && !(handWasEmpty && itemFrameEmpty)) + if (player.interactOn(entity, hand).consumesAction() && !(handWasEmpty && itemFrameEmpty)) { ap.itemUseCooldown = 3; return true; @@ -367,8 +366,8 @@ public class EntityPlayerActionPack break; } } - ItemStack handItem = player.getStackInHand(hand); - if (player.interactionManager.interactItem(player, player.getWorld(), handItem, hand).isAccepted()) + ItemStack handItem = player.getItemInHand(hand); + if (player.gameMode.useItem(player, player.level(), handItem, hand).consumesAction()) { ap.itemUseCooldown = 3; return true; @@ -382,7 +381,7 @@ public class EntityPlayerActionPack { EntityPlayerActionPack ap = player.getMinionActionPack(); ap.itemUseCooldown = 0; - player.stopUsingItem(); + player.releaseUsingItem(); } }, ATTACK(true) { @@ -395,10 +394,10 @@ public class EntityPlayerActionPack if (!action.isContinuous || action.first) { player.attack(entityHit.getEntity()); - player.swingHand(Hand.MAIN_HAND); + player.swing(InteractionHand.MAIN_HAND); } - player.resetLastAttackedTicks(); - player.updateLastActionTime(); + player.resetAttackStrengthTicker(); + player.resetLastActionTime(); return true; } case BLOCK: { @@ -409,18 +408,18 @@ public class EntityPlayerActionPack } BlockHitResult blockHit = (BlockHitResult) hit; BlockPos pos = blockHit.getBlockPos(); - Direction side = blockHit.getSide(); - if (player.isBlockBreakingRestricted(player.getWorld(), pos, player.interactionManager.getGameMode())) return false; - if (ap.currentBlock != null && player.getWorld().getBlockState(ap.currentBlock).isAir()) + Direction side = blockHit.getDirection(); + if (player.blockActionRestricted(player.level(), pos, player.gameMode.getGameModeForPlayer())) return false; + if (ap.currentBlock != null && player.level().getBlockState(ap.currentBlock).isAir()) { ap.currentBlock = null; return false; } - BlockState state = player.getWorld().getBlockState(pos); + BlockState state = player.level().getBlockState(pos); boolean blockBroken = false; - if (player.interactionManager.getGameMode().isCreative()) + if (player.gameMode.getGameModeForPlayer().isCreative()) { - player.interactionManager.processBlockBreakingAction(pos, PlayerActionC2SPacket.Action.START_DESTROY_BLOCK, side, player.getWorld().getTopYInclusive(), -1); + player.gameMode.handleBlockBreakAction(pos, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, side, player.level().getMaxY(), -1); ap.blockHitDelay = 5; blockBroken = true; } @@ -428,15 +427,15 @@ public class EntityPlayerActionPack { if (ap.currentBlock != null) { - player.interactionManager.processBlockBreakingAction(ap.currentBlock, PlayerActionC2SPacket.Action.ABORT_DESTROY_BLOCK, side, player.getWorld().getTopYInclusive(), -1); + player.gameMode.handleBlockBreakAction(ap.currentBlock, ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, side, player.level().getMaxY(), -1); } - player.interactionManager.processBlockBreakingAction(pos, PlayerActionC2SPacket.Action.START_DESTROY_BLOCK, side, player.getWorld().getTopYInclusive(), -1); + player.gameMode.handleBlockBreakAction(pos, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, side, player.level().getMaxY(), -1); boolean notAir = !state.isAir(); if (notAir && ap.curBlockDamageMP == 0) { - state.onBlockBreakStart(player.getWorld(), pos, player); + state.attack(player.level(), pos, player); } - if (notAir && state.calcBlockBreakingDelta(player, player.getWorld(), pos) >= 1) + if (notAir && state.getDestroyProgress(player, player.level(), pos) >= 1) { ap.currentBlock = null; //instamine?? @@ -450,19 +449,19 @@ public class EntityPlayerActionPack } else { - ap.curBlockDamageMP += state.calcBlockBreakingDelta(player, player.getWorld(), pos); + ap.curBlockDamageMP += state.getDestroyProgress(player, player.level(), pos); if (ap.curBlockDamageMP >= 1) { - player.interactionManager.processBlockBreakingAction(pos, PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, side, player.getWorld().getTopYInclusive(), -1); + player.gameMode.handleBlockBreakAction(pos, ServerboundPlayerActionPacket.Action.STOP_DESTROY_BLOCK, side, player.level().getMaxY(), -1); ap.currentBlock = null; ap.blockHitDelay = 5; blockBroken = true; } - player.getWorld().setBlockBreakingInfo(-1, pos, (int) (ap.curBlockDamageMP * 10)); + player.level().destroyBlockProgress(-1, pos, (int) (ap.curBlockDamageMP * 10)); } - player.updateLastActionTime(); - player.swingHand(Hand.MAIN_HAND); + player.resetLastActionTime(); + player.swing(InteractionHand.MAIN_HAND); return blockBroken; } } @@ -474,8 +473,8 @@ public class EntityPlayerActionPack { EntityPlayerActionPack ap = player.getMinionActionPack(); if (ap.currentBlock == null) return; - player.getWorld().setBlockBreakingInfo(-1, ap.currentBlock, -1); - player.interactionManager.processBlockBreakingAction(ap.currentBlock, PlayerActionC2SPacket.Action.ABORT_DESTROY_BLOCK, Direction.DOWN, player.getWorld().getTopYInclusive(), -1); + player.level().destroyBlockProgress(-1, ap.currentBlock, -1); + player.gameMode.handleBlockBreakAction(ap.currentBlock, ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, Direction.DOWN, player.level().getMaxY(), -1); ap.currentBlock = null; } }, @@ -486,7 +485,7 @@ public class EntityPlayerActionPack { if (action.limit == 1) { - if (player.isOnGround()) player.jump(); // onGround + if (player.onGround()) player.jumpFromGround(); // onGround } else { @@ -506,8 +505,8 @@ public class EntityPlayerActionPack @Override boolean execute(MinionFakePlayer player, Action action) { - player.updateLastActionTime(); - player.dropSelectedItem(false); // dropSelectedItem + player.resetLastActionTime(); + player.drop(false); // dropSelectedItem return false; } }, @@ -516,8 +515,8 @@ public class EntityPlayerActionPack @Override boolean execute(MinionFakePlayer player, Action action) { - player.updateLastActionTime(); - player.dropSelectedItem(true); // dropSelectedItem + player.resetLastActionTime(); + player.drop(true); // dropSelectedItem return false; } }, @@ -526,10 +525,10 @@ public class EntityPlayerActionPack @Override boolean execute(MinionFakePlayer player, Action action) { - player.updateLastActionTime(); - ItemStack itemStack_1 = player.getStackInHand(Hand.OFF_HAND); - player.setStackInHand(Hand.OFF_HAND, player.getStackInHand(Hand.MAIN_HAND)); - player.setStackInHand(Hand.MAIN_HAND, itemStack_1); + player.resetLastActionTime(); + ItemStack itemStack_1 = player.getItemInHand(InteractionHand.OFF_HAND); + player.setItemInHand(InteractionHand.OFF_HAND, player.getItemInHand(InteractionHand.MAIN_HAND)); + player.setItemInHand(InteractionHand.MAIN_HAND, itemStack_1); return false; } }; diff --git a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/FakeClientConnection.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/FakeClientConnection.java index ddeedc1..488e9d9 100644 --- a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/FakeClientConnection.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/FakeClientConnection.java @@ -2,13 +2,13 @@ package io.github.skippyall.minions.minion.fakeplayer; import io.netty.channel.embedded.EmbeddedChannel; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.NetworkSide; -import net.minecraft.network.listener.PacketListener; -import net.minecraft.network.state.NetworkState; +import net.minecraft.network.Connection; +import net.minecraft.network.PacketListener; +import net.minecraft.network.ProtocolInfo; +import net.minecraft.network.protocol.PacketFlow; -public class FakeClientConnection extends ClientConnection { - public FakeClientConnection(NetworkSide p) +public class FakeClientConnection extends Connection { + public FakeClientConnection(PacketFlow p) { super(p); // compat with adventure-platform-fabric. This does NOT trigger other vanilla handlers for establishing a channel @@ -17,7 +17,7 @@ public class FakeClientConnection extends ClientConnection { } @Override - public void tryDisableAutoRead() + public void setReadOnly() { } @@ -26,11 +26,11 @@ public class FakeClientConnection extends ClientConnection { } @Override - public void setInitialPacketListener(PacketListener packetListener) + public void setListenerForServerboundHandshake(PacketListener packetListener) { } @Override - public void transitionInbound(NetworkState state, T packetListener) { + public void setupInboundProtocol(ProtocolInfo state, T packetListener) { } } diff --git a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/MinionFakePlayer.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/MinionFakePlayer.java index adaa912..74085d1 100644 --- a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/MinionFakePlayer.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/MinionFakePlayer.java @@ -15,44 +15,44 @@ import io.github.skippyall.minions.module.ModuleInventory; import io.github.skippyall.minions.registration.MinionConfigOptions; import io.github.skippyall.minions.registration.MinionItems; import io.github.skippyall.minions.registration.SpecialAbilities; -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.ItemEntity; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.player.HungerManager; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.network.DisconnectionInfo; -import net.minecraft.network.NetworkSide; -import net.minecraft.network.packet.c2s.common.SyncedClientOptions; -import net.minecraft.network.packet.c2s.play.ClientStatusC2SPacket; -import net.minecraft.network.packet.s2c.play.EntityPositionSyncS2CPacket; -import net.minecraft.network.packet.s2c.play.EntitySetHeadYawS2CPacket; +import net.minecraft.core.BlockPos; +import net.minecraft.network.DisconnectionDetails; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.contents.TranslatableContents; +import net.minecraft.network.protocol.PacketFlow; +import net.minecraft.network.protocol.game.ClientboundEntityPositionSyncPacket; +import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; +import net.minecraft.network.protocol.game.ServerboundClientCommandPacket; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.ServerTask; -import net.minecraft.server.network.ConnectedClientData; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableTextContent; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec2f; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.GameMode; -import net.minecraft.world.TeleportTarget; +import net.minecraft.server.TickTask; +import net.minecraft.server.level.ClientInformation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.CommonListenerCookie; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.food.FoodData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.portal.TeleportTransition; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import java.util.Set; import java.util.function.Consumer; -public class MinionFakePlayer extends ServerPlayerEntity { +public class MinionFakePlayer extends ServerPlayer { public Runnable fixStartingPosition = () -> {}; private EntityPlayerActionPack actionPack; @@ -60,54 +60,54 @@ public class MinionFakePlayer extends ServerPlayerEntity { private final ModuleInventory moduleInventory = new ModuleInventory(this); private final MinionRuntime instructionManager = new MinionRuntime(this); - public static void spawnMinion(MinionData data, ServerWorld level, @Nullable Vec3d pos, @Nullable Vec2f rot) { + public static void spawnMinion(MinionData data, ServerLevel level, @Nullable Vec3 pos, @Nullable Vec2 rot) { spawnMinion(data, level, pos, rot, false); } - public static void spawnMinion(MinionData data, ServerWorld level, @Nullable Vec3d pos, @Nullable Vec2f rot, boolean force) { + public static void spawnMinion(MinionData data, ServerLevel level, @Nullable Vec3 pos, @Nullable Vec2 rot, boolean force) { if(!data.isSpawned() || force) { MinecraftServer server = level.getServer(); PropertyMap skin = data.skin().orElse(null); GameProfile profile = MinionProfileUtils.makeNewMinionProfile(data.uuid(), data.name(), skin); - server.send(server.createTask(() -> doSpawn(data, profile, server, level, pos, rot))); + server.schedule(server.wrapRunnable(() -> doSpawn(data, profile, server, level, pos, rot))); } } - private static void doSpawn(MinionData data, GameProfile profile, MinecraftServer server, ServerWorld level, @Nullable Vec3d pos, @Nullable Vec2f rot) { - MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, SyncedClientOptions.createDefault()); + private static void doSpawn(MinionData data, GameProfile profile, MinecraftServer server, ServerLevel level, @Nullable Vec3 pos, @Nullable Vec2 rot) { + MinionFakePlayer instance = new MinionFakePlayer(server, level, profile, ClientInformation.createDefault()); MinionPersistentState.get(server).updateMinionData(data.withSpawned(true)); if(pos != null && rot != null) { - instance.fixStartingPosition = () -> instance.refreshPositionAndAngles(pos.x, pos.y, pos.z, rot.x, rot.y); + instance.fixStartingPosition = () -> instance.snapTo(pos.x, pos.y, pos.z, rot.x, rot.y); } - server.getPlayerManager().onPlayerConnect(new FakeClientConnection(NetworkSide.SERVERBOUND), instance, new ConnectedClientData(profile, 0, instance.getClientOptions(), false)); - System.out.println(instance.getPos()); + server.getPlayerList().placeNewPlayer(new FakeClientConnection(PacketFlow.SERVERBOUND), instance, new CommonListenerCookie(profile, 0, instance.clientInformation(), false)); + System.out.println(instance.position()); if(pos != null && rot != null) { - instance.teleport(level, pos.x, pos.y, pos.z, Set.of(), rot.x, rot.y, true); + instance.teleportTo(level, pos.x, pos.y, pos.z, Set.of(), rot.x, rot.y, true); } - instance.setVelocity(0,0,0); + instance.setDeltaMovement(0,0,0); instance.setHealth(20.0F); instance.unsetRemoved(); - instance.getAttributeInstance(EntityAttributes.STEP_HEIGHT).setBaseValue(0.6F); - instance.getAttributeInstance(EntityAttributes.WAYPOINT_TRANSMIT_RANGE).setBaseValue(0); - instance.interactionManager.changeGameMode(GameMode.SURVIVAL); - server.getPlayerManager().sendToDimension(new EntitySetHeadYawS2CPacket(instance, (byte) (instance.headYaw * 256 / 360)), level.getRegistryKey()); - server.getPlayerManager().sendToDimension(EntityPositionSyncS2CPacket.create(instance), level.getRegistryKey()); - instance.getWorld().getChunkManager().updatePosition(instance); - instance.dataTracker.set(PLAYER_MODEL_PARTS, (byte) 0x7f); // show all model layers (incl. capes) + instance.getAttribute(Attributes.STEP_HEIGHT).setBaseValue(0.6F); + instance.getAttribute(Attributes.WAYPOINT_TRANSMIT_RANGE).setBaseValue(0); + instance.gameMode.changeGameModeForPlayer(GameType.SURVIVAL); + server.getPlayerList().broadcastAll(new ClientboundRotateHeadPacket(instance, (byte) (instance.yHeadRot * 256 / 360)), level.dimension()); + server.getPlayerList().broadcastAll(ClientboundEntityPositionSyncPacket.of(instance), level.dimension()); + instance.level().getChunkSource().move(instance); + instance.entityData.set(DATA_PLAYER_MODE_CUSTOMISATION, (byte) 0x7f); // show all model layers (incl. capes) instance.getAbilities().flying = false; instance.listeners().forEach(listener -> listener.onMinionSpawn(instance)); } - public static MinionFakePlayer respawnFake(MinecraftServer server, ServerWorld level, GameProfile profile, SyncedClientOptions cli) + public static MinionFakePlayer respawnFake(MinecraftServer server, ServerLevel level, GameProfile profile, ClientInformation cli) { return new MinionFakePlayer(server, level, profile, cli); } - private MinionFakePlayer(MinecraftServer server, ServerWorld worldIn, GameProfile profile, SyncedClientOptions cli) + private MinionFakePlayer(MinecraftServer server, ServerLevel worldIn, GameProfile profile, ClientInformation cli) { super(server, worldIn, profile, cli); actionPack = new EntityPlayerActionPack(this); @@ -126,7 +126,7 @@ public class MinionFakePlayer extends ServerPlayerEntity { } public MinionData getData() { - return MinionPersistentState.get(getServer()).getMinionData(getUuid()); + return MinionPersistentState.get(getServer()).getMinionData(getUUID()); } public SerializableListenerManager listeners() { @@ -154,35 +154,35 @@ public class MinionFakePlayer extends ServerPlayerEntity { } @Override - public ActionResult interact(PlayerEntity player, Hand hand) { - if(player instanceof ServerPlayerEntity spe) { + public InteractionResult interact(Player player, InteractionHand hand) { + if(player instanceof ServerPlayer spe) { new MinionGui(spe, this); } - return ActionResult.CONSUME; + return InteractionResult.CONSUME; } @Override - public ActionResult interactAt(PlayerEntity player, Vec3d hitPos, Hand hand) { + public InteractionResult interactAt(Player player, Vec3 hitPos, InteractionHand hand) { return interact(player, hand); } @Override - public void onEquipStack(final EquipmentSlot slot, final ItemStack previous, final ItemStack stack) + public void onEquipItem(final EquipmentSlot slot, final ItemStack previous, final ItemStack stack) { - if (!isUsingItem()) super.onEquipStack(slot, previous, stack); + if (!isUsingItem()) super.onEquipItem(slot, previous, stack); } - public void kill(Text reason) + public void kill(Component reason) { listeners().forEach(listener -> listener.onMinionRemove(this)); shakeOff(); - if (reason.getContent() instanceof TranslatableTextContent text && text.getKey().equals("multiplayer.disconnect.duplicate_login")) { - this.networkHandler.onDisconnected(new DisconnectionInfo(reason)); + if (reason.getContents() instanceof TranslatableContents text && text.getKey().equals("multiplayer.disconnect.duplicate_login")) { + this.connection.onDisconnect(new DisconnectionDetails(reason)); } else { - this.getServer().send(new ServerTask(this.getServer().getTicks(), () -> { - this.networkHandler.onDisconnected(new DisconnectionInfo(reason)); + this.getServer().schedule(new TickTask(this.getServer().getTickCount(), () -> { + this.connection.onDisconnect(new DisconnectionDetails(reason)); })); } @@ -193,15 +193,15 @@ public class MinionFakePlayer extends ServerPlayerEntity { public void tick() { actionPack.onUpdate(); - if (this.getServer().getTicks() % 10 == 0) + if (this.getServer().getTickCount() % 10 == 0) { - this.networkHandler.syncWithPlayerPosition(); - this.getWorld().getChunkManager().updatePosition(this); + this.connection.resetPosition(); + this.level().getChunkSource().move(this); } try { super.tick(); - this.playerTick(); + this.doTick(); instructionManager.tick(); } catch (NullPointerException ignored) @@ -216,10 +216,10 @@ public class MinionFakePlayer extends ServerPlayerEntity { public boolean startRiding(Entity entityToRide, boolean force) { if (super.startRiding(entityToRide, force)) { // from ClientPacketListener.handleSetEntityPassengersPacket - if (entityToRide instanceof AbstractBoatEntity) { - this.lastYaw = entityToRide.getYaw(); - this.setYaw(entityToRide.getYaw()); - this.setHeadYaw(entityToRide.getHeadYaw()); + if (entityToRide instanceof AbstractBoat) { + this.yRotO = entityToRide.getYRot(); + this.setYRot(entityToRide.getYRot()); + this.setYHeadRot(entityToRide.getYHeadRot()); } return true; } else { @@ -229,62 +229,62 @@ public class MinionFakePlayer extends ServerPlayerEntity { private void shakeOff() { - if (getVehicle() instanceof PlayerEntity) stopRiding(); - for (Entity passenger : getPassengersDeep()) + if (getVehicle() instanceof Player) stopRiding(); + for (Entity passenger : getIndirectPassengers()) { - if (passenger instanceof PlayerEntity) passenger.stopRiding(); + if (passenger instanceof Player) passenger.stopRiding(); } } @Override - public void onDeath(DamageSource cause) + public void die(DamageSource cause) { shakeOff(); - super.onDeath(cause); + super.die(cause); setHealth(20); - this.hungerManager = new HungerManager(); - kill(this.getDamageTracker().getDeathMessage()); + this.foodData = new FoodData(); + kill(this.getCombatTracker().getDeathMessage()); } @Override - public String getIp() + public String getIpAddress() { return "127.0.0.1"; } @Override - public boolean allowsServerListing() { + public boolean allowsListing() { return false; } @Override - protected void fall(double y, boolean onGround, BlockState state, BlockPos pos) { - handleFall(0.0, y, 0.0, onGround); + protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { + doCheckFallDamage(0.0, y, 0.0, onGround); } @Override - public ServerPlayerEntity teleportTo(TeleportTarget target) + public ServerPlayer teleport(TeleportTransition target) { - super.teleportTo(target); - if (notInAnyWorld) { - ClientStatusC2SPacket p = new ClientStatusC2SPacket(ClientStatusC2SPacket.Mode.PERFORM_RESPAWN); - networkHandler.onClientStatus(p); + super.teleport(target); + if (wonGame) { + ServerboundClientCommandPacket p = new ServerboundClientCommandPacket(ServerboundClientCommandPacket.Action.PERFORM_RESPAWN); + connection.handleClientCommand(p); } // If above branch was taken, *this* has been removed and replaced, the new instance has been set // on 'our' connection (which is now theirs, but we still have a ref). - if (networkHandler.player.isInTeleportationState()) { - networkHandler.player.onTeleportationDone(); + if (connection.player.isChangingDimension()) { + connection.player.hasChangedDimension(); } - return networkHandler.player; + return connection.player; } @Override - public void drop(ServerWorld world, DamageSource damageSource) { - super.drop(world, damageSource); - ItemEntity entity = dropItem(toItemStack(world.getServer()), true, false); + public void dropAllDeathLoot(ServerLevel world, DamageSource damageSource) { + super.dropAllDeathLoot(world, damageSource); + ItemEntity entity = drop(toItemStack(world.getServer()), true, false); if (entity != null) { - entity.setNeverDespawn(); + entity.setUnlimitedLifetime(); } } @@ -295,16 +295,16 @@ public class MinionFakePlayer extends ServerPlayerEntity { } @Override - public void writeCustomData(WriteView view) { - super.writeCustomData(view); - moduleInventory.writeData(view.get("modules")); - instructionManager.save(view.get("instructionManager")); + public void addAdditionalSaveData(ValueOutput view) { + super.addAdditionalSaveData(view); + moduleInventory.writeData(view.child("modules")); + instructionManager.save(view.child("instructionManager")); } @Override - public void readCustomData(ReadView view) { - super.readCustomData(view); - moduleInventory.readData(view.getReadView("modules")); - instructionManager.load(view.getReadView("instructionManager")); + public void readAdditionalSaveData(ValueInput view) { + super.readAdditionalSaveData(view); + moduleInventory.readData(view.childOrEmpty("modules")); + instructionManager.load(view.childOrEmpty("instructionManager")); } } \ No newline at end of file diff --git a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/NetHandlerPlayServerFake.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/NetHandlerPlayServerFake.java index d8848cf..98275b0 100644 --- a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/NetHandlerPlayServerFake.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/NetHandlerPlayServerFake.java @@ -1,46 +1,46 @@ //code from https://github.com/gnembon/fabric-carpet package io.github.skippyall.minions.minion.fakeplayer; -import net.minecraft.entity.player.PlayerPosition; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.s2c.play.PositionFlag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.contents.TranslatableContents; +import net.minecraft.network.protocol.Packet; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ConnectedClientData; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableTextContent; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.CommonListenerCookie; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.world.entity.PositionMoveRotation; +import net.minecraft.world.entity.Relative; import java.util.Set; -public class NetHandlerPlayServerFake extends ServerPlayNetworkHandler +public class NetHandlerPlayServerFake extends ServerGamePacketListenerImpl { - public NetHandlerPlayServerFake(final MinecraftServer minecraftServer, final ClientConnection connection, final ServerPlayerEntity serverPlayer, final ConnectedClientData i) + public NetHandlerPlayServerFake(final MinecraftServer minecraftServer, final Connection connection, final ServerPlayer serverPlayer, final CommonListenerCookie i) { super(minecraftServer, connection, serverPlayer, i); } @Override - public void sendPacket(final Packet packetIn) + public void send(final Packet packetIn) { } @Override - public void disconnect(Text message) + public void disconnect(Component message) { - if (message.getContent() instanceof TranslatableTextContent text && (text.getKey().equals("multiplayer.disconnect.idling") || text.getKey().equals("multiplayer.disconnect.duplicate_login"))) + if (message.getContents() instanceof TranslatableContents text && (text.getKey().equals("multiplayer.disconnect.idling") || text.getKey().equals("multiplayer.disconnect.duplicate_login"))) { ((MinionFakePlayer) player).kill(message); } } @Override - public void requestTeleport(PlayerPosition pos, Set set) + public void teleport(PositionMoveRotation pos, Set set) { - super.requestTeleport(pos, set); - if (player.getWorld().getPlayerByUuid(player.getUuid()) != null) { - syncWithPlayerPosition(); - player.getWorld().getChunkManager().updatePosition(player); + super.teleport(pos, set); + if (player.level().getPlayerByUUID(player.getUUID()) != null) { + resetPosition(); + player.level().getChunkSource().move(player); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/Tracer.java b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/Tracer.java index 1e29f14..81bd6e5 100644 --- a/src/main/java/io/github/skippyall/minions/minion/fakeplayer/Tracer.java +++ b/src/main/java/io/github/skippyall/minions/minion/fakeplayer/Tracer.java @@ -1,17 +1,16 @@ //code from https://github.com/gnembon/fabric-carpet package io.github.skippyall.minions.minion.fakeplayer; -import net.minecraft.entity.Entity; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.EntityHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.RaycastContext; -import net.minecraft.world.World; - import java.util.Optional; import java.util.function.Predicate; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; public class Tracer { @@ -21,7 +20,7 @@ public class Tracer double maxSqDist = reach * reach; if (blockHit != null) { - maxSqDist = blockHit.getPos().squaredDistanceTo(source.getCameraPosVec(partialTicks)); + maxSqDist = blockHit.getLocation().distanceToSqr(source.getEyePosition(partialTicks)); } EntityHitResult entityHit = rayTraceEntities(source, partialTicks, reach, maxSqDist); return entityHit == null ? blockHit : entityHit; @@ -29,31 +28,31 @@ public class Tracer public static BlockHitResult rayTraceBlocks(Entity source, float partialTicks, double reach, boolean fluids) { - Vec3d pos = source.getCameraPosVec(partialTicks); - Vec3d rotation = source.getRotationVec(partialTicks); - Vec3d reachEnd = pos.add(rotation.x * reach, rotation.y * reach, rotation.z * reach); - return source.getWorld().raycast(new RaycastContext(pos, reachEnd, RaycastContext.ShapeType.OUTLINE, fluids ? - RaycastContext.FluidHandling.ANY : RaycastContext.FluidHandling.NONE, source)); + Vec3 pos = source.getEyePosition(partialTicks); + Vec3 rotation = source.getViewVector(partialTicks); + Vec3 reachEnd = pos.add(rotation.x * reach, rotation.y * reach, rotation.z * reach); + return source.level().clip(new ClipContext(pos, reachEnd, ClipContext.Block.OUTLINE, fluids ? + ClipContext.Fluid.ANY : ClipContext.Fluid.NONE, source)); } public static EntityHitResult rayTraceEntities(Entity source, float partialTicks, double reach, double maxSqDist) { - Vec3d pos = source.getCameraPosVec(partialTicks); - Vec3d reachVec = source.getRotationVec(partialTicks).multiply(reach); - Box box = source.getBoundingBox().stretch(reachVec).expand(1); - return rayTraceEntities(source, pos, pos.add(reachVec), box, e -> !e.isSpectator() && e.canHit(), maxSqDist); + Vec3 pos = source.getEyePosition(partialTicks); + Vec3 reachVec = source.getViewVector(partialTicks).scale(reach); + AABB box = source.getBoundingBox().expandTowards(reachVec).inflate(1); + return rayTraceEntities(source, pos, pos.add(reachVec), box, e -> !e.isSpectator() && e.isPickable(), maxSqDist); } - public static EntityHitResult rayTraceEntities(Entity source, Vec3d start, Vec3d end, Box box, Predicate predicate, double maxSqDistance) + public static EntityHitResult rayTraceEntities(Entity source, Vec3 start, Vec3 end, AABB box, Predicate predicate, double maxSqDistance) { - World world = source.getWorld(); + Level world = source.level(); double targetDistance = maxSqDistance; Entity target = null; - Vec3d targetHitPos = null; - for (Entity current : world.getOtherEntities(source, box, predicate)) + Vec3 targetHitPos = null; + for (Entity current : world.getEntities(source, box, predicate)) { - Box currentBox = current.getBoundingBox().expand(current.getTargetingMargin()); - Optional currentHit = currentBox.raycast(start, end); + AABB currentBox = current.getBoundingBox().inflate(current.getPickRadius()); + Optional currentHit = currentBox.clip(start, end); if (currentBox.contains(start)) { if (targetDistance >= 0) @@ -65,8 +64,8 @@ public class Tracer } else if (currentHit.isPresent()) { - Vec3d currentHitPos = currentHit.get(); - double currentDistance = start.squaredDistanceTo(currentHitPos); + Vec3 currentHitPos = currentHit.get(); + double currentDistance = start.distanceToSqr(currentHitPos); if (currentDistance < targetDistance || targetDistance == 0) { if (current.getRootVehicle() == source.getRootVehicle()) diff --git a/src/main/java/io/github/skippyall/minions/minion/program/instruction/ActionExecution.java b/src/main/java/io/github/skippyall/minions/minion/program/instruction/ActionExecution.java index 369a378..a72d6ac 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/instruction/ActionExecution.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/instruction/ActionExecution.java @@ -5,8 +5,8 @@ import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; import io.github.skippyall.minions.program.consumer.ValueConsumerList; import io.github.skippyall.minions.program.instruction.execution.ContinuousInstructionExecution; import io.github.skippyall.minions.program.supplier.ParameterValueList; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; public class ActionExecution implements ContinuousInstructionExecution { private final EntityPlayerActionPack.ActionType action; @@ -42,10 +42,10 @@ public class ActionExecution implements ContinuousInstructionExecution { private BlockPos currentBlock; @@ -36,7 +36,7 @@ public class MineBlockExecution implements InstructionExecution { done = true; return; } - if (player.isBlockBreakingRestricted(player.getWorld(), hit.getBlockPos(), player.interactionManager.getGameMode())) { + if (player.blockActionRestricted(player.level(), hit.getBlockPos(), player.gameMode.getGameModeForPlayer())) { done = true; return; } @@ -66,37 +66,37 @@ public class MineBlockExecution implements InstructionExecution { return; } - if (player.getWorld().getBlockState(currentBlock).isAir()) { + if (player.level().getBlockState(currentBlock).isAir()) { done = true; return; } - BlockState state = player.getWorld().getBlockState(currentBlock); + BlockState state = player.level().getBlockState(currentBlock); boolean blockBroken = false; if (first) { first = false; - player.interactionManager.processBlockBreakingAction(currentBlock, PlayerActionC2SPacket.Action.START_DESTROY_BLOCK, newBlockHit.getSide(), player.getWorld().getTopYInclusive(), -1); + player.gameMode.handleBlockBreakAction(currentBlock, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, newBlockHit.getDirection(), player.level().getMaxY(), -1); boolean notAir = !state.isAir(); if (notAir) { - state.onBlockBreakStart(player.getWorld(), currentBlock, player); + state.attack(player.level(), currentBlock, player); } - if (notAir && state.calcBlockBreakingDelta(player, player.getWorld(), currentBlock) >= 1) + if (notAir && state.getDestroyProgress(player, player.level(), currentBlock) >= 1) { //instamine?? blockBroken = true; } } else { - currentBlockDamage += state.calcBlockBreakingDelta(player, player.getWorld(), currentBlock); + currentBlockDamage += state.getDestroyProgress(player, player.level(), currentBlock); if (currentBlockDamage >= 1) { - player.interactionManager.processBlockBreakingAction(currentBlock, PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, newBlockHit.getSide(), player.getWorld().getTopYInclusive(), -1); + player.gameMode.handleBlockBreakAction(currentBlock, ServerboundPlayerActionPacket.Action.STOP_DESTROY_BLOCK, newBlockHit.getDirection(), player.level().getMaxY(), -1); ap.blockHitDelay = 5; blockBroken = true; } - player.getWorld().setBlockBreakingInfo(-1, currentBlock, (int) (currentBlockDamage * 10)); + player.level().destroyBlockProgress(-1, currentBlock, (int) (currentBlockDamage * 10)); } - player.updateLastActionTime(); - player.swingHand(Hand.MAIN_HAND); + player.resetLastActionTime(); + player.swing(InteractionHand.MAIN_HAND); if(blockBroken) { done = true; @@ -115,8 +115,8 @@ public class MineBlockExecution implements InstructionExecution { EntityPlayerActionPack ap = player.getMinionActionPack(); if(currentBlock != null) { - player.getWorld().setBlockBreakingInfo(-1, currentBlock, -1); - player.interactionManager.processBlockBreakingAction(currentBlock, PlayerActionC2SPacket.Action.ABORT_DESTROY_BLOCK, Direction.DOWN, player.getWorld().getTopYInclusive(), -1); + player.level().destroyBlockProgress(-1, currentBlock, -1); + player.gameMode.handleBlockBreakAction(currentBlock, ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, Direction.DOWN, player.level().getMaxY(), -1); } } @@ -126,15 +126,15 @@ public class MineBlockExecution implements InstructionExecution { } @Override - public void save(WriteView view, MinionRuntime runtime) { - view.put("currentBlock", BlockPos.CODEC, currentBlock); + public void save(ValueOutput view, MinionRuntime runtime) { + view.store("currentBlock", BlockPos.CODEC, currentBlock); view.putFloat("currentBlockDamage", currentBlockDamage); } @Override - public void load(ReadView view, MinionRuntime runtime) { + public void load(ValueInput view, MinionRuntime runtime) { currentBlock = view.read("currentBlock", BlockPos.CODEC).orElse(null); - currentBlockDamage = view.getFloat("currentBlockDamage", 0); + currentBlockDamage = view.getFloatOr("currentBlockDamage", 0); if(currentBlock == null) { done = true; } diff --git a/src/main/java/io/github/skippyall/minions/minion/program/instruction/inventory/SwapItemExecution.java b/src/main/java/io/github/skippyall/minions/minion/program/instruction/inventory/SwapItemExecution.java index 3985487..c13d802 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/instruction/inventory/SwapItemExecution.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/instruction/inventory/SwapItemExecution.java @@ -7,12 +7,12 @@ import io.github.skippyall.minions.program.instruction.InstructionExecution; import io.github.skippyall.minions.program.supplier.Parameter; import io.github.skippyall.minions.program.supplier.ParameterValueList; import io.github.skippyall.minions.registration.ValueTypes; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.slot.Slot; -import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; public class SwapItemExecution implements InstructionExecution { public static final Parameter FROM_SLOT = new Parameter<>("from_slot", ValueTypes.LONG); @@ -31,7 +31,7 @@ public class SwapItemExecution implements InstructionExecution { public void start(MinionRuntime runtime) { MinionFakePlayer minion = runtime.getMinion(); - if((fromScreen || toScreen) && minion.currentScreenHandler == null) { + if((fromScreen || toScreen) && minion.containerMenu == null) { return; } if(!(checkBounds(minion, fromSlot, fromScreen) && checkBounds(minion, toSlot, toScreen))) { @@ -48,14 +48,14 @@ public class SwapItemExecution implements InstructionExecution { simulateClick(minion, fromSlot, fromScreen); simulateClick(minion, toSlot, toScreen); simulateClick(minion, fromSlot, fromScreen); - minion.getInventory().offerOrDrop(cursor); + minion.getInventory().placeItemBackInInventory(cursor); } - private ScreenHandler getScreen(MinionFakePlayer minion, boolean screen) { + private AbstractContainerMenu getScreen(MinionFakePlayer minion, boolean screen) { if(screen) { - return minion.currentScreenHandler; + return minion.containerMenu; } else { - return minion.playerScreenHandler; + return minion.inventoryMenu; } } @@ -64,16 +64,16 @@ public class SwapItemExecution implements InstructionExecution { } private ItemStack getStack(MinionFakePlayer minion, int slot, boolean screen) { - return getScreen(minion, screen).getSlot(slot).getStack(); + return getScreen(minion, screen).getSlot(slot).getItem(); } private boolean canExchange(MinionFakePlayer minion, int slotIndex, boolean screen, ItemStack newStack) { - ScreenHandler screenHandler = getScreen(minion, screen); + AbstractContainerMenu screenHandler = getScreen(minion, screen); Slot slot = screenHandler.getSlot(slotIndex); - if(!slot.getStack().isEmpty() && !slot.canTakeItems(minion)) { + if(!slot.getItem().isEmpty() && !slot.mayPickup(minion)) { return false; } - if(!newStack.isEmpty() && !slot.canInsert(newStack)) { + if(!newStack.isEmpty() && !slot.mayPlace(newStack)) { return false; } /*else { @@ -90,12 +90,12 @@ public class SwapItemExecution implements InstructionExecution { } private void simulateClick(MinionFakePlayer minion, int slotIndex, boolean screen) { - ScreenHandler screenHandler = getScreen(minion, screen); - ItemStack previousCursor = screenHandler.getCursorStack(); - screenHandler.setCursorStack(cursor); - screenHandler.onSlotClick(slotIndex, 0, SlotActionType.SWAP, minion); - cursor = screenHandler.getCursorStack(); - screenHandler.setCursorStack(previousCursor); + AbstractContainerMenu screenHandler = getScreen(minion, screen); + ItemStack previousCursor = screenHandler.getCarried(); + screenHandler.setCarried(cursor); + screenHandler.clicked(slotIndex, 0, ClickType.SWAP, minion); + cursor = screenHandler.getCarried(); + screenHandler.setCarried(previousCursor); } @Override @@ -122,12 +122,12 @@ public class SwapItemExecution implements InstructionExecution { } @Override - public void save(WriteView view, MinionRuntime runtime) { + public void save(ValueOutput view, MinionRuntime runtime) { } @Override - public void load(ReadView view, MinionRuntime runtime) { + public void load(ValueInput view, MinionRuntime runtime) { } } diff --git a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/AbstractTurnExecution.java b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/AbstractTurnExecution.java index 6a51e4d..5ef8db7 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/AbstractTurnExecution.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/AbstractTurnExecution.java @@ -2,8 +2,8 @@ package io.github.skippyall.minions.minion.program.instruction.move; import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.program.instruction.InstructionExecution; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; public abstract class AbstractTurnExecution implements InstructionExecution { protected float targetYaw; @@ -13,26 +13,26 @@ public abstract class AbstractTurnExecution implements InstructionExecution, InstructionExecution.Stateless { @Override public void tick(MinionRuntime minion) { - minion.getMinion().move(MovementType.SELF, minion.getMinion().getHorizontalFacing().getDoubleVector().normalize().multiply(minion.getMinion().getMovementSpeed())); + minion.getMinion().move(MoverType.SELF, minion.getMinion().getDirection().getUnitVec3().normalize().scale(minion.getMinion().getSpeed())); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnDirection.java b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnDirection.java index 17b0015..a624278 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnDirection.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnDirection.java @@ -3,17 +3,16 @@ package io.github.skippyall.minions.minion.program.instruction.move; import com.mojang.serialization.Codec; import io.github.skippyall.minions.gui.Displayable; import io.github.skippyall.minions.gui.GuiDisplay; -import net.minecraft.util.StringIdentifiable; - import java.util.UUID; +import net.minecraft.util.StringRepresentable; -public enum TurnDirection implements StringIdentifiable, Displayable { +public enum TurnDirection implements StringRepresentable, Displayable { LEFT("left", -1, 0), UP("up", 0, -1), RIGHT("right", 1, 0), DOWN("down", 0, 1); - public static final Codec CODEC = StringIdentifiable.createCodec(TurnDirection::values); + public static final Codec CODEC = StringRepresentable.fromEnum(TurnDirection::values); private static final UUID MHF_ArrowLeft = UUID.fromString("a68f0b64-8d14-4000-a95f-4b9ba14f8df9"); private static final UUID MHF_ArrowUp = UUID.fromString("fef039ef-e6cd-4987-9c84-26a3e6134277"); @@ -31,7 +30,7 @@ public enum TurnDirection implements StringIdentifiable, Displayable { } @Override - public String asString() { + public String getSerializedName() { return name; } diff --git a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnExecution.java b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnExecution.java index 2cea952..2264b9d 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnExecution.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnExecution.java @@ -17,7 +17,7 @@ public class TurnExecution extends AbstractTurnExecution { float turnYaw = maxAngle * direction.xFactor; float turnPitch = maxAngle * direction.yFactor; - targetYaw = minion.getMinion().getYaw() + turnYaw; - targetPitch = minion.getMinion().getPitch() + turnPitch; + targetYaw = minion.getMinion().getYRot() + turnYaw; + targetPitch = minion.getMinion().getXRot() + turnPitch; } } diff --git a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnVectorExecution.java b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnVectorExecution.java index ab53a0a..099f6bc 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnVectorExecution.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/TurnVectorExecution.java @@ -4,9 +4,9 @@ import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.program.supplier.Parameter; import io.github.skippyall.minions.program.supplier.ParameterValueList; import io.github.skippyall.minions.registration.ValueTypes; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec2f; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; public class TurnVectorExecution extends AbstractTurnExecution { public static final Parameter X = new Parameter<>("x", ValueTypes.DOUBLE); @@ -19,18 +19,18 @@ public class TurnVectorExecution extends AbstractTurnExecution { double y = arguments.getValue(Y); double z = arguments.getValue(Z); - Vec3d vector = new Vec3d(x, y, z); - Vec2f rotation = vectorToRotation(vector); + Vec3 vector = new Vec3(x, y, z); + Vec2 rotation = vectorToRotation(vector); targetYaw = rotation.x; targetPitch = rotation.y; } //copied from Entity#lookAt (why no helper, Mojang?) - public static Vec2f vectorToRotation(Vec3d vector) { + public static Vec2 vectorToRotation(Vec3 vector) { double g = Math.sqrt(vector.x * vector.x + vector.z * vector.z); - float pitch = MathHelper.wrapDegrees((float)(-(MathHelper.atan2(vector.y, g) * 180.0F / (float)Math.PI))); - float yaw = MathHelper.wrapDegrees((float)(MathHelper.atan2(vector.z, vector.x) * 180.0F / (float)Math.PI) - 90.0F); + float pitch = Mth.wrapDegrees((float)(-(Mth.atan2(vector.y, g) * 180.0F / (float)Math.PI))); + float yaw = Mth.wrapDegrees((float)(Mth.atan2(vector.z, vector.x) * 180.0F / (float)Math.PI) - 90.0F); - return new Vec2f(yaw, pitch); + return new Vec2(yaw, pitch); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/WalkExecution.java b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/WalkExecution.java index 0926285..2ca0ae9 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/WalkExecution.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/instruction/move/WalkExecution.java @@ -5,9 +5,9 @@ import io.github.skippyall.minions.program.instruction.InstructionExecution; import io.github.skippyall.minions.program.supplier.Parameter; import io.github.skippyall.minions.program.supplier.ParameterValueList; import io.github.skippyall.minions.registration.ValueTypes; -import net.minecraft.entity.MovementType; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; public class WalkExecution implements InstructionExecution { public static final Parameter blocksToMoveParam = new Parameter<>("blocksToMove", ValueTypes.DOUBLE); @@ -18,8 +18,8 @@ public class WalkExecution implements InstructionExecution { @Override public void tick(MinionRuntime minion) { - double speed = Math.min(minion.getMinion().getMovementSpeed(), totalBlocksToMove - blocksMoved); - minion.getMinion().move(MovementType.SELF, minion.getMinion().getHorizontalFacing().getDoubleVector().normalize().multiply(speed)); + double speed = Math.min(minion.getMinion().getSpeed(), totalBlocksToMove - blocksMoved); + minion.getMinion().move(MoverType.SELF, minion.getMinion().getDirection().getUnitVec3().normalize().scale(speed)); blocksMoved += speed; } @@ -35,14 +35,14 @@ public class WalkExecution implements InstructionExecution { } @Override - public void save(WriteView view, MinionRuntime minion) { + public void save(ValueOutput view, MinionRuntime minion) { view.putDouble("totalBlocksToMove", totalBlocksToMove); view.putDouble("blocksMoved", blocksMoved); } @Override - public void load(ReadView view, MinionRuntime minion) { - totalBlocksToMove = view.getDouble("totalBlocksToMove", 0F); - blocksMoved = view.getDouble("blocksMoved", 0F); + public void load(ValueInput view, MinionRuntime minion) { + totalBlocksToMove = view.getDoubleOr("totalBlocksToMove", 0F); + blocksMoved = view.getDoubleOr("blocksMoved", 0F); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java b/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java index ac96f16..0c6f978 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java @@ -16,36 +16,36 @@ import io.github.skippyall.minions.registration.MinionComponentTypes; import io.github.skippyall.minions.registration.MinionItems; import io.github.skippyall.minions.registration.ValueSuppliers; import io.github.skippyall.minions.registration.ValueTypes; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.RegistryKey; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.text.Text; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; import java.util.concurrent.CompletableFuture; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; public class AnalogInputSupplier implements ValueSupplier { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - World.CODEC.fieldOf("analogInputWorld").forGetter(s -> s.analogInputWorld), + Level.RESOURCE_KEY_CODEC.fieldOf("analogInputWorld").forGetter(s -> s.analogInputWorld), BlockPos.CODEC.fieldOf("analogInputPos").forGetter(s -> s.analogInputPos) ).apply(instance, AnalogInputSupplier::new)); - private final RegistryKey analogInputWorld; + private final ResourceKey analogInputWorld; private final BlockPos analogInputPos; - public AnalogInputSupplier(RegistryKey analogInputWorld, BlockPos analogInputPos) { + public AnalogInputSupplier(ResourceKey analogInputWorld, BlockPos analogInputPos) { this.analogInputWorld = analogInputWorld; this.analogInputPos = analogInputPos; } @Override public Long resolve(MinionRuntime minion) { - World world = minion.getMinion().getServer().getWorld(analogInputWorld); - if(world != null && world.isPosLoaded(analogInputPos) && world.getBlockState(analogInputPos).isOf(MinionBlocks.ANALOG_INPUT_BLOCK)) { - return (long) world.getReceivedRedstonePower(analogInputPos); + Level world = minion.getMinion().getServer().getLevel(analogInputWorld); + if(world != null && world.isLoaded(analogInputPos) && world.getBlockState(analogInputPos).is(MinionBlocks.ANALOG_INPUT_BLOCK)) { + return (long) world.getBestNeighborSignal(analogInputPos); } else { return 0L; } @@ -62,8 +62,8 @@ public class AnalogInputSupplier implements ValueSupplier { } @Override - public Text getDisplayText() { - return Text.translatable("value_supplier.minions.analog_input.display", analogInputPos.toShortString(), analogInputWorld.getValue().toString()); + public Component getDisplayText() { + return Component.translatable("value_supplier.minions.analog_input.display", analogInputPos.toShortString(), analogInputWorld.location().toString()); } public static class AnalogInputSupplierType extends ValueSupplierType { @@ -79,22 +79,22 @@ public class AnalogInputSupplier implements ValueSupplier { public CompletableFuture> openConfiguration(MinionsGui parent, ValueType valueType, @Nullable ValueSupplier previous) { CompletableFuture> future = new CompletableFuture<>(); new SimpleMinionsGui(parent, (onClose, me) -> { - SimpleGui gui = new SimpleGui(ScreenHandlerType.GENERIC_3X3, parent.getViewer(), false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_3x3, parent.getViewer(), false) { @Override public void onClose() { onClose.run(); } }; - gui.setTitle(Text.translatable("value_supplier.minions.analog_input")); + gui.setTitle(Component.translatable("value_supplier.minions.analog_input")); gui.setSlot(4, new GuiElementBuilder(MinionItems.REFERENCE_ITEM) .setCallback(() -> { - ItemStack cursor = parent.getViewer().currentScreenHandler.getCursorStack(); - if (cursor.isOf(MinionItems.REFERENCE_ITEM) && cursor.get(MinionComponentTypes.REFERENCE) instanceof BlockPosClipboard pos) { + ItemStack cursor = parent.getViewer().containerMenu.getCarried(); + if (cursor.is(MinionItems.REFERENCE_ITEM) && cursor.get(MinionComponentTypes.REFERENCE) instanceof BlockPosClipboard pos) { future.complete(new AnalogInputSupplier(pos.world(), pos.pos())); } }) - .setItemName(Text.translatable("value_supplier.minions.analog_input.config.click_with_reference")) + .setItemName(Component.translatable("value_supplier.minions.analog_input.config.click_with_reference")) ); gui.open(); return gui; diff --git a/src/main/java/io/github/skippyall/minions/minion/skin/Base64SkinProvider.java b/src/main/java/io/github/skippyall/minions/minion/skin/Base64SkinProvider.java index b7f19bb..64efc53 100644 --- a/src/main/java/io/github/skippyall/minions/minion/skin/Base64SkinProvider.java +++ b/src/main/java/io/github/skippyall/minions/minion/skin/Base64SkinProvider.java @@ -3,39 +3,38 @@ package io.github.skippyall.minions.minion.skin; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; import io.github.skippyall.minions.Minions; -import net.minecraft.dialog.AfterAction; -import net.minecraft.dialog.DialogActionButtonData; -import net.minecraft.dialog.DialogButtonData; -import net.minecraft.dialog.DialogCommonData; -import net.minecraft.dialog.action.DynamicCustomDialogAction; -import net.minecraft.dialog.input.TextInputControl; -import net.minecraft.dialog.type.Dialog; -import net.minecraft.dialog.type.DialogInput; -import net.minecraft.dialog.type.NoticeDialog; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.dialog.ActionButton; +import net.minecraft.server.dialog.CommonButtonData; +import net.minecraft.server.dialog.CommonDialogData; +import net.minecraft.server.dialog.Dialog; +import net.minecraft.server.dialog.DialogAction; +import net.minecraft.server.dialog.Input; +import net.minecraft.server.dialog.NoticeDialog; +import net.minecraft.server.dialog.action.CustomAll; +import net.minecraft.server.dialog.input.TextInput; +import net.minecraft.server.level.ServerPlayer; public class Base64SkinProvider implements SkinProvider { - public static final RegistryKey DIALOG = RegistryKey.of(RegistryKeys.DIALOG, Identifier.of(Minions.MOD_ID, "base_64_input")); - public static final Identifier CUSTOM_DIALOG_ACTION = Identifier.of(Minions.MOD_ID, "base_64_submit"); + public static final ResourceKey DIALOG = ResourceKey.create(Registries.DIALOG, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "base_64_input")); + public static final ResourceLocation CUSTOM_DIALOG_ACTION = ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "base_64_submit"); private static long dialogIdCounter = 0; private static Map>> futures = new HashMap<>(); @Override - public CompletableFuture> openSkinMenu(ServerPlayerEntity player) { + public CompletableFuture> openSkinMenu(ServerPlayer player) { dialogIdCounter++; player.openDialog(getDialog()); CompletableFuture> future = new CompletableFuture<>(); @@ -43,8 +42,8 @@ public class Base64SkinProvider implements SkinProvider { return future; } - public static void onCustomDialogAction(Optional element) { - if(element.isPresent() && element.get() instanceof NbtCompound compound) { + public static void onCustomDialogAction(Optional element) { + if(element.isPresent() && element.get() instanceof CompoundTag compound) { Optional id = compound.getLong("dialog_id"); Optional base64 = compound.getString("base_64"); if(id.isPresent() && base64.isPresent() && !base64.get().isBlank()) { @@ -59,22 +58,22 @@ public class Base64SkinProvider implements SkinProvider { } } - private static RegistryEntry getDialog() { - NbtCompound additionalData = new NbtCompound(); + private static Holder getDialog() { + CompoundTag additionalData = new CompoundTag(); additionalData.putLong("dialog_id", dialogIdCounter); - return RegistryEntry.of( + return Holder.direct( new NoticeDialog( - new DialogCommonData( - Text.translatable("minions.gui.look.skin.base64.title"), + new CommonDialogData( + Component.translatable("minions.gui.look.skin.base64.title"), Optional.empty(), true, false, - AfterAction.CLOSE, + DialogAction.CLOSE, List.of(), List.of( - new DialogInput("base_64", new TextInputControl( + new Input("base_64", new TextInput( 200, - Text.empty(), + Component.empty(), false, "", 2000, @@ -82,13 +81,13 @@ public class Base64SkinProvider implements SkinProvider { )) ) ), - new DialogActionButtonData( - new DialogButtonData( - Text.translatable("gui.ok"), + new ActionButton( + new CommonButtonData( + Component.translatable("gui.ok"), 150 ), Optional.of( - new DynamicCustomDialogAction( + new CustomAll( CUSTOM_DIALOG_ACTION, Optional.of( additionalData @@ -101,7 +100,7 @@ public class Base64SkinProvider implements SkinProvider { } @Override - public Text getDisplayName() { - return Text.translatable("minions.gui.look.skin.base64"); + public Component getDisplayName() { + return Component.translatable("minions.gui.look.skin.base64"); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/skin/NameSkinProvider.java b/src/main/java/io/github/skippyall/minions/minion/skin/NameSkinProvider.java index 47a3948..b9cb1a6 100644 --- a/src/main/java/io/github/skippyall/minions/minion/skin/NameSkinProvider.java +++ b/src/main/java/io/github/skippyall/minions/minion/skin/NameSkinProvider.java @@ -3,23 +3,22 @@ package io.github.skippyall.minions.minion.skin; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.PropertyMap; import io.github.skippyall.minions.gui.input.TextInput; -import net.minecraft.block.entity.SkullBlockEntity; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; - import java.util.Optional; import java.util.concurrent.CompletableFuture; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.block.entity.SkullBlockEntity; public class NameSkinProvider implements SkinProvider { @Override - public CompletableFuture> openSkinMenu(ServerPlayerEntity player) { - return TextInput.inputString(player, Text.translatable("minions.gui.look.skin.name.title"), "") - .thenCompose(SkullBlockEntity::fetchProfileByName) + public CompletableFuture> openSkinMenu(ServerPlayer player) { + return TextInput.inputString(player, Component.translatable("minions.gui.look.skin.name.title"), "") + .thenCompose(SkullBlockEntity::fetchGameProfile) .thenApply(gameProfile -> gameProfile.map(GameProfile::getProperties)); } @Override - public Text getDisplayName() { - return Text.translatable("minions.gui.look.skin.name"); + public Component getDisplayName() { + return Component.translatable("minions.gui.look.skin.name"); } } diff --git a/src/main/java/io/github/skippyall/minions/minion/skin/SkinProvider.java b/src/main/java/io/github/skippyall/minions/minion/skin/SkinProvider.java index 9068ecc..10ff350 100644 --- a/src/main/java/io/github/skippyall/minions/minion/skin/SkinProvider.java +++ b/src/main/java/io/github/skippyall/minions/minion/skin/SkinProvider.java @@ -1,14 +1,13 @@ package io.github.skippyall.minions.minion.skin; import com.mojang.authlib.properties.PropertyMap; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; - import java.util.Optional; import java.util.concurrent.CompletableFuture; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; public interface SkinProvider { - CompletableFuture> openSkinMenu(ServerPlayerEntity player); + CompletableFuture> openSkinMenu(ServerPlayer player); - Text getDisplayName(); + Component getDisplayName(); } diff --git a/src/main/java/io/github/skippyall/minions/minion/skin/UUIDSkinProvider.java b/src/main/java/io/github/skippyall/minions/minion/skin/UUIDSkinProvider.java index 8eaae8d..16a0510 100644 --- a/src/main/java/io/github/skippyall/minions/minion/skin/UUIDSkinProvider.java +++ b/src/main/java/io/github/skippyall/minions/minion/skin/UUIDSkinProvider.java @@ -3,24 +3,23 @@ package io.github.skippyall.minions.minion.skin; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.PropertyMap; import io.github.skippyall.minions.gui.input.TextInput; -import net.minecraft.block.entity.SkullBlockEntity; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; - import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.block.entity.SkullBlockEntity; public class UUIDSkinProvider implements SkinProvider { @Override - public CompletableFuture> openSkinMenu(ServerPlayerEntity player) { - return TextInput.inputString(player, Text.translatable("minions.gui.look.skin.uuid.title"), "") - .thenCompose(uuidString -> SkullBlockEntity.fetchProfileByUuid(UUID.fromString(uuidString))) + public CompletableFuture> openSkinMenu(ServerPlayer player) { + return TextInput.inputString(player, Component.translatable("minions.gui.look.skin.uuid.title"), "") + .thenCompose(uuidString -> SkullBlockEntity.fetchGameProfile(UUID.fromString(uuidString))) .thenApply(gameProfile -> gameProfile.map(GameProfile::getProperties)); } @Override - public Text getDisplayName() { - return Text.translatable("minions.gui.look.skin.uuid"); + public Component getDisplayName() { + return Component.translatable("minions.gui.look.skin.uuid"); } } diff --git a/src/main/java/io/github/skippyall/minions/mixinhelper/EntityViewMixinHelper.java b/src/main/java/io/github/skippyall/minions/mixinhelper/EntityViewMixinHelper.java index 9477c9f..c261abf 100644 --- a/src/main/java/io/github/skippyall/minions/mixinhelper/EntityViewMixinHelper.java +++ b/src/main/java/io/github/skippyall/minions/mixinhelper/EntityViewMixinHelper.java @@ -1,8 +1,7 @@ package io.github.skippyall.minions.mixinhelper; -import net.minecraft.entity.Entity; - import java.util.function.Predicate; +import net.minecraft.world.entity.Entity; public class EntityViewMixinHelper { public static final ThreadLocal> ADDITIONAL_PREDICATE = ThreadLocal.withInitial(() -> entity -> true); diff --git a/src/main/java/io/github/skippyall/minions/mixinhelper/antimobcap/ChunkLevelManagerAccessor.java b/src/main/java/io/github/skippyall/minions/mixinhelper/antimobcap/ChunkLevelManagerAccessor.java index d09336e..b816242 100644 --- a/src/main/java/io/github/skippyall/minions/mixinhelper/antimobcap/ChunkLevelManagerAccessor.java +++ b/src/main/java/io/github/skippyall/minions/mixinhelper/antimobcap/ChunkLevelManagerAccessor.java @@ -1,11 +1,11 @@ package io.github.skippyall.minions.mixinhelper.antimobcap; import it.unimi.dsi.fastutil.objects.ObjectSet; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ChunkLevelManager; +import net.minecraft.server.level.DistanceManager; +import net.minecraft.server.level.ServerPlayer; public interface ChunkLevelManagerAccessor { - ObjectSet minions$getPlayers(long chunkpos); + ObjectSet minions$getPlayers(long chunkpos); - ChunkLevelManager.DistanceFromNearestPlayerTracker minions$getMinionless(); + DistanceManager.FixedPlayerDistanceChunkTracker minions$getMinionless(); } diff --git a/src/main/java/io/github/skippyall/minions/mixins/ChunkTicketManagerFixMixin.java b/src/main/java/io/github/skippyall/minions/mixins/ChunkTicketManagerFixMixin.java index a0dd38b..11c7ba1 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/ChunkTicketManagerFixMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/ChunkTicketManagerFixMixin.java @@ -3,20 +3,20 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import it.unimi.dsi.fastutil.objects.ObjectSet; -import net.minecraft.server.world.ChunkLevelManager; +import net.minecraft.server.level.DistanceManager; import org.slf4j.Logger; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -@Mixin(value = ChunkLevelManager.class) +@Mixin(value = DistanceManager.class) public class ChunkTicketManagerFixMixin { @Shadow @Final private static Logger LOGGER; - @WrapOperation(method = "handleChunkLeave", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectSet;remove(Ljava/lang/Object;)Z", remap = false)) + @WrapOperation(method = "removePlayer", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectSet;remove(Ljava/lang/Object;)Z", remap = false)) public boolean filterIfNull(ObjectSet instance, Object o, Operation original) { if (instance != null) { return original.call(instance, o); @@ -27,7 +27,7 @@ public class ChunkTicketManagerFixMixin { return false;//Unused } - @WrapOperation(method = "handleChunkLeave", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectSet;isEmpty()Z", remap = false)) + @WrapOperation(method = "removePlayer", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectSet;isEmpty()Z", remap = false)) public boolean filterIfNull(ObjectSet instance, Operation original) { if (instance != null) { return original.call(instance); diff --git a/src/main/java/io/github/skippyall/minions/mixins/ClientboundPlayerInfoUpdatePacket$EntryMixin.java b/src/main/java/io/github/skippyall/minions/mixins/ClientboundPlayerInfoUpdatePacket$EntryMixin.java new file mode 100644 index 0000000..097b280 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/mixins/ClientboundPlayerInfoUpdatePacket$EntryMixin.java @@ -0,0 +1,22 @@ +package io.github.skippyall.minions.mixins; + +import com.llamalad7.mixinextras.sugar.Local; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.registration.MinionConfigOptions; +import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; +import net.minecraft.server.level.ServerPlayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(ClientboundPlayerInfoUpdatePacket.Entry.class) +public class ClientboundPlayerInfoUpdatePacket$EntryMixin { + @ModifyArg(method = "(Lnet/minecraft/server/level/ServerPlayer;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket$Entry;(Ljava/util/UUID;Lcom/mojang/authlib/GameProfile;ZILnet/minecraft/world/level/GameType;Lnet/minecraft/network/chat/Component;ZILnet/minecraft/network/chat/RemoteChatSession$Data;)V"), index = 2) + private static boolean removeMinionFromTabList(boolean original, @Local(argsOnly = true) ServerPlayer player) { + if(player instanceof MinionFakePlayer minion && !minion.getData().config().getOption(MinionConfigOptions.showInTabList)) { + return false; + } + + return original; + } +} diff --git a/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java b/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java index 54711f1..bd3441f 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/ConnectionMixin.java @@ -3,11 +3,11 @@ package io.github.skippyall.minions.mixins; import io.github.skippyall.minions.minion.fakeplayer.ClientConnectionInterface; import io.netty.channel.Channel; -import net.minecraft.network.ClientConnection; +import net.minecraft.network.Connection; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(ClientConnection.class) +@Mixin(Connection.class) public abstract class ConnectionMixin implements ClientConnectionInterface { @Override @Accessor //Compat with adventure-platform-fabric diff --git a/src/main/java/io/github/skippyall/minions/mixins/EntityAccessor.java b/src/main/java/io/github/skippyall/minions/mixins/EntityAccessor.java index 06eaa10..b452af2 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/EntityAccessor.java +++ b/src/main/java/io/github/skippyall/minions/mixins/EntityAccessor.java @@ -1,16 +1,16 @@ package io.github.skippyall.minions.mixins; -import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; import java.util.stream.Stream; +import net.minecraft.world.entity.Entity; @Mixin(Entity.class) public interface EntityAccessor { @Invoker("canAddPassenger") boolean minions$canAddPassenger(Entity other); - @Invoker("streamIntoPassengers") + @Invoker("getIndirectPassengersStream") Stream minions$streamIntoPassengers(); } diff --git a/src/main/java/io/github/skippyall/minions/mixins/EntityViewMixin.java b/src/main/java/io/github/skippyall/minions/mixins/EntityGetterMixin.java similarity index 62% rename from src/main/java/io/github/skippyall/minions/mixins/EntityViewMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/EntityGetterMixin.java index 531e443..e8b672b 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/EntityViewMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/EntityGetterMixin.java @@ -1,18 +1,18 @@ package io.github.skippyall.minions.mixins; import io.github.skippyall.minions.mixinhelper.EntityViewMixinHelper; -import net.minecraft.entity.Entity; -import net.minecraft.world.EntityView; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; import java.util.function.Predicate; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.EntityGetter; -@Mixin(EntityView.class) -public interface EntityViewMixin { - @ModifyArg(method = "getClosestPlayer(DDDDZ)Lnet/minecraft/entity/player/PlayerEntity;", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/EntityView;getClosestPlayer(DDDDLjava/util/function/Predicate;)Lnet/minecraft/entity/player/PlayerEntity;")) +@Mixin(EntityGetter.class) +public interface EntityGetterMixin { + @ModifyArg(method = "getNearestPlayer(DDDDZ)Lnet/minecraft/world/entity/player/Player;", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/EntityGetter;getNearestPlayer(DDDDLjava/util/function/Predicate;)Lnet/minecraft/world/entity/player/Player;")) private @Nullable Predicate addMinionPredicate(@Nullable Predicate targetPredicate) { Predicate predicate = EntityViewMixinHelper.ADDITIONAL_PREDICATE.get(); if(targetPredicate != null) { diff --git a/src/main/java/io/github/skippyall/minions/mixins/EntityMixin.java b/src/main/java/io/github/skippyall/minions/mixins/EntityMixin.java index 1b9fb8f..12799c9 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/EntityMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/EntityMixin.java @@ -1,9 +1,9 @@ package io.github.skippyall.minions.mixins; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -17,11 +17,11 @@ public abstract class EntityMixin { public abstract @Nullable LivingEntity getControllingPassenger(); @Shadow - private World world; + private Level level; - @Inject(method = "isLogicalSideForUpdatingMovement", at = @At("HEAD"), cancellable = true) + @Inject(method = "isLocalInstanceAuthoritative", at = @At("HEAD"), cancellable = true) private void isFakePlayer(CallbackInfoReturnable cir) { - if (getControllingPassenger() instanceof MinionFakePlayer) cir.setReturnValue(!world.isClient); + if (getControllingPassenger() instanceof MinionFakePlayer) cir.setReturnValue(!level.isClientSide); } } diff --git a/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java index ac2d322..9b29574 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/MinecraftServerMixin.java @@ -4,10 +4,10 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.minion.skin.Base64SkinProvider; import io.github.skippyall.minions.registration.MinionConfigOptions; -import net.minecraft.nbt.NbtElement; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; +import net.minecraft.server.level.ServerPlayer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -20,9 +20,8 @@ import java.util.stream.Collectors; @Mixin(MinecraftServer.class) public class MinecraftServerMixin { - - @ModifyExpressionValue(method = "createMetadataPlayers", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;getPlayerList()Ljava/util/List;")) - public List ignoreFakePlayers(List original) { + @ModifyExpressionValue(method = "buildPlayerStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/players/PlayerList;getPlayers()Ljava/util/List;")) + public List ignoreFakePlayers(List original) { return original.stream() .filter(player -> !(player instanceof MinionFakePlayer minion && !minion.getData().config().getOption(MinionConfigOptions.showInServerList))) @@ -30,7 +29,7 @@ public class MinecraftServerMixin { } @Inject(method = "handleCustomClickAction", at = @At("HEAD"), cancellable = true) - private void onCustomClickAction(Identifier id, Optional payload, CallbackInfo ci) { + private void onCustomClickAction(ResourceLocation id, Optional payload, CallbackInfo ci) { if(id.equals(Base64SkinProvider.CUSTOM_DIALOG_ACTION)) { Base64SkinProvider.onCustomDialogAction(payload); ci.cancel(); diff --git a/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java b/src/main/java/io/github/skippyall/minions/mixins/MobMixin.java similarity index 58% rename from src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/MobMixin.java index 8d0e29d..8bc4415 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/MobMixin.java @@ -4,17 +4,17 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.mixinhelper.EntityViewMixinHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(MobEntity.class) -public abstract class MobEntityMixin { - @WrapOperation(method = "checkDespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getClosestPlayer(Lnet/minecraft/entity/Entity;D)Lnet/minecraft/entity/player/PlayerEntity;")) - public PlayerEntity checkMobDespawningMinion(World instance, Entity entity, double maxDistance, Operation original) { +@Mixin(Mob.class) +public abstract class MobMixin { + @WrapOperation(method = "checkDespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getNearestPlayer(Lnet/minecraft/world/entity/Entity;D)Lnet/minecraft/world/entity/player/Player;")) + public Player checkMobDespawningMinion(Level instance, Entity entity, double maxDistance, Operation original) { EntityViewMixinHelper.ADDITIONAL_PREDICATE.set(entity2 -> { if(entity2 instanceof MinionFakePlayer minion) { return minion.canDespawnMobs(); @@ -22,7 +22,7 @@ public abstract class MobEntityMixin { return true; } }); - PlayerEntity player = original.call(instance, entity, maxDistance); + Player player = original.call(instance, entity, maxDistance); EntityViewMixinHelper.ADDITIONAL_PREDICATE.remove(); return player; } diff --git a/src/main/java/io/github/skippyall/minions/mixins/NaturalSpawnerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/NaturalSpawnerMixin.java new file mode 100644 index 0000000..7b8b34e --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/mixins/NaturalSpawnerMixin.java @@ -0,0 +1,31 @@ +package io.github.skippyall.minions.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; +import io.github.skippyall.minions.mixinhelper.EntityViewMixinHelper; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.NaturalSpawner; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(NaturalSpawner.class) +public class NaturalSpawnerMixin { + @WrapOperation(method = "spawnCategoryForPosition(Lnet/minecraft/world/entity/MobCategory;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/NaturalSpawner$SpawnPredicate;Lnet/minecraft/world/level/NaturalSpawner$AfterSpawnCallback;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;getNearestPlayer(DDDDZ)Lnet/minecraft/world/entity/player/Player;")) + private static Player checkMobSpawningMinion(ServerLevel world, double x, double y, double z, double maxDistance, boolean ignoreCreative, Operation original) { + EntityViewMixinHelper.ADDITIONAL_PREDICATE.set(entity -> { + if(entity instanceof ServerPlayer player) { + if(player instanceof MinionFakePlayer minion) { + return minion.canSpawnMobs(); + } + return true; + } + return false; + }); + Player player = original.call(world, x, y, z, maxDistance, ignoreCreative); + EntityViewMixinHelper.ADDITIONAL_PREDICATE.remove(); + return player; + } +} diff --git a/src/main/java/io/github/skippyall/minions/mixins/PistonMovingBlockEntityMixin.java b/src/main/java/io/github/skippyall/minions/mixins/PistonMovingBlockEntityMixin.java index 6aef1b4..32d33ff 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/PistonMovingBlockEntityMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/PistonMovingBlockEntityMixin.java @@ -3,39 +3,39 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.block.Blocks; -import net.minecraft.block.entity.PistonBlockEntity; -import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.piston.PistonMovingBlockEntity; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(PistonBlockEntity.class) +@Mixin(PistonMovingBlockEntity.class) public abstract class PistonMovingBlockEntityMixin { - @WrapOperation(method = "pushEntities", at = @At( + @WrapOperation(method = "moveCollidedEntities", at = @At( value = "INVOKE", - target = "Lnet/minecraft/entity/Entity;getPistonBehavior()Lnet/minecraft/block/piston/PistonBehavior;" + target = "Lnet/minecraft/world/entity/Entity;getPistonPushReaction()Lnet/minecraft/world/level/material/PushReaction;" )) - private static PistonBehavior moveFakePlayers(Entity entity, Operation original, World world, BlockPos pos, float f, PistonBlockEntity pistonBlockEntity) + private static PushReaction moveFakePlayers(Entity entity, Operation original, Level world, BlockPos pos, float f, PistonMovingBlockEntity pistonBlockEntity) { - if (entity instanceof MinionFakePlayer && pistonBlockEntity.getPushedBlock().isOf(Blocks.SLIME_BLOCK)) + if (entity instanceof MinionFakePlayer && pistonBlockEntity.getMovedState().is(Blocks.SLIME_BLOCK)) { - Vec3d vec3d = entity.getVelocity(); + Vec3 vec3d = entity.getDeltaMovement(); double x = vec3d.x; double y = vec3d.y; double z = vec3d.z; Direction direction = pistonBlockEntity.getMovementDirection(); switch (direction.getAxis()) { - case X -> x = direction.getOffsetX(); - case Y -> y = direction.getOffsetY(); - case Z -> z = direction.getOffsetZ(); + case X -> x = direction.getStepX(); + case Y -> y = direction.getStepY(); + case Z -> z = direction.getStepZ(); } - entity.setVelocity(x, y, z); + entity.setDeltaMovement(x, y, z); } return original.call(entity); } diff --git a/src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java b/src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java deleted file mode 100644 index ccd1011..0000000 --- a/src/main/java/io/github/skippyall/minions/mixins/PlayerListEntryS2CPacket$EntryMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.github.skippyall.minions.mixins; - -import com.llamalad7.mixinextras.sugar.Local; -import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import io.github.skippyall.minions.registration.MinionConfigOptions; -import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket; -import net.minecraft.server.network.ServerPlayerEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -@Mixin(PlayerListS2CPacket.Entry.class) -public class PlayerListEntryS2CPacket$EntryMixin { - @ModifyArg(method = "(Lnet/minecraft/server/network/ServerPlayerEntity;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Entry;(Ljava/util/UUID;Lcom/mojang/authlib/GameProfile;ZILnet/minecraft/world/GameMode;Lnet/minecraft/text/Text;ZILnet/minecraft/network/encryption/PublicPlayerSession$Serialized;)V"), index = 2) - private static boolean removeMinionFromTabList(boolean original, @Local(argsOnly = true) ServerPlayerEntity player) { - if(player instanceof MinionFakePlayer minion && !minion.getData().config().getOption(MinionConfigOptions.showInTabList)) { - return false; - } - - return original; - } -} diff --git a/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java b/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java index 3dba26a..66bded2 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/PlayerListMixin.java @@ -9,17 +9,17 @@ import com.mojang.authlib.GameProfile; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.minion.fakeplayer.NetHandlerPlayServerFake; import io.github.skippyall.minions.registration.MinionConfigOptions; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.packet.c2s.common.SyncedClientOptions; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.network.ConnectedClientData; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.storage.ReadView; -import net.minecraft.text.Text; -import net.minecraft.util.ErrorReporter; +import net.minecraft.server.level.ClientInformation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.CommonListenerCookie; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.server.players.PlayerList; +import net.minecraft.util.ProblemReporter; +import net.minecraft.world.level.storage.ValueInput; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -30,11 +30,11 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -@Mixin(PlayerManager.class) +@Mixin(PlayerList.class) public class PlayerListMixin { - @Inject(method = "loadPlayerData", at = @At(value = "RETURN", shift = At.Shift.BEFORE)) - private void fixStartingPos(ServerPlayerEntity player, ErrorReporter errorReporter, CallbackInfoReturnable> cir) + @Inject(method = "load", at = @At(value = "RETURN", shift = At.Shift.BEFORE)) + private void fixStartingPos(ServerPlayer player, ProblemReporter errorReporter, CallbackInfoReturnable> cir) { if (player instanceof MinionFakePlayer) { @@ -42,8 +42,8 @@ public class PlayerListMixin { } } - @WrapOperation(method = "onPlayerConnect", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/ClientConnection;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/server/network/ConnectedClientData;)Lnet/minecraft/server/network/ServerPlayNetworkHandler;")) - private ServerPlayNetworkHandler replaceNetworkHandler(MinecraftServer server, ClientConnection connection, ServerPlayerEntity serverPlayer, ConnectedClientData commonListenerCookie, Operation original) + @WrapOperation(method = "placeNewPlayer", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/Connection;Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/server/network/CommonListenerCookie;)Lnet/minecraft/server/network/ServerGamePacketListenerImpl;")) + private ServerGamePacketListenerImpl replaceNetworkHandler(MinecraftServer server, Connection connection, ServerPlayer serverPlayer, CommonListenerCookie commonListenerCookie, Operation original) { if (serverPlayer instanceof MinionFakePlayer fake) { return new NetHandlerPlayServerFake(server, connection, fake, commonListenerCookie); @@ -52,23 +52,23 @@ public class PlayerListMixin { } } - @WrapOperation(method = "respawnPlayer", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/server/world/ServerWorld;Lcom/mojang/authlib/GameProfile;Lnet/minecraft/network/packet/c2s/common/SyncedClientOptions;)Lnet/minecraft/server/network/ServerPlayerEntity;")) - public ServerPlayerEntity makePlayerForRespawn(MinecraftServer minecraftServer, ServerWorld serverLevel, GameProfile gameProfile, SyncedClientOptions clientInformation, Operation original, ServerPlayerEntity serverPlayer, boolean bl) { + @WrapOperation(method = "respawn", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/server/level/ServerLevel;Lcom/mojang/authlib/GameProfile;Lnet/minecraft/server/level/ClientInformation;)Lnet/minecraft/server/level/ServerPlayer;")) + public ServerPlayer makePlayerForRespawn(MinecraftServer minecraftServer, ServerLevel serverLevel, GameProfile gameProfile, ClientInformation clientInformation, Operation original, ServerPlayer serverPlayer, boolean bl) { if (serverPlayer instanceof MinionFakePlayer minion) { return MinionFakePlayer.respawnFake(minecraftServer, serverLevel, gameProfile, clientInformation); } return original.call(minecraftServer, serverLevel, gameProfile, clientInformation); } - @WrapOperation(method = "onPlayerConnect", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V")) - public void noLoginMessage(PlayerManager instance, Text message, boolean overlay, Operation original, @Local(argsOnly = true) ServerPlayerEntity player) { + @WrapOperation(method = "placeNewPlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/players/PlayerList;broadcastSystemMessage(Lnet/minecraft/network/chat/Component;Z)V")) + public void noLoginMessage(PlayerList instance, Component message, boolean overlay, Operation original, @Local(argsOnly = true) ServerPlayer player) { if(!(player instanceof MinionFakePlayer minion && !minion.getData().config().getOption(MinionConfigOptions.sendLoginMessage))) { original.call(instance, message, overlay); } } - @ModifyReceiver(method = "checkCanJoin", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I")) - public List noMinionCounting(List instance) { + @ModifyReceiver(method = "canPlayerLogin", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I")) + public List noMinionCounting(List instance) { return instance.stream() .filter(player -> !(player instanceof MinionFakePlayer minion && !minion.getData().config().getOption(MinionConfigOptions.countForPlayerLimit))) .collect(Collectors.toCollection(ArrayList::new)); diff --git a/src/main/java/io/github/skippyall/minions/mixins/PlayerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/PlayerMixin.java index f10307b..28f5813 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/PlayerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/PlayerMixin.java @@ -4,12 +4,13 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(PlayerEntity.class) +@Mixin(Player.class) public abstract class PlayerMixin { /** * To make sure player attacks are able to knockback fake players @@ -18,8 +19,9 @@ public abstract class PlayerMixin { method = "attack", at = @At( value = "FIELD", - target = "Lnet/minecraft/entity/Entity;velocityModified:Z", - ordinal = 0 + target = "Lnet/minecraft/world/entity/Entity;hurtMarked:Z", + ordinal = 0, + opcode = Opcodes.GETFIELD ) ) private boolean velocityModifiedAndNotCarpetFakePlayer(boolean value, @Local(argsOnly = true) Entity entity) { diff --git a/src/main/java/io/github/skippyall/minions/mixins/ServerPlayNetworkHandlerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/ServerGamePacketListenerImplMixin.java similarity index 51% rename from src/main/java/io/github/skippyall/minions/mixins/ServerPlayNetworkHandlerMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/ServerGamePacketListenerImplMixin.java index 08021e8..0c4de14 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/ServerPlayNetworkHandlerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/ServerGamePacketListenerImplMixin.java @@ -4,21 +4,21 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.registration.MinionConfigOptions; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.server.players.PlayerList; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -@Mixin(ServerPlayNetworkHandler.class) -public class ServerPlayNetworkHandlerMixin { +@Mixin(ServerGamePacketListenerImpl.class) +public class ServerGamePacketListenerImplMixin { @Shadow - public ServerPlayerEntity player; + public ServerPlayer player; - @WrapOperation(method = "cleanUp", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V")) - public void noLogoutMessage(PlayerManager instance, Text message, boolean overlay, Operation original) { + @WrapOperation(method = "removePlayerFromWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/players/PlayerList;broadcastSystemMessage(Lnet/minecraft/network/chat/Component;Z)V")) + public void noLogoutMessage(PlayerList instance, Component message, boolean overlay, Operation original) { if(!(player instanceof MinionFakePlayer minion && !minion.getData().config().getOption(MinionConfigOptions.sendLogoutMessage))) { original.call(instance, message, overlay); } diff --git a/src/main/java/io/github/skippyall/minions/mixins/SleepManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/SleepStatusMixin.java similarity index 68% rename from src/main/java/io/github/skippyall/minions/mixins/SleepManagerMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/SleepStatusMixin.java index 60ab863..1a8d101 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/SleepManagerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/SleepStatusMixin.java @@ -4,15 +4,15 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.registration.MinionConfigOptions; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.SleepManager; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.players.SleepStatus; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(SleepManager.class) -public class SleepManagerMixin { - @WrapOperation(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;isSpectator()Z")) - public boolean excludeMinions(ServerPlayerEntity instance, Operation original) { +@Mixin(SleepStatus.class) +public class SleepStatusMixin { + @WrapOperation(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;isSpectator()Z")) + public boolean excludeMinions(ServerPlayer instance, Operation original) { if (instance instanceof MinionFakePlayer minion && !minion.getData().config().getOption(MinionConfigOptions.countForSleeping)) { return true; } else { diff --git a/src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java b/src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java deleted file mode 100644 index 5af310a..0000000 --- a/src/main/java/io/github/skippyall/minions/mixins/SpawnHelperMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.github.skippyall.minions.mixins; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import io.github.skippyall.minions.mixinhelper.EntityViewMixinHelper; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.world.SpawnHelper; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(SpawnHelper.class) -public class SpawnHelperMixin { - @WrapOperation(method = "spawnEntitiesInChunk(Lnet/minecraft/entity/SpawnGroup;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/world/chunk/Chunk;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/SpawnHelper$Checker;Lnet/minecraft/world/SpawnHelper$Runner;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;getClosestPlayer(DDDDZ)Lnet/minecraft/entity/player/PlayerEntity;")) - private static PlayerEntity checkMobSpawningMinion(ServerWorld world, double x, double y, double z, double maxDistance, boolean ignoreCreative, Operation original) { - EntityViewMixinHelper.ADDITIONAL_PREDICATE.set(entity -> { - if(entity instanceof ServerPlayerEntity player) { - if(player instanceof MinionFakePlayer minion) { - return minion.canSpawnMobs(); - } - return true; - } - return false; - }); - PlayerEntity player = original.call(world, x, y, z, maxDistance, ignoreCreative); - EntityViewMixinHelper.ADDITIONAL_PREDICATE.remove(); - return player; - } -} diff --git a/src/main/java/io/github/skippyall/minions/mixins/TickRateManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/TickRateManagerMixin.java index ca75b7f..1f44abb 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/TickRateManagerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/TickRateManagerMixin.java @@ -2,23 +2,23 @@ package io.github.skippyall.minions.mixins; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.world.tick.TickManager; +import net.minecraft.world.TickRateManager; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -@Mixin(TickManager.class) +@Mixin(TickRateManager.class) public abstract class TickRateManagerMixin { @Shadow - public abstract boolean shouldTick(); + public abstract boolean runsNormally(); - @ModifyReturnValue(method = "shouldSkipTick", at = @At("TAIL")) + @ModifyReturnValue(method = "isEntityFrozen", at = @At("TAIL")) private boolean handler(boolean alreadyFrozen, Entity entity) { if (alreadyFrozen) return true; - if (shouldTick()) return false; + if (runsNormally()) return false; return !isActualPlayer(entity) && // not carrying players ((EntityAccessor) entity) @@ -28,6 +28,6 @@ public abstract class TickRateManagerMixin { @Unique private static boolean isActualPlayer(Entity e) { - return e instanceof PlayerEntity && !(e instanceof MinionFakePlayer); + return e instanceof Player && !(e instanceof MinionFakePlayer); } } diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManagerMixin.java deleted file mode 100644 index 6462587..0000000 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManagerMixin.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.github.skippyall.minions.mixins.antimobcap; - -import com.llamalad7.mixinextras.sugar.Local; -import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; -import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import it.unimi.dsi.fastutil.objects.ObjectSet; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ChunkLevelManager; -import net.minecraft.server.world.ChunkTicketManager; -import net.minecraft.util.math.ChunkSectionPos; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.concurrent.Executor; - -@Mixin(ChunkLevelManager.class) -public class ChunkLevelManagerMixin implements ChunkLevelManagerAccessor { - @Shadow @Final Long2ObjectMap> playersByChunkPos; - @Shadow @Final private ChunkLevelManager.DistanceFromNearestPlayerTracker distanceFromNearestPlayerTracker; - @Unique - ChunkLevelManager.DistanceFromNearestPlayerTracker minionless; - - @Inject(method = "", at = @At("RETURN")) - public void createMinionlessClone(ChunkTicketManager ticketManager, Executor executor, Executor mainThreadExecutor, CallbackInfo ci) { - ChunkLevelManager manager = ((ChunkLevelManager)(Object)this); - minionless = manager.new DistanceFromNearestPlayerTracker(8); - ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)minionless).minions$markAsMinionless(); - ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)distanceFromNearestPlayerTracker).minions$markAsTarget(); - } - - public ObjectSet minions$getPlayers(long chunkpos) { - return playersByChunkPos.get(chunkpos); - } - - @Override - public ChunkLevelManager.DistanceFromNearestPlayerTracker minions$getMinionless() { - return minionless; - } - - @Inject(method = "handleChunkLeave", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectSet;remove(Ljava/lang/Object;)Z", shift = At.Shift.AFTER, remap = false)) - public void minion$updateMinionlessIfNoMinionInChunk(ChunkSectionPos pos, ServerPlayerEntity player, CallbackInfo ci, @Local long chunk) { - if (!((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)minionless).minions$isRealPlayerInChunk(chunk)) { - minionless.updateLevel(chunk, Integer.MAX_VALUE, false); - } - } -} diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkPosDistanceLevelPropagatorMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTrackerMixin.java similarity index 63% rename from src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkPosDistanceLevelPropagatorMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTrackerMixin.java index 20faba5..99ecb7f 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkPosDistanceLevelPropagatorMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTrackerMixin.java @@ -1,14 +1,14 @@ package io.github.skippyall.minions.mixins.antimobcap; -import net.minecraft.server.world.ChunkPosDistanceLevelPropagator; +import net.minecraft.server.level.ChunkTracker; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ChunkPosDistanceLevelPropagator.class) -public class ChunkPosDistanceLevelPropagatorMixin { - @Inject(method = "updateLevel", at = @At("HEAD")) +@Mixin(ChunkTracker.class) +public class ChunkTrackerMixin { + @Inject(method = "update", at = @At("HEAD")) public void minions$updateLevel(long chunkPos, int distance, boolean decrease, CallbackInfo info) { } diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/DistanceManager$FixedPlayerDistanceChunkTrackerMixin.java similarity index 71% rename from src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/antimobcap/DistanceManager$FixedPlayerDistanceChunkTrackerMixin.java index 4aae2d3..fbd33d0 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/DistanceManager$FixedPlayerDistanceChunkTrackerMixin.java @@ -5,8 +5,8 @@ import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$Dist import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor; import it.unimi.dsi.fastutil.longs.Long2ByteMap; import it.unimi.dsi.fastutil.objects.ObjectSet; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ChunkLevelManager; +import net.minecraft.server.level.DistanceManager; +import net.minecraft.server.level.ServerPlayer; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -16,22 +16,22 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(value = ChunkLevelManager.DistanceFromNearestPlayerTracker.class) -public abstract class ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin extends ChunkPosDistanceLevelPropagatorMixin implements ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor { +@Mixin(value = DistanceManager.FixedPlayerDistanceChunkTracker.class) +public abstract class DistanceManager$FixedPlayerDistanceChunkTrackerMixin extends ChunkTrackerMixin implements ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor { @Final @Shadow - ChunkLevelManager field_17462; + DistanceManager field_17462; @Shadow @Final - protected Long2ByteMap distanceFromNearestPlayer; + protected Long2ByteMap chunks; - @Shadow protected abstract boolean isPlayerInChunk(long chunkPos); + @Shadow protected abstract boolean havePlayer(long chunkPos); @Unique boolean minions$minionless, minions$target; - @Inject(method = "isPlayerInChunk", at = @At("RETURN"), cancellable = true) + @Inject(method = "havePlayer", at = @At("RETURN"), cancellable = true) public void minions$filterMinions(long chunkPos, CallbackInfoReturnable cir) { if (minions$minionless) { cir.setReturnValue(minions$isRealPlayerInChunk(chunkPos)); @@ -40,7 +40,7 @@ public abstract class ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin ex @Override public boolean minions$isRealPlayerInChunk(long chunkPos) { - ObjectSet players = ((ChunkLevelManagerAccessor)field_17462).minions$getPlayers(chunkPos); + ObjectSet players = ((ChunkLevelManagerAccessor)field_17462).minions$getPlayers(chunkPos); boolean contains = false; if(players != null) { contains = players.stream().anyMatch(player -> { @@ -53,17 +53,17 @@ public abstract class ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin ex return contains; } - @Inject(method = "updateLevels", at = @At("HEAD")) + @Inject(method = "runAllUpdates", at = @At("HEAD")) public void minions$sync(CallbackInfo info) { if (minions$target) { - ((ChunkLevelManagerAccessor)field_17462).minions$getMinionless().updateLevels(); + ((ChunkLevelManagerAccessor)field_17462).minions$getMinionless().runAllUpdates(); } } @Override public void minions$updateLevel(long chunkPos, int distance, boolean decrease, CallbackInfo info) { if (minions$target && (distance == Integer.MAX_VALUE || minions$isRealPlayerInChunk(chunkPos))) { - ((ChunkLevelManagerAccessor)field_17462).minions$getMinionless().updateLevel(chunkPos, distance, decrease); + ((ChunkLevelManagerAccessor)field_17462).minions$getMinionless().update(chunkPos, distance, decrease); } } @@ -79,6 +79,6 @@ public abstract class ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin ex @Override public int minions$getTickedChunkCount() { - return distanceFromNearestPlayer.size(); + return chunks.size(); } } diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/DistanceManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/DistanceManagerMixin.java new file mode 100644 index 0000000..d80e1fa --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/DistanceManagerMixin.java @@ -0,0 +1,52 @@ +package io.github.skippyall.minions.mixins.antimobcap; + +import com.llamalad7.mixinextras.sugar.Local; +import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; +import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.objects.ObjectSet; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.concurrent.Executor; +import net.minecraft.core.SectionPos; +import net.minecraft.server.level.DistanceManager; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.TicketStorage; + +@Mixin(DistanceManager.class) +public class DistanceManagerMixin implements ChunkLevelManagerAccessor { + @Shadow @Final Long2ObjectMap> playersPerChunk; + @Shadow @Final private DistanceManager.FixedPlayerDistanceChunkTracker naturalSpawnChunkCounter; + @Unique + DistanceManager.FixedPlayerDistanceChunkTracker minionless; + + @Inject(method = "", at = @At("RETURN")) + public void createMinionlessClone(TicketStorage ticketManager, Executor executor, Executor mainThreadExecutor, CallbackInfo ci) { + DistanceManager manager = ((DistanceManager)(Object)this); + minionless = manager.new FixedPlayerDistanceChunkTracker(8); + ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)minionless).minions$markAsMinionless(); + ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)naturalSpawnChunkCounter).minions$markAsTarget(); + } + + public ObjectSet minions$getPlayers(long chunkpos) { + return playersPerChunk.get(chunkpos); + } + + @Override + public DistanceManager.FixedPlayerDistanceChunkTracker minions$getMinionless() { + return minionless; + } + + @Inject(method = "removePlayer", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectSet;remove(Ljava/lang/Object;)Z", shift = At.Shift.AFTER, remap = false)) + public void minion$updateMinionlessIfNoMinionInChunk(SectionPos pos, ServerPlayer player, CallbackInfo ci, @Local long chunk) { + if (!((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)minionless).minions$isRealPlayerInChunk(chunk)) { + minionless.update(chunk, Integer.MAX_VALUE, false); + } + } +} diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheAccessor.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheAccessor.java new file mode 100644 index 0000000..ad59308 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheAccessor.java @@ -0,0 +1,12 @@ +package io.github.skippyall.minions.mixins.antimobcap; + +import net.minecraft.server.level.DistanceManager; +import net.minecraft.server.level.ServerChunkCache; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ServerChunkCache.class) +public interface ServerChunkCacheAccessor { + @Accessor + DistanceManager getDistanceManager(); +} diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheMixin.java new file mode 100644 index 0000000..fdfca6a --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkCacheMixin.java @@ -0,0 +1,23 @@ +package io.github.skippyall.minions.mixins.antimobcap; + +import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; +import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor; +import net.minecraft.server.level.DistanceManager; +import net.minecraft.server.level.ServerChunkCache; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(ServerChunkCache.class) +public class ServerChunkCacheMixin { + @Shadow + @Final + private DistanceManager distanceManager; + + @ModifyArg(method = "tickChunks(Lnet/minecraft/util/profiling/ProfilerFiller;J)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/NaturalSpawner;createState(ILjava/lang/Iterable;Lnet/minecraft/world/level/NaturalSpawner$ChunkGetter;Lnet/minecraft/world/level/LocalMobCapCalculator;)Lnet/minecraft/world/level/NaturalSpawner$SpawnState;")) + public int useMinionless(int spawningChunkCount) { + return ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)((ChunkLevelManagerAccessor)distanceManager).minions$getMinionless()).minions$getTickedChunkCount(); + } +} diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerAccessor.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerAccessor.java deleted file mode 100644 index ceedb6c..0000000 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerAccessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.skippyall.minions.mixins.antimobcap; - -import net.minecraft.server.world.ChunkLevelManager; -import net.minecraft.server.world.ServerChunkManager; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ServerChunkManager.class) -public interface ServerChunkManagerAccessor { - @Accessor - ChunkLevelManager getLevelManager(); -} diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerMixin.java deleted file mode 100644 index c55bc60..0000000 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.github.skippyall.minions.mixins.antimobcap; - -import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; -import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor; -import net.minecraft.server.world.ChunkLevelManager; -import net.minecraft.server.world.ServerChunkManager; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -@Mixin(ServerChunkManager.class) -public class ServerChunkManagerMixin { - @Shadow - @Final - private ChunkLevelManager levelManager; - - @ModifyArg(method = "tickChunks(Lnet/minecraft/util/profiler/Profiler;J)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/SpawnHelper;setupSpawn(ILjava/lang/Iterable;Lnet/minecraft/world/SpawnHelper$ChunkSource;Lnet/minecraft/world/SpawnDensityCapper;)Lnet/minecraft/world/SpawnHelper$Info;")) - public int useMinionless(int spawningChunkCount) { - return ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)((ChunkLevelManagerAccessor)levelManager).minions$getMinionless()).minions$getTickedChunkCount(); - } -} diff --git a/src/main/java/io/github/skippyall/minions/mixins/compat/universal_graves/GraveMixin.java b/src/main/java/io/github/skippyall/minions/mixins/compat/universal_graves/GraveMixin.java index 0139843..732f033 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/compat/universal_graves/GraveMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/compat/universal_graves/GraveMixin.java @@ -3,15 +3,15 @@ package io.github.skippyall.minions.mixins.compat.universal_graves; import com.llamalad7.mixinextras.sugar.Local; import eu.pb4.graves.grave.Grave; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.level.ServerPlayer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(Grave.class) public class GraveMixin { - @ModifyArg(method = "createBlock", at = @At(value = "INVOKE", target = "Leu/pb4/graves/grave/Grave;(JLcom/mojang/authlib/GameProfile;BLnet/minecraft/util/Arm;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/Identifier;Leu/pb4/graves/grave/GraveType;JJILnet/minecraft/text/Text;Ljava/util/Collection;Ljava/util/Collection;ZI)V")) - private static boolean createGrave(boolean profile, @Local(argsOnly = true) ServerPlayerEntity player) { + @ModifyArg(method = "createBlock", at = @At(value = "INVOKE", target = "Leu/pb4/graves/grave/Grave;(JLcom/mojang/authlib/GameProfile;BLnet/minecraft/world/entity/HumanoidArm;Lnet/minecraft/core/BlockPos;Lnet/minecraft/resources/ResourceLocation;Leu/pb4/graves/grave/GraveType;JJILnet/minecraft/network/chat/Component;Ljava/util/Collection;Ljava/util/Collection;ZI)V")) + private static boolean createGrave(boolean profile, @Local(argsOnly = true) ServerPlayer player) { if(player instanceof MinionFakePlayer) { return false; } diff --git a/src/main/java/io/github/skippyall/minions/module/MinionModule.java b/src/main/java/io/github/skippyall/minions/module/MinionModule.java index e7e32f9..32ba678 100644 --- a/src/main/java/io/github/skippyall/minions/module/MinionModule.java +++ b/src/main/java/io/github/skippyall/minions/module/MinionModule.java @@ -11,8 +11,8 @@ import java.util.List; public record MinionModule(List> instructions, List specialAbilities) { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - MinionRegistries.INSTRUCTION_TYPES.getCodec().listOf().fieldOf("instructions").forGetter(MinionModule::instructions), - MinionRegistries.SPECIAL_ABILITIES.getCodec().listOf().fieldOf("specialAbilities").forGetter(MinionModule::specialAbilities) + MinionRegistries.INSTRUCTION_TYPES.byNameCodec().listOf().fieldOf("instructions").forGetter(MinionModule::instructions), + MinionRegistries.SPECIAL_ABILITIES.byNameCodec().listOf().fieldOf("specialAbilities").forGetter(MinionModule::specialAbilities) ).apply(instance, MinionModule::new) ); diff --git a/src/main/java/io/github/skippyall/minions/module/ModuleInventory.java b/src/main/java/io/github/skippyall/minions/module/ModuleInventory.java index 06fd87c..6536a39 100644 --- a/src/main/java/io/github/skippyall/minions/module/ModuleInventory.java +++ b/src/main/java/io/github/skippyall/minions/module/ModuleInventory.java @@ -4,20 +4,19 @@ import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.program.instruction.InstructionType; import io.github.skippyall.minions.registration.MinionComponentTypes; -import net.minecraft.inventory.Inventories; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.SimpleNamedScreenHandlerFactory; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; -import net.minecraft.text.Text; - import java.util.Collection; import java.util.HashSet; import java.util.Set; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.ContainerHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; -public class ModuleInventory extends SimpleInventory { +public class ModuleInventory extends SimpleContainer { private final Set modules = new HashSet<>(); private final Set> instructions = new HashSet<>(); private final Set specialAbilities = new HashSet<>(); @@ -29,23 +28,23 @@ public class ModuleInventory extends SimpleInventory { this.minion = minion; } - public static void openModuleInventory(ServerPlayerEntity player, MinionFakePlayer minion) { - player.openHandledScreen(new SimpleNamedScreenHandlerFactory((syncId, playerInventory, player2) -> new ModuleInventoryScreenHandler(syncId, playerInventory, minion.getModuleInventory()), Text.translatable("minions.gui.modules.title", minion.getName()))); + public static void openModuleInventory(ServerPlayer player, MinionFakePlayer minion) { + player.openMenu(new SimpleMenuProvider((syncId, playerInventory, player2) -> new ModuleInventoryScreenHandler(syncId, playerInventory, minion.getModuleInventory()), Component.translatable("minions.gui.modules.title", minion.getName()))); } @Override - public int getMaxCountPerStack() { + public int getMaxStackSize() { return 1; } @Override - public boolean isValid(int slot, ItemStack stack) { - return (stack.getCount() <= getMaxCountPerStack()) && stack.contains(MinionComponentTypes.MODULE); + public boolean canPlaceItem(int slot, ItemStack stack) { + return (stack.getCount() <= getMaxStackSize()) && stack.has(MinionComponentTypes.MODULE); } @Override - public void markDirty() { - super.markDirty(); + public void setChanged() { + super.setChanged(); updateModules(); } @@ -57,7 +56,7 @@ public class ModuleInventory extends SimpleInventory { modules.clear(); instructions.clear(); specialAbilities.clear(); - for (ItemStack heldStack : heldStacks) { + for (ItemStack heldStack : items) { MinionModule module = heldStack.get(MinionComponentTypes.MODULE); if(module != null) { modules.add(module); @@ -91,13 +90,13 @@ public class ModuleInventory extends SimpleInventory { } } - public void readData(ReadView view) { - Inventories.readData(view, heldStacks); + public void readData(ValueInput view) { + ContainerHelper.loadAllItems(view, items); updateModules(); } - public void writeData(WriteView view) { - Inventories.writeData(view, heldStacks); + public void writeData(ValueOutput view) { + ContainerHelper.saveAllItems(view, items); } public Collection getModules() { diff --git a/src/main/java/io/github/skippyall/minions/module/ModuleInventoryScreenHandler.java b/src/main/java/io/github/skippyall/minions/module/ModuleInventoryScreenHandler.java index d9394c0..c0dbec8 100644 --- a/src/main/java/io/github/skippyall/minions/module/ModuleInventoryScreenHandler.java +++ b/src/main/java/io/github/skippyall/minions/module/ModuleInventoryScreenHandler.java @@ -1,66 +1,66 @@ package io.github.skippyall.minions.module; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.screen.slot.Slot; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ChestMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; -public class ModuleInventoryScreenHandler extends ScreenHandler { +public class ModuleInventoryScreenHandler extends AbstractContainerMenu { private final int rows = 3; private final ModuleInventory inventory; - public ModuleInventoryScreenHandler(int syncId, PlayerInventory playerInventory, ModuleInventory inventory) { - super(ScreenHandlerType.GENERIC_9X3, syncId); + public ModuleInventoryScreenHandler(int syncId, Inventory playerInventory, ModuleInventory inventory) { + super(MenuType.GENERIC_9x3, syncId); - GenericContainerScreenHandler.checkSize(inventory, 3 * 9); + ChestMenu.checkContainerSize(inventory, 3 * 9); this.inventory = inventory; - inventory.onOpen(playerInventory.player); + inventory.startOpen(playerInventory.player); for (int j = 0; j < rows; ++j) { for (int k = 0; k < 9; ++k) { this.addSlot(new Slot(inventory, k + j * 9, 8 + k * 18, 18 + j * 18) { @Override - public boolean canInsert(ItemStack stack) { - return super.canInsert(stack) && inventory.isValid(getIndex(), stack); + public boolean mayPlace(ItemStack stack) { + return super.mayPlace(stack) && container.canPlaceItem(getContainerSlot(), stack); } }); } } - addPlayerSlots(playerInventory, 8, 85); + addStandardInventorySlots(playerInventory, 8, 85); } @Override - public boolean canUse(PlayerEntity player) { - return this.inventory.canPlayerUse(player); + public boolean stillValid(Player player) { + return this.inventory.stillValid(player); } @Override - public ItemStack quickMove(PlayerEntity player, int slot) { + public ItemStack quickMoveStack(Player player, int slot) { ItemStack itemStack = ItemStack.EMPTY; Slot slot2 = this.slots.get(slot); - if (slot2 != null && slot2.hasStack()) { - ItemStack itemStack2 = slot2.getStack(); + if (slot2 != null && slot2.hasItem()) { + ItemStack itemStack2 = slot2.getItem(); itemStack = itemStack2.copy(); - if (slot < this.rows * 9 ? !this.insertItem(itemStack2, this.rows * 9, this.slots.size(), true) : !this.insertItem(itemStack2, 0, this.rows * 9, false)) { + if (slot < this.rows * 9 ? !this.moveItemStackTo(itemStack2, this.rows * 9, this.slots.size(), true) : !this.moveItemStackTo(itemStack2, 0, this.rows * 9, false)) { return ItemStack.EMPTY; } if (itemStack2.isEmpty()) { - slot2.setStack(ItemStack.EMPTY); + slot2.setByPlayer(ItemStack.EMPTY); } else { - slot2.markDirty(); + slot2.setChanged(); } } return itemStack; } @Override - public void onClosed(PlayerEntity player) { - super.onClosed(player); - this.inventory.onClose(player); + public void removed(Player player) { + super.removed(player); + this.inventory.stopOpen(player); } public ModuleInventory getInventory() { diff --git a/src/main/java/io/github/skippyall/minions/polymer/VersionSync.java b/src/main/java/io/github/skippyall/minions/polymer/VersionSync.java index 0d54323..829bde2 100644 --- a/src/main/java/io/github/skippyall/minions/polymer/VersionSync.java +++ b/src/main/java/io/github/skippyall/minions/polymer/VersionSync.java @@ -3,10 +3,10 @@ package io.github.skippyall.minions.polymer; import eu.pb4.polymer.networking.api.PolymerNetworking; import eu.pb4.polymer.networking.api.server.PolymerServerNetworking; import io.github.skippyall.minions.Minions; -import net.minecraft.network.codec.PacketCodec; -import net.minecraft.network.packet.CustomPayload; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.util.Identifier; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.network.ServerGamePacketListenerImpl; import xyz.nucleoid.packettweaker.PacketContext; public class VersionSync { @@ -14,26 +14,26 @@ public class VersionSync { public static boolean isOnClient(PacketContext context) { if(context.getPlayer() != null) { - return isOnClient(context.getPlayer().networkHandler); + return isOnClient(context.getPlayer().connection); } return false; } - public static boolean isOnClient(ServerPlayNetworkHandler player) { + public static boolean isOnClient(ServerGamePacketListenerImpl player) { return PolymerServerNetworking.getSupportedVersion(player, VersionSyncPayload.PACKET_ID.id()) == NETWORK_VERSION; } - public static class VersionSyncPayload implements CustomPayload { + public static class VersionSyncPayload implements CustomPacketPayload { - public static final CustomPayload.Id PACKET_ID = new CustomPayload.Id<>(Identifier.of(Minions.MOD_ID, "version_sync")); + public static final CustomPacketPayload.Type PACKET_ID = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "version_sync")); @Override - public Id getId() { + public Type type() { return PACKET_ID; } } public static void register() { - PolymerNetworking.registerS2CVersioned(VersionSyncPayload.PACKET_ID, NETWORK_VERSION, PacketCodec.unit(null)); + PolymerNetworking.registerS2CVersioned(VersionSyncPayload.PACKET_ID, NETWORK_VERSION, StreamCodec.unit(null)); } } diff --git a/src/main/java/io/github/skippyall/minions/program/InstructionRuntime.java b/src/main/java/io/github/skippyall/minions/program/InstructionRuntime.java index f1667de..4c20256 100644 --- a/src/main/java/io/github/skippyall/minions/program/InstructionRuntime.java +++ b/src/main/java/io/github/skippyall/minions/program/InstructionRuntime.java @@ -8,7 +8,7 @@ import io.github.skippyall.minions.program.instruction.InstructionType; import io.github.skippyall.minions.program.supplier.ValueSupplier; import io.github.skippyall.minions.program.supplier.ValueSupplierList; import io.github.skippyall.minions.program.supplier.ValueSupplierType; -import net.minecraft.registry.Registry; +import net.minecraft.core.Registry; public interface InstructionRuntime> { Registry> getArgumentTypeRegistry(); @@ -20,7 +20,7 @@ public interface InstructionRuntime> { boolean isInstructionEnabled(InstructionType type); default Codec> getArgumentTypeCodec() { - return getArgumentTypeRegistry().getCodec(); + return getArgumentTypeRegistry().byNameCodec(); } default Codec> getArgumentCodec() { @@ -32,7 +32,7 @@ public interface InstructionRuntime> { } default Codec> getValueConsumerTypeCodec() { - return getValueConsumerTypeRegistry().getCodec(); + return getValueConsumerTypeRegistry().byNameCodec(); } default Codec> getValueConsumerCodec() { diff --git a/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumer.java b/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumer.java index 8723e32..78228b0 100644 --- a/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumer.java +++ b/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumer.java @@ -33,7 +33,7 @@ public interface ValueConsumer> { "type", ValueConsumer::getType, type -> - MinionRegistries.VALUE_TYPES.getCodec().>dispatch( + MinionRegistries.VALUE_TYPES.byNameCodec().>dispatch( ValueConsumer::getValueType, valueType -> type.getCodec(valueType).fieldOf("valueType") ).fieldOf("valueType") diff --git a/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumerType.java b/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumerType.java index ca470b7..2c47d19 100644 --- a/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumerType.java +++ b/src/main/java/io/github/skippyall/minions/program/consumer/ValueConsumerType.java @@ -3,13 +3,13 @@ package io.github.skippyall.minions.program.consumer; import com.mojang.serialization.Codec; import io.github.skippyall.minions.program.InstructionRuntime; import io.github.skippyall.minions.program.value.ValueType; -import net.minecraft.server.network.ServerPlayerEntity; import org.jetbrains.annotations.Nullable; import java.util.concurrent.CompletableFuture; +import net.minecraft.server.level.ServerPlayer; public abstract class ValueConsumerType> { public abstract Codec> getCodec(ValueType type); - public abstract CompletableFuture> openConfiguration(ServerPlayerEntity player, ValueType valueType, @Nullable ValueConsumer previous); + public abstract CompletableFuture> openConfiguration(ServerPlayer player, ValueType valueType, @Nullable ValueConsumer previous); } diff --git a/src/main/java/io/github/skippyall/minions/program/conversion/CastConverter.java b/src/main/java/io/github/skippyall/minions/program/conversion/CastConverter.java index 9238fa7..1100ed5 100644 --- a/src/main/java/io/github/skippyall/minions/program/conversion/CastConverter.java +++ b/src/main/java/io/github/skippyall/minions/program/conversion/CastConverter.java @@ -9,15 +9,15 @@ import io.github.skippyall.minions.program.value.ValueType; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.registration.ValueConverters; import io.github.skippyall.minions.util.TranslationUtil; -import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.util.concurrent.CompletableFuture; +import net.minecraft.network.chat.Component; public class CastConverter implements ValueConverter { private static final MapCodec> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( - MinionRegistries.VALUE_TYPES.getCodec().fieldOf("from").forGetter(CastConverter::getFrom), - MinionRegistries.VALUE_TYPES.getCodec().fieldOf("to").forGetter(CastConverter::getTo) + MinionRegistries.VALUE_TYPES.byNameCodec().fieldOf("from").forGetter(CastConverter::getFrom), + MinionRegistries.VALUE_TYPES.byNameCodec().fieldOf("to").forGetter(CastConverter::getTo) ).apply(instance, CastConverter::new) ); @@ -30,7 +30,7 @@ public class CastConverter implements ValueConverter { } @Override - public Result convert(F fromValue) { + public Result convert(F fromValue) { return Casts.castOrError(new TypedValue<>(fromValue, from), to); } @@ -50,8 +50,8 @@ public class CastConverter implements ValueConverter { } @Override - public Text getDisplayText() { - return Text.translatable("value_converter.minions.cast.display", Text.translatable(TranslationUtil.getTranslationKey(from, MinionRegistries.VALUE_TYPES)), Text.translatable(TranslationUtil.getTranslationKey(to, MinionRegistries.VALUE_TYPES))); + public Component getDisplayText() { + return Component.translatable("value_converter.minions.cast.display", Component.translatable(TranslationUtil.getTranslationKey(from, MinionRegistries.VALUE_TYPES)), Component.translatable(TranslationUtil.getTranslationKey(to, MinionRegistries.VALUE_TYPES))); } public static class Type implements ValueConverterType> { diff --git a/src/main/java/io/github/skippyall/minions/program/conversion/Casts.java b/src/main/java/io/github/skippyall/minions/program/conversion/Casts.java index 61c9601..9ecb9df 100644 --- a/src/main/java/io/github/skippyall/minions/program/conversion/Casts.java +++ b/src/main/java/io/github/skippyall/minions/program/conversion/Casts.java @@ -6,7 +6,7 @@ import io.github.skippyall.minions.program.value.ValueType; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.registration.ValueTypes; import io.github.skippyall.minions.util.TranslationUtil; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; public class Casts { @@ -40,11 +40,11 @@ public class Casts { } } - public static Result castOrError(TypedValue from, ValueType to) { - return Result.ofNullable(Casts.cast(from, to), () -> Text.translatable( + public static Result castOrError(TypedValue from, ValueType to) { + return Result.ofNullable(Casts.cast(from, to), () -> Component.translatable( "value_converter.minions.cast.cast_failed", from.type().getDisplayText(from.value()), - Text.translatable(TranslationUtil.getTranslationKey(to, MinionRegistries.VALUE_TYPES)) + Component.translatable(TranslationUtil.getTranslationKey(to, MinionRegistries.VALUE_TYPES)) )); } diff --git a/src/main/java/io/github/skippyall/minions/program/conversion/ConverterList.java b/src/main/java/io/github/skippyall/minions/program/conversion/ConverterList.java index 79e0872..02592c1 100644 --- a/src/main/java/io/github/skippyall/minions/program/conversion/ConverterList.java +++ b/src/main/java/io/github/skippyall/minions/program/conversion/ConverterList.java @@ -4,13 +4,13 @@ import com.mojang.serialization.Codec; import io.github.skippyall.minions.gui.input.Result; import io.github.skippyall.minions.program.value.TypedValue; import io.github.skippyall.minions.program.value.ValueType; -import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import java.util.Objects; +import net.minecraft.network.chat.Component; public class ConverterList { public static final Codec CODEC = ValueConverter.CODEC.listOf().xmap(ConverterList::new, l -> l.converters); @@ -41,7 +41,7 @@ public class ConverterList { return converters.getLast().getTo(); } - public Result, Text> convert(TypedValue input) { + public Result, Component> convert(TypedValue input) { if(converters.isEmpty()) { return new Result.Success<>(input); } else { @@ -50,21 +50,21 @@ public class ConverterList { } } - private Result, Text> convert(TypedValue from, ValueConverter converter, ListIterator> iterator) { - Result inter = Casts.castOrError(from, converter.getFrom()); - if(inter instanceof Result.Error error) { - return new Result.Error<>(Text.translatable("minions.converter.list.passing_error", iterator.previousIndex(), error.message())); + private Result, Component> convert(TypedValue from, ValueConverter converter, ListIterator> iterator) { + Result inter = Casts.castOrError(from, converter.getFrom()); + if(inter instanceof Result.Error error) { + return new Result.Error<>(Component.translatable("minions.converter.list.passing_error", iterator.previousIndex(), error.message())); } - Result to = converter.convert(inter.getOrThrow()); + Result to = converter.convert(inter.getOrThrow()); - if(iterator.hasNext() && to instanceof Result.Success success) { + if(iterator.hasNext() && to instanceof Result.Success success) { return convert(new TypedValue<>(success.result(), converter.getTo()), iterator.next(), iterator); } else { return to.map(v -> new TypedValue<>(v, converter.getTo())); } } - public Result<@Nullable Void, Text> check() { + public Result<@Nullable Void, Component> check() { return new Result.Success<>(null); } diff --git a/src/main/java/io/github/skippyall/minions/program/conversion/EqualityConverter.java b/src/main/java/io/github/skippyall/minions/program/conversion/EqualityConverter.java index 7404583..374522a 100644 --- a/src/main/java/io/github/skippyall/minions/program/conversion/EqualityConverter.java +++ b/src/main/java/io/github/skippyall/minions/program/conversion/EqualityConverter.java @@ -7,13 +7,13 @@ import io.github.skippyall.minions.program.value.ValueType; import io.github.skippyall.minions.registration.MinionRegistries; import io.github.skippyall.minions.registration.ValueConverters; import io.github.skippyall.minions.registration.ValueTypes; -import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.util.concurrent.CompletableFuture; +import net.minecraft.network.chat.Component; public class EqualityConverter implements ValueConverter { - public static final MapCodec> CODEC = MinionRegistries.VALUE_TYPES.getCodec().dispatchMap( + public static final MapCodec> CODEC = MinionRegistries.VALUE_TYPES.byNameCodec().dispatchMap( "value_type", EqualityConverter::getFrom, EqualityConverter::getCodec @@ -28,7 +28,7 @@ public class EqualityConverter implements ValueConverter { } @Override - public Result convert(F from) { + public Result convert(F from) { return new Result.Success<>(compareValue.equals(from)); } @@ -48,8 +48,8 @@ public class EqualityConverter implements ValueConverter { } @Override - public Text getDisplayText() { - return Text.translatable("value_converter.minions.equality.display", fromType.getDisplayText(compareValue)); + public Component getDisplayText() { + return Component.translatable("value_converter.minions.equality.display", fromType.getDisplayText(compareValue)); } private static MapCodec> getCodec(ValueType fromType) { diff --git a/src/main/java/io/github/skippyall/minions/program/conversion/ValueConverter.java b/src/main/java/io/github/skippyall/minions/program/conversion/ValueConverter.java index a83f12b..0f78511 100644 --- a/src/main/java/io/github/skippyall/minions/program/conversion/ValueConverter.java +++ b/src/main/java/io/github/skippyall/minions/program/conversion/ValueConverter.java @@ -4,12 +4,12 @@ import com.mojang.serialization.Codec; import io.github.skippyall.minions.gui.input.Result; import io.github.skippyall.minions.program.value.ValueType; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; public interface ValueConverter { - Codec> CODEC = MinionRegistries.VALUE_CONVERTER_TYPES.getCodec().dispatch(ValueConverter::getType, ValueConverterType::getCodec); + Codec> CODEC = MinionRegistries.VALUE_CONVERTER_TYPES.byNameCodec().dispatch(ValueConverter::getType, ValueConverterType::getCodec); - Result convert(F from); + Result convert(F from); ValueType getFrom(); @@ -17,7 +17,7 @@ public interface ValueConverter { ValueConverterType getType(); - Text getDisplayText(); + Component getDisplayText(); default ValueConverter cast(ValueType from, ValueType to) { if(from == getFrom() && to == getTo()) { diff --git a/src/main/java/io/github/skippyall/minions/program/instruction/ConfiguredInstruction.java b/src/main/java/io/github/skippyall/minions/program/instruction/ConfiguredInstruction.java index 0304894..2e181c7 100644 --- a/src/main/java/io/github/skippyall/minions/program/instruction/ConfiguredInstruction.java +++ b/src/main/java/io/github/skippyall/minions/program/instruction/ConfiguredInstruction.java @@ -8,8 +8,8 @@ import io.github.skippyall.minions.program.supplier.Parameter; import io.github.skippyall.minions.program.supplier.ParameterValueList; import io.github.skippyall.minions.program.supplier.ValueSupplierList; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import org.jetbrains.annotations.Nullable; /** @@ -146,27 +146,27 @@ public class ConfiguredInstruction> { listeners.removeListener(listener); } - public void save(WriteView view, R runtime) { - view.put("instruction", runtime.getInstructionTypeRegistry().getCodec(), instruction); - view.put("arguments", runtime.getArgumentListCodec(), arguments); - view.put("valueConsumers", runtime.getValueConsumerListCodec(), valueConsumers); + public void save(ValueOutput view, R runtime) { + view.store("instruction", runtime.getInstructionTypeRegistry().byNameCodec(), instruction); + view.store("arguments", runtime.getArgumentListCodec(), arguments); + view.store("valueConsumers", runtime.getValueConsumerListCodec(), valueConsumers); view.putBoolean("running", isRunning()); view.putBoolean("paused", paused); - view.put("listeners", SerializableListenerManager.getCodec(MinionRegistries.INSTRUCTION_LISTENER_CODECS), listeners); + view.store("listeners", SerializableListenerManager.getCodec(MinionRegistries.INSTRUCTION_LISTENER_CODECS), listeners); if(execution != null) { - execution.save(view.get("execution"), runtime); + execution.save(view.child("execution"), runtime); } } - public static > ConfiguredInstruction load(ReadView view, R minion) { - InstructionType instructionType = view.read("instruction", minion.getInstructionTypeRegistry().getCodec()).orElseThrow(); + public static > ConfiguredInstruction load(ValueInput view, R minion) { + InstructionType instructionType = view.read("instruction", minion.getInstructionTypeRegistry().byNameCodec()).orElseThrow(); ValueSupplierList arguments = view.read("arguments", minion.getArgumentListCodec()).orElseGet(ValueSupplierList::new); ValueConsumerList valueConsumers = view.read("valueConsumers", minion.getValueConsumerListCodec()).orElseGet(ValueConsumerList::new); - boolean running = view.getBoolean("running", false); - boolean paused = view.getBoolean("paused", false); + boolean running = view.getBooleanOr("running", false); + boolean paused = view.getBooleanOr("paused", false); SerializableListenerManager listeners = view.read( "listeners", @@ -174,7 +174,7 @@ public class ConfiguredInstruction> { ).orElseGet(SerializableListenerManager::new); if(running) { - ReadView executionView = view.getReadView("execution"); + ValueInput executionView = view.childOrEmpty("execution"); try { InstructionExecution execution = instructionType.loadExecution(executionView, minion); return new ConfiguredInstruction<>(instructionType, arguments, valueConsumers, execution, listeners, paused); diff --git a/src/main/java/io/github/skippyall/minions/program/instruction/InstructionExecution.java b/src/main/java/io/github/skippyall/minions/program/instruction/InstructionExecution.java index 76e0487..7e6719a 100644 --- a/src/main/java/io/github/skippyall/minions/program/instruction/InstructionExecution.java +++ b/src/main/java/io/github/skippyall/minions/program/instruction/InstructionExecution.java @@ -4,14 +4,14 @@ import io.github.skippyall.minions.program.InstructionRuntime; import io.github.skippyall.minions.program.consumer.ValueConsumerList; import io.github.skippyall.minions.program.supplier.ParameterValueList; import io.github.skippyall.minions.program.supplier.ValueSupplierList; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; /** * Responsible for executing instructions. * When an instruction is executed: *
  • A new instance is created using the factory
  • - *
  • {@link InstructionExecution#readArguments(ValueSupplierList, R) readFromParameters} is called
  • + *
  • {@link InstructionExecution#readArguments(ParameterValueList, R) readFromParameters} is called
  • *
  • {@link InstructionExecution#start(R) start} is called
  • */ public interface InstructionExecution> { @@ -54,21 +54,21 @@ public interface InstructionExecution> { /** * Saves the execution, e.g. when the server is closed. */ - void save(WriteView view, R runtime); + void save(ValueOutput view, R runtime); /** * Loads the execution, e.g. when the server is started. */ - void load(ReadView view, R runtime); + void load(ValueInput view, R runtime); interface Stateless> extends InstructionExecution { @Override default void readArguments(ParameterValueList arguments, R runtime) {} @Override - default void save(WriteView view, R runtime) {} + default void save(ValueOutput view, R runtime) {} @Override - default void load(ReadView view, R runtime) {} + default void load(ValueInput view, R runtime) {} } } diff --git a/src/main/java/io/github/skippyall/minions/program/instruction/InstructionType.java b/src/main/java/io/github/skippyall/minions/program/instruction/InstructionType.java index 2053608..3cc4593 100644 --- a/src/main/java/io/github/skippyall/minions/program/instruction/InstructionType.java +++ b/src/main/java/io/github/skippyall/minions/program/instruction/InstructionType.java @@ -3,11 +3,10 @@ package io.github.skippyall.minions.program.instruction; import io.github.skippyall.minions.program.InstructionRuntime; import io.github.skippyall.minions.program.supplier.Parameter; import io.github.skippyall.minions.program.supplier.ParameterValueList; -import net.minecraft.storage.ReadView; - import java.util.Collection; import java.util.List; import java.util.function.Supplier; +import net.minecraft.world.level.storage.ValueInput; /** * Defines the semantics of an instruction and creates {@link InstructionExecution} @@ -39,7 +38,7 @@ public class InstructionType> { return execution; } - public InstructionExecution loadExecution(ReadView view, R minion) { + public InstructionExecution loadExecution(ValueInput view, R minion) { InstructionExecution execution = executionFactory.get(); execution.load(view, minion); return execution; diff --git a/src/main/java/io/github/skippyall/minions/program/instruction/execution/TimedInstructionExecution.java b/src/main/java/io/github/skippyall/minions/program/instruction/execution/TimedInstructionExecution.java index 47ec80a..d43f4b1 100644 --- a/src/main/java/io/github/skippyall/minions/program/instruction/execution/TimedInstructionExecution.java +++ b/src/main/java/io/github/skippyall/minions/program/instruction/execution/TimedInstructionExecution.java @@ -2,8 +2,8 @@ package io.github.skippyall.minions.program.instruction.execution; import io.github.skippyall.minions.program.InstructionRuntime; import io.github.skippyall.minions.program.instruction.InstructionExecution; -import net.minecraft.storage.ReadView; -import net.minecraft.storage.WriteView; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; /** * An InstructionExecution that takes a predefined time to execute. @@ -32,12 +32,12 @@ public abstract class TimedInstructionExecution> } @Override - public void save(WriteView view, R minion) { + public void save(ValueOutput view, R minion) { view.putInt("timer", timer); } @Override - public void load(ReadView view, R minion) { - timer = view.getInt("timer", 0); + public void load(ValueInput view, R minion) { + timer = view.getIntOr("timer", 0); } } diff --git a/src/main/java/io/github/skippyall/minions/program/supplier/FixedValueSupplier.java b/src/main/java/io/github/skippyall/minions/program/supplier/FixedValueSupplier.java index d8a534a..614fe2d 100644 --- a/src/main/java/io/github/skippyall/minions/program/supplier/FixedValueSupplier.java +++ b/src/main/java/io/github/skippyall/minions/program/supplier/FixedValueSupplier.java @@ -2,7 +2,7 @@ package io.github.skippyall.minions.program.supplier; import io.github.skippyall.minions.program.InstructionRuntime; import io.github.skippyall.minions.program.value.ValueType; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; /** * A supplier that always resolves to a fixed value @@ -38,7 +38,7 @@ public class FixedValueSupplier> implements V } @Override - public Text getDisplayText() { + public Component getDisplayText() { return valueType.getDisplayText(value); } } diff --git a/src/main/java/io/github/skippyall/minions/program/supplier/Parameter.java b/src/main/java/io/github/skippyall/minions/program/supplier/Parameter.java index db42204..5ad7c64 100644 --- a/src/main/java/io/github/skippyall/minions/program/supplier/Parameter.java +++ b/src/main/java/io/github/skippyall/minions/program/supplier/Parameter.java @@ -11,7 +11,7 @@ public record Parameter(String name, ValueType type) { public static final MapCodec> MAP_CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( Codec.STRING.fieldOf("name").forGetter(Parameter::name), - MinionRegistries.VALUE_TYPES.getCodec().fieldOf("type").forGetter(Parameter::type) + MinionRegistries.VALUE_TYPES.byNameCodec().fieldOf("type").forGetter(Parameter::type) ).apply(instance, Parameter::new)); public static final Codec> CODEC = MAP_CODEC.codec(); diff --git a/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplier.java b/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplier.java index e62d4bd..12af1e8 100644 --- a/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplier.java +++ b/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplier.java @@ -5,7 +5,7 @@ import com.mojang.serialization.DataResult; import io.github.skippyall.minions.program.InstructionRuntime; import io.github.skippyall.minions.program.value.ValueType; import io.github.skippyall.minions.registration.MinionRegistries; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; /** @@ -21,7 +21,7 @@ public interface ValueSupplier> { ValueSupplierType getType(); - Text getDisplayText(); + Component getDisplayText(); default > @Nullable A cast(ValueType type) { if(getValueType() == type) { @@ -49,7 +49,7 @@ public interface ValueSupplier> { "type", ValueSupplier::getType, type -> - MinionRegistries.VALUE_TYPES.getCodec().>partialDispatch( + MinionRegistries.VALUE_TYPES.byNameCodec().>partialDispatch( "type", s -> DataResult.success(s.getValueType()), valueType -> { diff --git a/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplierList.java b/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplierList.java index 4c4a2aa..5571eac 100644 --- a/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplierList.java +++ b/src/main/java/io/github/skippyall/minions/program/supplier/ValueSupplierList.java @@ -9,7 +9,6 @@ import io.github.skippyall.minions.program.conversion.Casts; import io.github.skippyall.minions.program.conversion.ConverterList; import io.github.skippyall.minions.program.instruction.InstructionType; import io.github.skippyall.minions.program.value.TypedValue; -import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -18,6 +17,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; +import net.minecraft.network.chat.Component; public class ValueSupplierList> { private final Map, ValueSupplierEntry> arguments = new HashMap<>(); @@ -77,17 +77,17 @@ public class ValueSupplierList> { return arguments.containsKey(parameter); } - public @Nullable Text checkHasArguments(Collection> checkParameters) { + public @Nullable Component checkHasArguments(Collection> checkParameters) { for(Parameter parameter : checkParameters) { if(!hasArgumentFor(parameter)) { - return Text.translatable("minions.gui.instruction.check.argument_not_set", parameter.name()); + return Component.translatable("minions.gui.instruction.check.argument_not_set", parameter.name()); } } return null; } - public @Nullable Text checkRun(InstructionType instructionType) { - @Nullable Text checkResult = checkHasArguments(instructionType.getParameters()); + public @Nullable Component checkRun(InstructionType instructionType) { + @Nullable Component checkResult = checkHasArguments(instructionType.getParameters()); if(checkResult != null) { return checkResult; } @@ -164,12 +164,12 @@ public class ValueSupplierList> { //Ich liebe generische Typen (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) private @Nullable P getValue(ValueSupplier supplier, R runtime) { S value = supplier.resolve(runtime); - Result, Text> convertedResult = converters.convert(new TypedValue<>(value, supplier.getValueType())); + Result, Component> convertedResult = converters.convert(new TypedValue<>(value, supplier.getValueType())); return convertedResult.flatMap(convertedValue -> Casts.castOrError(convertedValue, parameter.type())).getOrDefault(null); } - public @Nullable Text check() { + public @Nullable Component check() { //TODO check it return null; } diff --git a/src/main/java/io/github/skippyall/minions/program/value/SimpleValueType.java b/src/main/java/io/github/skippyall/minions/program/value/SimpleValueType.java index e9ce4cf..c01116e 100644 --- a/src/main/java/io/github/skippyall/minions/program/value/SimpleValueType.java +++ b/src/main/java/io/github/skippyall/minions/program/value/SimpleValueType.java @@ -2,20 +2,19 @@ package io.github.skippyall.minions.program.value; import com.mojang.serialization.Codec; import io.github.skippyall.minions.gui.MinionsGui; -import net.minecraft.text.Text; - import java.util.concurrent.CompletableFuture; import java.util.function.BiFunction; import java.util.function.Function; +import net.minecraft.network.chat.Component; -public record SimpleValueType(Codec codec, T defaultValue, Function checkedCast, BiFunction> valueDialogOpener, Function textDisplay) implements ValueType { +public record SimpleValueType(Codec codec, T defaultValue, Function checkedCast, BiFunction> valueDialogOpener, Function textDisplay) implements ValueType { @Override public CompletableFuture openValueDialog(MinionsGui parent, T previousValue) { return valueDialogOpener.apply(parent, previousValue); } @Override - public Text getDisplayText(T value) { + public Component getDisplayText(T value) { return textDisplay.apply(value); } diff --git a/src/main/java/io/github/skippyall/minions/program/value/ValueType.java b/src/main/java/io/github/skippyall/minions/program/value/ValueType.java index 091620c..aff5187 100644 --- a/src/main/java/io/github/skippyall/minions/program/value/ValueType.java +++ b/src/main/java/io/github/skippyall/minions/program/value/ValueType.java @@ -2,15 +2,15 @@ package io.github.skippyall.minions.program.value; import com.mojang.serialization.Codec; import io.github.skippyall.minions.gui.MinionsGui; -import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.util.concurrent.CompletableFuture; +import net.minecraft.network.chat.Component; public interface ValueType { CompletableFuture openValueDialog(MinionsGui gui, T previousValue); - Text getDisplayText(T value); + Component getDisplayText(T value); Codec codec(); diff --git a/src/main/java/io/github/skippyall/minions/registration/ClipboardTypes.java b/src/main/java/io/github/skippyall/minions/registration/ClipboardTypes.java index a66cecf..851f5ab 100644 --- a/src/main/java/io/github/skippyall/minions/registration/ClipboardTypes.java +++ b/src/main/java/io/github/skippyall/minions/registration/ClipboardTypes.java @@ -5,12 +5,12 @@ import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.clipboard.BlockPosClipboard; import io.github.skippyall.minions.clipboard.Clipboard; import io.github.skippyall.minions.clipboard.InstructionClipboard; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class ClipboardTypes { private static void register(String id, MapCodec codec) { - Registry.register(MinionRegistries.CLIPBOARD_TYPES, Identifier.of(Minions.MOD_ID, id), codec); + Registry.register(MinionRegistries.CLIPBOARD_TYPES, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, id), codec); } static void register() { diff --git a/src/main/java/io/github/skippyall/minions/registration/DocsEntryTypes.java b/src/main/java/io/github/skippyall/minions/registration/DocsEntryTypes.java index ee084a4..555b891 100644 --- a/src/main/java/io/github/skippyall/minions/registration/DocsEntryTypes.java +++ b/src/main/java/io/github/skippyall/minions/registration/DocsEntryTypes.java @@ -2,11 +2,11 @@ package io.github.skippyall.minions.registration; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.docs.ReferenceEntry; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class DocsEntryTypes { public static void register() { - Registry.register(MinionRegistries.DOCS_ENTRY_TYPES, Identifier.of(Minions.MOD_ID, "reference_entry"), ReferenceEntry.CODEC); + Registry.register(MinionRegistries.DOCS_ENTRY_TYPES, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "reference_entry"), ReferenceEntry.CODEC); } } diff --git a/src/main/java/io/github/skippyall/minions/registration/GuiDisplayTypes.java b/src/main/java/io/github/skippyall/minions/registration/GuiDisplayTypes.java index 2bff144..6612853 100644 --- a/src/main/java/io/github/skippyall/minions/registration/GuiDisplayTypes.java +++ b/src/main/java/io/github/skippyall/minions/registration/GuiDisplayTypes.java @@ -2,14 +2,14 @@ package io.github.skippyall.minions.registration; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.gui.GuiDisplay; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class GuiDisplayTypes { static void register() { - Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, Identifier.of(Minions.MOD_ID, "item"), GuiDisplay.ItemBased.CODEC); - Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, Identifier.of(Minions.MOD_ID, "model"), GuiDisplay.ModelBased.CODEC); - Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, Identifier.of(Minions.MOD_ID, "head"), GuiDisplay.HeadBased.CODEC); - Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, Identifier.of(Minions.MOD_ID, "stack"), GuiDisplay.StackBased.CODEC); + Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "item"), GuiDisplay.ItemBased.CODEC); + Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "model"), GuiDisplay.ModelBased.CODEC); + Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "head"), GuiDisplay.HeadBased.CODEC); + Registry.register(MinionRegistries.GUI_DISPLAY_TYPE, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "stack"), GuiDisplay.StackBased.CODEC); } } diff --git a/src/main/java/io/github/skippyall/minions/registration/Instructions.java b/src/main/java/io/github/skippyall/minions/registration/Instructions.java index e78faf6..790677a 100644 --- a/src/main/java/io/github/skippyall/minions/registration/Instructions.java +++ b/src/main/java/io/github/skippyall/minions/registration/Instructions.java @@ -13,12 +13,11 @@ import io.github.skippyall.minions.minion.program.instruction.move.WalkExecution import io.github.skippyall.minions.program.instruction.InstructionExecution; import io.github.skippyall.minions.program.instruction.InstructionType; import io.github.skippyall.minions.program.supplier.Parameter; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; - import java.util.Collection; import java.util.List; import java.util.function.Supplier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class Instructions { public static final InstructionType WALK = register( @@ -65,7 +64,7 @@ public class Instructions { ); private static InstructionType register(String id, Supplier> factory, Collection> parameters, Collection> returnParameters) { - Identifier identifier = Identifier.of(Minions.MOD_ID, id); + ResourceLocation identifier = ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, id); return Registry.register(MinionRegistries.INSTRUCTION_TYPES, identifier, new InstructionType<>(factory, parameters, returnParameters)); } 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 29cf009..f69a543 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionBlocks.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionBlocks.java @@ -6,42 +6,42 @@ import io.github.skippyall.minions.block.input.AnalogInputBlock; import io.github.skippyall.minions.block.miniontrigger.MinionTriggerBlock; import io.github.skippyall.minions.block.miniontrigger.MinionTriggerBlockEntity; import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; -import net.minecraft.block.AbstractBlock; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.PushReaction; public class MinionBlocks { - public static final Identifier MINION_TRIGGER_ID = Identifier.of(Minions.MOD_ID, "minion_trigger"); + public static final ResourceLocation MINION_TRIGGER_ID = ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "minion_trigger"); public static final MinionTriggerBlock MINION_TRIGGER_BLOCK = Registry.register( - Registries.BLOCK, + BuiltInRegistries.BLOCK, MINION_TRIGGER_ID, - new MinionTriggerBlock(AbstractBlock.Settings.create() - .registryKey(RegistryKey.of(RegistryKeys.BLOCK, MINION_TRIGGER_ID)) - .nonOpaque() - .breakInstantly() - .sounds(BlockSoundGroup.STONE) - .pistonBehavior(PistonBehavior.DESTROY) + new MinionTriggerBlock(BlockBehaviour.Properties.of() + .setId(ResourceKey.create(Registries.BLOCK, MINION_TRIGGER_ID)) + .noOcclusion() + .instabreak() + .sound(SoundType.STONE) + .pushReaction(PushReaction.DESTROY) ) ); public static final BlockEntityType MINION_TRIGGER_BE_TYPE = Registry.register( - Registries.BLOCK_ENTITY_TYPE, + BuiltInRegistries.BLOCK_ENTITY_TYPE, MINION_TRIGGER_ID, FabricBlockEntityTypeBuilder.create(MinionTriggerBlockEntity::new, MINION_TRIGGER_BLOCK).build() ); - public static final Identifier ANALOG_INPUT_BLOCK_ID = Identifier.of(Minions.MOD_ID, "analog_input"); + public static final ResourceLocation ANALOG_INPUT_BLOCK_ID = ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "analog_input"); public static final AnalogInputBlock ANALOG_INPUT_BLOCK = Registry.register( - Registries.BLOCK, + BuiltInRegistries.BLOCK, ANALOG_INPUT_BLOCK_ID, - new AnalogInputBlock(AbstractBlock.Settings.create() - .registryKey(RegistryKey.of(RegistryKeys.BLOCK, ANALOG_INPUT_BLOCK_ID)) + new AnalogInputBlock(BlockBehaviour.Properties.of() + .setId(ResourceKey.create(Registries.BLOCK, ANALOG_INPUT_BLOCK_ID)) ) ); 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 b952fbf..6195503 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionComponentTypes.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionComponentTypes.java @@ -5,21 +5,20 @@ import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.clipboard.Clipboard; import io.github.skippyall.minions.module.MinionModule; import net.fabricmc.fabric.api.item.v1.ComponentTooltipAppenderRegistry; -import net.minecraft.component.ComponentType; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; -import net.minecraft.util.Uuids; - +import net.minecraft.core.Registry; +import net.minecraft.core.UUIDUtil; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; import java.util.UUID; public class MinionComponentTypes { - public static final ComponentType MINION_DATA = register("minion_data", ComponentType.builder().codec(Uuids.CODEC).build()); - public static final ComponentType MODULE = register("minion_module", ComponentType.builder().codec(MinionModule.CODEC).build()); - public static final ComponentType REFERENCE = register("reference", ComponentType.builder().codec(Clipboard.CODEC).build()); + public static final DataComponentType MINION_DATA = register("minion_data", DataComponentType.builder().persistent(UUIDUtil.AUTHLIB_CODEC).build()); + public static final DataComponentType MODULE = register("minion_module", DataComponentType.builder().persistent(MinionModule.CODEC).build()); + public static final DataComponentType REFERENCE = register("reference", DataComponentType.builder().persistent(Clipboard.CODEC).build()); - private static > T register(String name, T type) { - Registry.register(Registries.DATA_COMPONENT_TYPE, Identifier.of(Minions.MOD_ID, name), type); + private static > T register(String name, T type) { + Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, name), type); PolymerComponent.registerDataComponent(type); return type; } diff --git a/src/main/java/io/github/skippyall/minions/registration/MinionConfigOptions.java b/src/main/java/io/github/skippyall/minions/registration/MinionConfigOptions.java index 1fc2a4a..35143bc 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionConfigOptions.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionConfigOptions.java @@ -2,8 +2,8 @@ package io.github.skippyall.minions.registration; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.minion.MinionConfig; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import static io.github.skippyall.minions.minion.MinionConfig.booleanOption; @@ -20,8 +20,8 @@ public class MinionConfigOptions { return Registry.register(MinionRegistries.MINION_CONFIG_OPTIONS, option.key(), option); } - private static Identifier id(String name) { - return Identifier.of(Minions.MOD_ID, name); + private static ResourceLocation id(String name) { + return ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, name); } public static void register() {} 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 917160a..a392a5a 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionCreativeTab.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionCreativeTab.java @@ -3,34 +3,33 @@ package io.github.skippyall.minions.registration; import eu.pb4.polymer.core.api.item.PolymerItemGroupUtils; import io.github.skippyall.minions.Minions; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import java.util.ArrayList; import java.util.List; public class MinionCreativeTab { - public static ItemGroup group; + public static CreativeModeTab group; private static final List items = new ArrayList<>(); public static void add(Item entry) { - items.add(entry.getDefaultStack()); + items.add(entry.getDefaultInstance()); } - public static void collectEntries(ItemGroup.DisplayContext displayContext, ItemGroup.Entries entries) { - entries.addAll(items); + public static void collectEntries(CreativeModeTab.ItemDisplayParameters displayContext, CreativeModeTab.Output entries) { + entries.acceptAll(items); } public static void registerGroup() { group = FabricItemGroup.builder() - .displayName(Text.translatable("minions.generic.mod_name")) - .icon(MinionItems.MINION_ITEM::getDefaultStack) - .entries(MinionCreativeTab::collectEntries) + .title(Component.translatable("minions.generic.mod_name")) + .icon(MinionItems.MINION_ITEM::getDefaultInstance) + .displayItems(MinionCreativeTab::collectEntries) .build(); - PolymerItemGroupUtils.registerPolymerItemGroup(Identifier.of(Minions.MOD_ID, "main"), group); + PolymerItemGroupUtils.registerPolymerItemGroup(ResourceLocation.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 cf5916d..b6dd61d 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionItems.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionItems.java @@ -9,61 +9,60 @@ import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.module.MinionModule; import io.github.skippyall.minions.module.SpecialAbility; import io.github.skippyall.minions.program.instruction.InstructionType; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.DamageResistantComponent; -import net.minecraft.entity.damage.DamageType; -import net.minecraft.item.Item; -import net.minecraft.item.Items; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.Identifier; - import java.util.List; import java.util.function.Function; +import net.minecraft.core.Registry; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.component.DamageResistant; import static io.github.skippyall.minions.Minions.MOD_ID; public class MinionItems { - public static final TagKey MINION_ITEM_RESISTS = TagKey.of(RegistryKeys.DAMAGE_TYPE, Identifier.of(MOD_ID, "minion_item_resists")); + public static final TagKey MINION_ITEM_RESISTS = TagKey.create(Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath(MOD_ID, "minion_item_resists")); public static final MinionItem MINION_ITEM = registerItem( - Identifier.of(MOD_ID, "minion"), - settings -> new MinionItem(settings.component(DataComponentTypes.DAMAGE_RESISTANT, new DamageResistantComponent(MINION_ITEM_RESISTS))) + ResourceLocation.fromNamespaceAndPath(MOD_ID, "minion"), + settings -> new MinionItem(settings.component(DataComponents.DAMAGE_RESISTANT, new DamageResistant(MINION_ITEM_RESISTS))) ); public static final SimplePolymerItem BASIC_UPGRADE_BASE = registerItem( - Identifier.of(MOD_ID, "basic_upgrade_base"), + ResourceLocation.fromNamespaceAndPath(MOD_ID, "basic_upgrade_base"), settings -> new SimplePolymerItem(settings, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) ); public static final SimplePolymerItem ADVANCED_UPGRADE_BASE = registerItem( - Identifier.of(MOD_ID, "advanced_upgrade_base"), + ResourceLocation.fromNamespaceAndPath(MOD_ID, "advanced_upgrade_base"), settings -> new SimplePolymerItem(settings, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) ); public static final SimplePolymerItem MOVE_MODULE = registerModule( - Identifier.of(MOD_ID, "move_module"), + ResourceLocation.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( - Identifier.of(MOD_ID, "attack_module"), + ResourceLocation.fromNamespaceAndPath(MOD_ID, "attack_module"), Items.IRON_PICKAXE, List.of(Instructions.ATTACK, Instructions.MINE_BLOCK) ); public static final SimplePolymerItem INTERACT_MODULE = registerModule( - Identifier.of(MOD_ID, "interact_module"), + ResourceLocation.fromNamespaceAndPath(MOD_ID, "interact_module"), Items.LEVER, List.of(Instructions.USE) ); public static final SimplePolymerItem MOB_SPAWNING_MODULE = registerModule( - Identifier.of(MOD_ID, "mob_spawning_module"), + ResourceLocation.fromNamespaceAndPath(MOD_ID, "mob_spawning_module"), Items.SPAWNER, List.of(), List.of(SpecialAbilities.MOB_SPAWNING) @@ -73,32 +72,32 @@ public class MinionItems { registerItem( MinionBlocks.MINION_TRIGGER_ID, settings -> new MinionTriggerBlockItem(MinionBlocks.MINION_TRIGGER_BLOCK, settings, Items.COMPARATOR), - new Item.Settings().useBlockPrefixedTranslationKey() + new Item.Properties().useBlockDescriptionPrefix() ); - public static final ClipboardItem REFERENCE_ITEM = registerItem(Identifier.of(MOD_ID, "clipboard"), ClipboardItem::new); + public static final ClipboardItem REFERENCE_ITEM = registerItem(ResourceLocation.fromNamespaceAndPath(MOD_ID, "clipboard"), ClipboardItem::new); - public static T registerItem(Identifier identifier, Function constructor, Item.Settings settings) { - T item = constructor.apply(settings.registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier))); + public static T registerItem(ResourceLocation identifier, Function constructor, Item.Properties settings) { + T item = constructor.apply(settings.setId(ResourceKey.create(Registries.ITEM, identifier))); MinionCreativeTab.add(item); - return Registry.register(Registries.ITEM, identifier, item); + return Registry.register(BuiltInRegistries.ITEM, identifier, item); } - public static T registerItem(Identifier identifier, Function constructor) { - return registerItem(identifier, constructor, new Item.Settings()); + public static T registerItem(ResourceLocation identifier, Function constructor) { + return registerItem(identifier, constructor, new Item.Properties()); } - public static SimplePolymerItem registerModule(Identifier identifier, Item vanillaItem, List> instructionTypes, List specialAbilities) { + public static SimplePolymerItem registerModule(ResourceLocation identifier, Item vanillaItem, List> instructionTypes, List specialAbilities) { return registerItem( identifier, settings -> new SimplePolymerItem(settings, vanillaItem), - new Item.Settings().component(MinionComponentTypes.MODULE, new MinionModule(instructionTypes, specialAbilities)) + new Item.Properties().component(MinionComponentTypes.MODULE, new MinionModule(instructionTypes, specialAbilities)) ); } - public static SimplePolymerItem registerModule(Identifier identifier, Item vanillaItem, List> instructionTypes) { + public static SimplePolymerItem registerModule(ResourceLocation identifier, Item vanillaItem, List> instructionTypes) { return registerModule( identifier, vanillaItem, diff --git a/src/main/java/io/github/skippyall/minions/registration/MinionListeners.java b/src/main/java/io/github/skippyall/minions/registration/MinionListeners.java index 0472544..e56e496 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionListeners.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionListeners.java @@ -2,11 +2,11 @@ package io.github.skippyall.minions.registration; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.block.miniontrigger.MinionTriggerMinionListener; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class MinionListeners { public static void register() { - Registry.register(MinionRegistries.MINION_LISTENER_CODECS, Identifier.of(Minions.MOD_ID, "minion_trigger"), MinionTriggerMinionListener.CODEC); + Registry.register(MinionRegistries.MINION_LISTENER_CODECS, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, "minion_trigger"), MinionTriggerMinionListener.CODEC); } } diff --git a/src/main/java/io/github/skippyall/minions/registration/MinionRegistries.java b/src/main/java/io/github/skippyall/minions/registration/MinionRegistries.java index d3e7515..57fdb9d 100644 --- a/src/main/java/io/github/skippyall/minions/registration/MinionRegistries.java +++ b/src/main/java/io/github/skippyall/minions/registration/MinionRegistries.java @@ -21,9 +21,9 @@ import io.github.skippyall.minions.program.value.ValueType; import net.fabricmc.fabric.api.event.registry.DynamicRegistries; import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder; import net.fabricmc.fabric.api.event.registry.RegistryAttribute; -import net.minecraft.registry.Registry; -import net.minecraft.registry.RegistryKey; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; public class MinionRegistries { public static final Registry> VALUE_TYPES = registry("value_type"); @@ -41,15 +41,15 @@ public class MinionRegistries { public static final Registry> MINION_CONFIG_OPTIONS = registry("minion_config_option"); public static final Registry> DOCS_ENTRY_TYPES = registry("docs_entry_type"); - public static final RegistryKey> GUI_DISPLAY = key("gui_display"); - public static final RegistryKey> DOCS_ENTRY = key("docs_entry"); + public static final ResourceKey> GUI_DISPLAY = key("gui_display"); + public static final ResourceKey> DOCS_ENTRY = key("docs_entry"); private static Registry registry(String id) { return FabricRegistryBuilder.createSimple(key(id)).attribute(RegistryAttribute.OPTIONAL).buildAndRegister(); } - private static RegistryKey> key(String name) { - return RegistryKey.ofRegistry(Identifier.of(Minions.MOD_ID, name)); + private static ResourceKey> key(String name) { + return ResourceKey.createRegistryKey(ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, name)); } public static void register() { diff --git a/src/main/java/io/github/skippyall/minions/registration/SkinProviders.java b/src/main/java/io/github/skippyall/minions/registration/SkinProviders.java index 5ba2c1c..fc5429a 100644 --- a/src/main/java/io/github/skippyall/minions/registration/SkinProviders.java +++ b/src/main/java/io/github/skippyall/minions/registration/SkinProviders.java @@ -5,8 +5,8 @@ import io.github.skippyall.minions.minion.skin.Base64SkinProvider; import io.github.skippyall.minions.minion.skin.NameSkinProvider; import io.github.skippyall.minions.minion.skin.SkinProvider; import io.github.skippyall.minions.minion.skin.UUIDSkinProvider; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class SkinProviders { public static NameSkinProvider NAME = register(new NameSkinProvider(), "name"); @@ -14,7 +14,7 @@ public class SkinProviders { public static Base64SkinProvider BASE64 = register(new Base64SkinProvider(), "base64"); public static T register(T skinProvider, String path) { - return Registry.register(MinionRegistries.SKIN_PROVIDERS, Identifier.of(Minions.MOD_ID, path), skinProvider); + return Registry.register(MinionRegistries.SKIN_PROVIDERS, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, path), skinProvider); } public static void register() { diff --git a/src/main/java/io/github/skippyall/minions/registration/SpecialAbilities.java b/src/main/java/io/github/skippyall/minions/registration/SpecialAbilities.java index 152f53b..4debe41 100644 --- a/src/main/java/io/github/skippyall/minions/registration/SpecialAbilities.java +++ b/src/main/java/io/github/skippyall/minions/registration/SpecialAbilities.java @@ -3,14 +3,14 @@ package io.github.skippyall.minions.registration; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.module.MobSpawningAbility; import io.github.skippyall.minions.module.SpecialAbility; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class SpecialAbilities { public static final MobSpawningAbility MOB_SPAWNING = register("mob_spawning", new MobSpawningAbility()); private static T register(String name, T type) { - Registry.register(MinionRegistries.SPECIAL_ABILITIES, Identifier.of(Minions.MOD_ID, name), type); + Registry.register(MinionRegistries.SPECIAL_ABILITIES, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, name), type); return type; } diff --git a/src/main/java/io/github/skippyall/minions/registration/ValueConverters.java b/src/main/java/io/github/skippyall/minions/registration/ValueConverters.java index fb56ad2..b0dd98c 100644 --- a/src/main/java/io/github/skippyall/minions/registration/ValueConverters.java +++ b/src/main/java/io/github/skippyall/minions/registration/ValueConverters.java @@ -4,15 +4,15 @@ import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.program.conversion.CastConverter; import io.github.skippyall.minions.program.conversion.EqualityConverter; import io.github.skippyall.minions.program.conversion.ValueConverterType; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class ValueConverters { public static final EqualityConverter.EqualityConverterType EQUALITY_CONVERTER = register("equality", new EqualityConverter.EqualityConverterType()); public static final CastConverter.Type CAST_CONVERTER = register("cast", new CastConverter.Type()); private static > T register(String name, T type) { - return Registry.register(MinionRegistries.VALUE_CONVERTER_TYPES, Identifier.of(Minions.MOD_ID, name), type); + return Registry.register(MinionRegistries.VALUE_CONVERTER_TYPES, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, name), type); } public static void register() {} diff --git a/src/main/java/io/github/skippyall/minions/registration/ValueSuppliers.java b/src/main/java/io/github/skippyall/minions/registration/ValueSuppliers.java index 2b5884c..7144983 100644 --- a/src/main/java/io/github/skippyall/minions/registration/ValueSuppliers.java +++ b/src/main/java/io/github/skippyall/minions/registration/ValueSuppliers.java @@ -5,15 +5,15 @@ import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.minion.program.supplier.AnalogInputSupplier; import io.github.skippyall.minions.program.supplier.FixedValueSupplierType; import io.github.skippyall.minions.program.supplier.ValueSupplierType; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class ValueSuppliers { public static final FixedValueSupplierType FIXED_VALUE_SUPPLIER_TYPE = register("fixed", new FixedValueSupplierType<>()); public static final AnalogInputSupplier.AnalogInputSupplierType ANALOG_INPUT = register("analog_input", new AnalogInputSupplier.AnalogInputSupplierType()); public static > T register(String id, T type) { - return Registry.register(MinionRegistries.VALUE_SUPPLIER_TYPES, Identifier.of(Minions.MOD_ID, id), type); + return Registry.register(MinionRegistries.VALUE_SUPPLIER_TYPES, ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, id), type); } public static void register() {} diff --git a/src/main/java/io/github/skippyall/minions/registration/ValueTypes.java b/src/main/java/io/github/skippyall/minions/registration/ValueTypes.java index 4c65e98..39cb6e5 100644 --- a/src/main/java/io/github/skippyall/minions/registration/ValueTypes.java +++ b/src/main/java/io/github/skippyall/minions/registration/ValueTypes.java @@ -6,11 +6,10 @@ import io.github.skippyall.minions.gui.input.TextInput; import io.github.skippyall.minions.minion.program.instruction.move.TurnDirection; import io.github.skippyall.minions.program.value.SimpleValueType; import io.github.skippyall.minions.program.value.ValueType; -import net.minecraft.registry.Registry; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - import java.util.concurrent.CompletableFuture; +import net.minecraft.core.Registry; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; public class ValueTypes { public static ValueType LONG = register( @@ -21,10 +20,10 @@ public class ValueTypes { o -> o instanceof Long l ? l : null, (parent, oldValue) -> TextInput.inputLong( parent, - Text.literal("Integer"), + Component.literal("Integer"), String.valueOf(oldValue) ), - value -> Text.literal(value.toString()) + value -> Component.literal(value.toString()) ) ); @@ -36,10 +35,10 @@ public class ValueTypes { o -> o instanceof Double d ? d : null, (parent, oldValue) -> TextInput.inputDouble( parent, - Text.literal("Number"), + Component.literal("Number"), String.valueOf(oldValue) ), - value -> Text.literal(value.toString()) + value -> Component.literal(value.toString()) ) ); @@ -51,7 +50,7 @@ public class ValueTypes { o -> o instanceof Boolean b ? b : null, //TODO Properly implement ChoiceInput (gui, value) -> CompletableFuture.completedFuture(value),//ChoiceInput.inputBoolean(Text.literal("")), - value -> Text.literal(value.toString()) + value -> Component.literal(value.toString()) ) ); @@ -63,10 +62,10 @@ public class ValueTypes { o -> o instanceof String s ? s : null, ((parent, oldValue) -> TextInput.inputString( parent, - Text.literal("Text"), + Component.literal("Text"), oldValue) ), - value -> Text.literal("\"" + value + "\"") + value -> Component.literal("\"" + value + "\"") ) ); @@ -78,7 +77,7 @@ public class ValueTypes { o -> o instanceof TurnDirection d ? d : null, //TODO Properly implement ChoiceInput (parent, oldValue) -> CompletableFuture.completedFuture(oldValue), // ChoiceInput.createDialogOpener(TurnDirection.values()), - value -> Text.literal(value.name) + value -> Component.literal(value.name) ) ); @@ -86,7 +85,7 @@ public class ValueTypes { String id, T type ) { - Identifier identifier = Identifier.of(Minions.MOD_ID, id); + ResourceLocation identifier = ResourceLocation.fromNamespaceAndPath(Minions.MOD_ID, id); Registry.register( MinionRegistries.VALUE_TYPES, identifier, diff --git a/src/main/java/io/github/skippyall/minions/util/ModelIdUtil.java b/src/main/java/io/github/skippyall/minions/util/ModelIdUtil.java index 78f383c..c3338f7 100644 --- a/src/main/java/io/github/skippyall/minions/util/ModelIdUtil.java +++ b/src/main/java/io/github/skippyall/minions/util/ModelIdUtil.java @@ -1,11 +1,11 @@ package io.github.skippyall.minions.util; -import net.minecraft.item.Item; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; public class ModelIdUtil { - public static Identifier getItemModelId(Item item) { - return Registries.ITEM.getId(item); + public static ResourceLocation getItemModelId(Item item) { + return BuiltInRegistries.ITEM.getKey(item); } } diff --git a/src/main/java/io/github/skippyall/minions/util/TranslationUtil.java b/src/main/java/io/github/skippyall/minions/util/TranslationUtil.java index 6500604..6ba21fd 100644 --- a/src/main/java/io/github/skippyall/minions/util/TranslationUtil.java +++ b/src/main/java/io/github/skippyall/minions/util/TranslationUtil.java @@ -1,11 +1,11 @@ package io.github.skippyall.minions.util; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; public class TranslationUtil { public static String getTranslationKey(T object, Registry registry, String defaultKey) { - return getTranslationKey(object, registry, registry.getKey().getValue().getPath(), defaultKey); + return getTranslationKey(object, registry, registry.key().location().getPath(), defaultKey); } public static String getTranslationKey(T object, Registry registry, String prefix, String defaultKey) { @@ -13,11 +13,11 @@ public class TranslationUtil { return defaultKey; } - Identifier id = registry.getId(object); + ResourceLocation id = registry.getKey(object); if(id == null) { return defaultKey; } - return id.toTranslationKey(prefix); + return id.toLanguageKey(prefix); } public static String getTranslationKey(T object, Registry registry) { diff --git a/src/main/resources/minions.accesswidener b/src/main/resources/minions.accesswidener index 80f9817..90b2bed 100644 --- a/src/main/resources/minions.accesswidener +++ b/src/main/resources/minions.accesswidener @@ -1,5 +1,5 @@ accessWidener v2 named -accessible class net/minecraft/server/world/ChunkLevelManager$DistanceFromNearestPlayerTracker -accessible method net/minecraft/server/world/ChunkLevelManager$DistanceFromNearestPlayerTracker (Lnet/minecraft/server/world/ChunkLevelManager;I)V -accessible class net/minecraft/screen/slot/ArmorSlot \ No newline at end of file +accessible class net/minecraft/server/level/DistanceManager$FixedPlayerDistanceChunkTracker +accessible method net/minecraft/server/level/DistanceManager$FixedPlayerDistanceChunkTracker (Lnet/minecraft/server/level/DistanceManager;I)V +accessible class net/minecraft/world/inventory/ArmorSlot \ No newline at end of file diff --git a/src/main/resources/minions.mixins.json b/src/main/resources/minions.mixins.json index 36b0b78..05da6de 100644 --- a/src/main/resources/minions.mixins.json +++ b/src/main/resources/minions.mixins.json @@ -8,22 +8,22 @@ "ConnectionMixin", "EntityAccessor", "EntityMixin", - "EntityViewMixin", + "EntityGetterMixin", "MinecraftServerMixin", - "MobEntityMixin", + "MobMixin", "PistonMovingBlockEntityMixin", - "PlayerListEntryS2CPacket$EntryMixin", + "ClientboundPlayerInfoUpdatePacket$EntryMixin", "PlayerListMixin", "PlayerMixin", - "ServerPlayNetworkHandlerMixin", - "SleepManagerMixin", - "SpawnHelperMixin", + "ServerGamePacketListenerImplMixin", + "SleepStatusMixin", + "NaturalSpawnerMixin", "TickRateManagerMixin", - "antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin", - "antimobcap.ChunkLevelManagerMixin", - "antimobcap.ChunkPosDistanceLevelPropagatorMixin", - "antimobcap.ServerChunkManagerAccessor", - "antimobcap.ServerChunkManagerMixin", + "antimobcap.DistanceManager$FixedPlayerDistanceChunkTrackerMixin", + "antimobcap.DistanceManagerMixin", + "antimobcap.ChunkTrackerMixin", + "antimobcap.ServerChunkCacheAccessor", + "antimobcap.ServerChunkCacheMixin", "compat.universal_graves.GraveMixin" ], "client": [],