diff --git a/build.gradle b/build.gradle index fb915bb..33abc6b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.8-SNAPSHOT' + id 'fabric-loom' version '1.10-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index 4c7050a..d10119d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,21 +3,21 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html - minecraft_version=1.21.4 + minecraft_version=1.21.5 loader_version=0.16.13 - yarn_mappings=1.21.4+build.8 + yarn_mappings=1.21.5+build.1 # Mod Properties - mod_version = 0.1.2-SNAPSHOT + mod_version = 0.2.0-SNAPSHOT maven_group = io.github.skippyall archives_base_name = Minions # Dependencies # check this on https://modmuss50.me/fabric.html - fabric_version=0.115.1+1.21.4 + fabric_version=0.121.0+1.21.5 - polymer_version=0.11.5+1.21.4 + polymer_version=0.12.3+1.21.5 sgui_version=1.8.2+1.21.4 - server_translations_version=2.4.0+1.21.2-rc1 + server_translations_version=2.5.0+1.21.5-rc1 - universal_graves_version=3.5.0+1.21.2 + universal_graves_version=3.7.1+1.21.5 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fb038fb..82d65ca 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1 +1 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip diff --git a/src/main/java/io/github/skippyall/minions/MobCapCommand.java b/src/main/java/io/github/skippyall/minions/MobCapCommand.java index 6a7fa1e..b32e913 100644 --- a/src/main/java/io/github/skippyall/minions/MobCapCommand.java +++ b/src/main/java/io/github/skippyall/minions/MobCapCommand.java @@ -1,8 +1,8 @@ package io.github.skippyall.minions; import com.mojang.brigadier.CommandDispatcher; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManagerAccessor; +import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; +import io.github.skippyall.minions.mixinhelper.ChunkLevelManagerAccessor; import io.github.skippyall.minions.mixins.antimobcap.ServerChunkManagerAccessor; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.world.ChunkTicketManager; @@ -15,7 +15,7 @@ public class MobCapCommand { dispatcher.register(literal("mobcapdebug") .executes(context -> { ChunkTicketManager ticketManager = ((ServerChunkManagerAccessor)context.getSource().getWorld().getChunkManager()).getTicketManager(); - int tickedChunkCount = ((ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor)((ChunkTicketManagerAccessor)ticketManager).getMinionless()).minions$getTickedChunkCount(); + int tickedChunkCount = ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)((ChunkLevelManagerAccessor)ticketManager).minions$getMinionless()).minions$getTickedChunkCount(); context.getSource().sendFeedback(() -> Text.of(String.valueOf(tickedChunkCount)), false); return 0; }) diff --git a/src/main/java/io/github/skippyall/minions/gui/MinionGui.java b/src/main/java/io/github/skippyall/minions/gui/MinionGui.java index 9c84df7..cb08803 100644 --- a/src/main/java/io/github/skippyall/minions/gui/MinionGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/MinionGui.java @@ -25,15 +25,6 @@ public class MinionGui { openCommandsGui(player, minion); }) ); - if(minion.isProgrammable()) { - gui.setSlot(4, new GuiElementBuilder() - .setItem(Items.REDSTONE) - .setName(Text.translatable("minions.gui.main.programming")) - .setCallback(() -> { - openProgrammingInventory(player, minion); - }) - ); - } gui.setSlot(3, new GuiElementBuilder() .setItem(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) .setName(Text.translatable("minions.gui.main.modules")) 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 ca5bdbe..ee5938e 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionItem.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionItem.java @@ -5,6 +5,7 @@ import eu.pb4.polymer.core.api.item.PolymerItemUtils; import io.github.skippyall.minions.gui.MinionLookGui; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; 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; @@ -23,6 +24,7 @@ import org.jetbrains.annotations.Nullable; import xyz.nucleoid.packettweaker.PacketContext; import java.util.List; +import java.util.function.Consumer; public class MinionItem extends Item implements PolymerItem { public MinionItem(Settings settings) { @@ -47,10 +49,10 @@ public class MinionItem extends Item implements PolymerItem { } @Override - public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + public void appendTooltip(ItemStack stack, TooltipContext context, TooltipDisplayComponent component, Consumer tooltip, TooltipType type) { MinionData data = getData(stack); if(data != null) { - tooltip.add(Text.translatable("minions.minion_item.tooltip", data.name())); + tooltip.accept(Text.translatable("minions.minion_item.tooltip", data.name())); } } 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 f84aa44..368d39e 100644 --- a/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java +++ b/src/main/java/io/github/skippyall/minions/minion/MinionPersistentState.java @@ -1,45 +1,38 @@ package io.github.skippyall.minions.minion; +import com.mojang.serialization.Codec; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtList; import net.minecraft.registry.RegistryWrapper; import net.minecraft.server.MinecraftServer; import net.minecraft.world.PersistentState; +import net.minecraft.world.PersistentStateType; import net.minecraft.world.World; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; public class MinionPersistentState extends PersistentState { - public static Type TYPE = new Type<>(MinionPersistentState::new, MinionPersistentState::read, null); + 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 MinionPersistentState INSTANCE; private final Map minionData = new HashMap<>(); - @Override - public NbtCompound writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) { - NbtList list = new NbtList(); - for(MinionData data : minionData.values()) { - list.add(data.writeNbt()); - } - nbt.put("minions", list); + public MinionPersistentState() { - return nbt; } - public static MinionPersistentState read(NbtCompound compound, RegistryWrapper.WrapperLookup lookup) { - NbtList list = compound.getList("minions", NbtElement.COMPOUND_TYPE); - MinionPersistentState instance = new MinionPersistentState(); - for(NbtElement element : list) { - if(element instanceof NbtCompound compound1) { - MinionData data = MinionData.readNbt(compound1); - instance.minionData.put(data.uuid(), data); - } + public MinionPersistentState(List dataList) { + for (MinionData data : dataList) { + minionData.put(data.uuid(), data); } - return instance; } public MinionData getMinionData(UUID uuid) { @@ -50,6 +43,10 @@ public class MinionPersistentState extends PersistentState { return minionData; } + public List getMinionDataList() { + return List.copyOf(minionData.values()); + } + public void updateMinionData(MinionData data) { minionData.put(data.uuid(), data); markDirty(); @@ -64,6 +61,6 @@ public class MinionPersistentState extends PersistentState { } public static void create(MinecraftServer server) { - INSTANCE = server.getWorld(World.OVERWORLD).getPersistentStateManager().getOrCreate(TYPE, "minion"); + INSTANCE = server.getWorld(World.OVERWORLD).getPersistentStateManager().getOrCreate(TYPE); } } 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 fd1fddd..0b136de 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 @@ -281,14 +281,14 @@ public class EntityPlayerActionPack else // one slot { if (selectedSlot == -1) - selectedSlot = inv.selectedSlot; + selectedSlot = inv.getSelectedSlot(); dropItemFromSlot(selectedSlot, dropAll); } } public void setSlot(int slot) { - player.getInventory().selectedSlot = slot-1; + player.getInventory().setSelectedSlot(slot-1); player.networkHandler.sendPacket(new UpdateSelectedSlotS2CPacket(slot-1)); } @@ -321,7 +321,7 @@ public class EntityPlayerActionPack BlockHitResult blockHit = (BlockHitResult) hit; BlockPos pos = blockHit.getBlockPos(); Direction side = blockHit.getSide(); - if (pos.getY() < player.getServerWorld().getTopYInclusive() - (side == Direction.UP ? 1 : 0) && world.canPlayerModifyAt(player, pos)) + if (pos.getY() < player.getServerWorld().getTopYInclusive() - (side == Direction.UP ? 1 : 0) && world.canEntityModifyAt(player, pos)) { ActionResult result = player.interactionManager.interactBlock(player, world, player.getStackInHand(hand), hand, blockHit); if (result instanceof ActionResult.Success success) 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 79593c7..e45fce8 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 @@ -4,7 +4,7 @@ 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.NetworkState; +import net.minecraft.network.state.NetworkState; import net.minecraft.network.listener.PacketListener; public class FakeClientConnection extends ClientConnection { 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 4c1986f..5f50661 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 @@ -16,6 +16,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.EndPortalBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.ItemEntity; import net.minecraft.entity.MovementType; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.damage.DamageSource; @@ -54,7 +55,6 @@ public class MinionFakePlayer extends ServerPlayerEntity { private float moveForward; private float moveSideways; - private boolean programmable; private final ModuleInventory moduleInventory = new ModuleInventory(); private final MinionRuntime runtime = new MinionRuntime(this); @@ -106,14 +106,6 @@ public class MinionFakePlayer extends ServerPlayerEntity { this.data = data; } - public boolean isProgrammable() { - return programmable; - } - - public void setProgrammable(boolean programmable) { - this.programmable = programmable; - } - public ModuleInventory getModuleInventory() { return moduleInventory; } @@ -281,7 +273,10 @@ public class MinionFakePlayer extends ServerPlayerEntity { @Override public void drop(ServerWorld world, DamageSource damageSource) { super.drop(world, damageSource); - dropStack(world, toItemStack()).setNeverDespawn(); + ItemEntity entity = dropStack(world, toItemStack()); + if (entity != null) { + entity.setNeverDespawn(); + } } private ItemStack toItemStack() { @@ -298,13 +293,11 @@ public class MinionFakePlayer extends ServerPlayerEntity { public void writeCustomDataToNbt(NbtCompound nbt) { super.writeCustomDataToNbt(nbt); nbt.put("modules", moduleInventory.writeNbt(new NbtCompound(), getRegistryManager())); - nbt.putBoolean("programmable", programmable); } @Override public void readCustomDataFromNbt(NbtCompound nbt) { super.readCustomDataFromNbt(nbt); - moduleInventory.readNbt(nbt.getCompound("modules"), getRegistryManager()); - programmable = nbt.getBoolean("programmable"); + moduleInventory.readNbt(nbt.getCompoundOrEmpty("modules"), getRegistryManager()); } } \ No newline at end of file diff --git a/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor.java b/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor.java similarity index 73% rename from src/main/java/io/github/skippyall/minions/mixinhelper/ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor.java rename to src/main/java/io/github/skippyall/minions/mixinhelper/ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor.java index b4fbb8c..6497c80 100644 --- a/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor.java +++ b/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor.java @@ -1,6 +1,6 @@ package io.github.skippyall.minions.mixinhelper; -public interface ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor { +public interface ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor { void minions$markAsMinionless(); void minions$markAsTarget(); int minions$getTickedChunkCount(); diff --git a/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkLevelManagerAccessor.java b/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkLevelManagerAccessor.java new file mode 100644 index 0000000..97fb8a0 --- /dev/null +++ b/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkLevelManagerAccessor.java @@ -0,0 +1,11 @@ +package io.github.skippyall.minions.mixinhelper; + +import it.unimi.dsi.fastutil.objects.ObjectSet; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ChunkLevelManager; + +public interface ChunkLevelManagerAccessor { + ObjectSet minions$getPlayers(long chunkpos); + + ChunkLevelManager.DistanceFromNearestPlayerTracker minions$getMinionless(); +} diff --git a/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkTicketManagerAccessor.java b/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkTicketManagerAccessor.java deleted file mode 100644 index c6282e1..0000000 --- a/src/main/java/io/github/skippyall/minions/mixinhelper/ChunkTicketManagerAccessor.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.skippyall.minions.mixinhelper; - -import it.unimi.dsi.fastutil.objects.ObjectSet; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ChunkTicketManager; - -public interface ChunkTicketManagerAccessor { - ObjectSet getPlayers(long chunkpos); - - ChunkTicketManager.DistanceFromNearestPlayerTracker getMinionless(); -} diff --git a/src/main/java/io/github/skippyall/minions/mixinhelpers/EntityViewMixinHelper.java b/src/main/java/io/github/skippyall/minions/mixinhelper/EntityViewMixinHelper.java similarity index 82% rename from src/main/java/io/github/skippyall/minions/mixinhelpers/EntityViewMixinHelper.java rename to src/main/java/io/github/skippyall/minions/mixinhelper/EntityViewMixinHelper.java index f0da900..9477c9f 100644 --- a/src/main/java/io/github/skippyall/minions/mixinhelpers/EntityViewMixinHelper.java +++ b/src/main/java/io/github/skippyall/minions/mixinhelper/EntityViewMixinHelper.java @@ -1,4 +1,4 @@ -package io.github.skippyall.minions.mixinhelpers; +package io.github.skippyall.minions.mixinhelper; import net.minecraft.entity.Entity; 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 a3005dd..1602f2a 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/ChunkTicketManagerFixMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/ChunkTicketManagerFixMixin.java @@ -3,11 +3,12 @@ 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.world.ChunkTicketManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(value = ChunkTicketManager.class) +@Mixin(value = ChunkLevelManager.class) public class ChunkTicketManagerFixMixin { @WrapOperation(method = "handleChunkLeave", 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) { diff --git a/src/main/java/io/github/skippyall/minions/mixins/EntityViewMixin.java b/src/main/java/io/github/skippyall/minions/mixins/EntityViewMixin.java index 2663699..531e443 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/EntityViewMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/EntityViewMixin.java @@ -1,6 +1,6 @@ package io.github.skippyall.minions.mixins; -import io.github.skippyall.minions.mixinhelpers.EntityViewMixinHelper; +import io.github.skippyall.minions.mixinhelper.EntityViewMixinHelper; import net.minecraft.entity.Entity; import net.minecraft.world.EntityView; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java b/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java index def074b..1fc138e 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/MobEntityMixin.java @@ -3,20 +3,14 @@ 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.mixinhelpers.EntityViewMixinHelper; +import io.github.skippyall.minions.mixinhelper.EntityViewMixinHelper; import io.github.skippyall.minions.module.MobSpawningModule; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.world.World; 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.Redirect; @Mixin(MobEntity.class) public abstract class MobEntityMixin { diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTicketManager$DistanceFromNearestPlayerTrackerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin.java similarity index 74% rename from src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTicketManager$DistanceFromNearestPlayerTrackerMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin.java index d540e27..b6827ac 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTicketManager$DistanceFromNearestPlayerTrackerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin.java @@ -1,12 +1,13 @@ package io.github.skippyall.minions.mixins.antimobcap; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManagerAccessor; +import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; +import io.github.skippyall.minions.mixinhelper.ChunkLevelManagerAccessor; import io.github.skippyall.minions.module.MobSpawningModule; 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.world.ChunkTicketManager; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -17,11 +18,11 @@ 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 = ChunkTicketManager.DistanceFromNearestPlayerTracker.class) -public abstract class ChunkTicketManager$DistanceFromNearestPlayerTrackerMixin extends ChunkPosDistanceLevelPropagatorMixin implements ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor { +@Mixin(value = ChunkLevelManager.DistanceFromNearestPlayerTracker.class) +public abstract class ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin extends ChunkPosDistanceLevelPropagatorMixin implements ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor { @Final @Shadow - ChunkTicketManager field_17462; + ChunkLevelManager field_17462; @Shadow @Final @@ -41,7 +42,7 @@ public abstract class ChunkTicketManager$DistanceFromNearestPlayerTrackerMixin e @Override public boolean minions$isRealPlayerInChunk(long chunkPos) { - ObjectSet players = ((ChunkTicketManagerAccessor)field_17462).getPlayers(chunkPos); + ObjectSet players = ((ChunkLevelManagerAccessor)field_17462).minions$getPlayers(chunkPos); boolean contains = false; if(players != null) { contains = players.stream().anyMatch(player -> { @@ -57,14 +58,14 @@ public abstract class ChunkTicketManager$DistanceFromNearestPlayerTrackerMixin e @Inject(method = "updateLevels", at = @At("HEAD")) public void minions$sync(CallbackInfo info) { if (minions$target) { - ((ChunkTicketManagerAccessor)field_17462).getMinionless().updateLevels(); + ((ChunkLevelManagerAccessor)field_17462).minions$getMinionless().updateLevels(); } } @Override public void minions$updateLevel(long chunkPos, int distance, boolean decrease, CallbackInfo info) { if (minions$target && (distance == Integer.MAX_VALUE || minions$isRealPlayerInChunk(chunkPos))) { - ((ChunkTicketManagerAccessor)field_17462).getMinionless().updateLevel(chunkPos, distance, decrease); + ((ChunkLevelManagerAccessor)field_17462).minions$getMinionless().updateLevel(chunkPos, distance, decrease); } } diff --git a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTicketManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManagerMixin.java similarity index 52% rename from src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTicketManagerMixin.java rename to src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManagerMixin.java index 6ca5362..84c2fd2 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkTicketManagerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkLevelManagerMixin.java @@ -1,48 +1,51 @@ package io.github.skippyall.minions.mixins.antimobcap; import com.llamalad7.mixinextras.sugar.Local; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManagerAccessor; +import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; +import io.github.skippyall.minions.mixinhelper.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(ChunkTicketManager.class) -public class ChunkTicketManagerMixin implements ChunkTicketManagerAccessor { +@Mixin(ChunkLevelManager.class) +public class ChunkLevelManagerMixin implements ChunkLevelManagerAccessor { @Shadow @Final private Long2ObjectMap> playersByChunkPos; - @Shadow @Final private ChunkTicketManager.DistanceFromNearestPlayerTracker distanceFromNearestPlayerTracker; - ChunkTicketManager.DistanceFromNearestPlayerTracker minionless; + @Shadow @Final private ChunkLevelManager.DistanceFromNearestPlayerTracker distanceFromNearestPlayerTracker; + @Unique + ChunkLevelManager.DistanceFromNearestPlayerTracker minionless; @Inject(method = "", at = @At("RETURN")) - public void createMinionlessClone(Executor workerExecutor, Executor mainThreadExecutor, CallbackInfo ci) { - ChunkTicketManager manager = ((ChunkTicketManager)(Object)this); + public void createMinionlessClone(ChunkTicketManager ticketManager, Executor executor, Executor mainThreadExecutor, CallbackInfo ci) { + ChunkLevelManager manager = ((ChunkLevelManager)(Object)this); minionless = manager.new DistanceFromNearestPlayerTracker(8); - ((ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor)minionless).minions$markAsMinionless(); - ((ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor)distanceFromNearestPlayerTracker).minions$markAsTarget(); + ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)minionless).minions$markAsMinionless(); + ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)distanceFromNearestPlayerTracker).minions$markAsTarget(); } - public ObjectSet getPlayers(long chunkpos) { + public ObjectSet minions$getPlayers(long chunkpos) { return playersByChunkPos.get(chunkpos); } @Override - public ChunkTicketManager.DistanceFromNearestPlayerTracker getMinionless() { + 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 (!((ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor)minionless).minions$isRealPlayerInChunk(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/ChunkPosDistanceLevelPropagatorMixin.java index 9d45022..20faba5 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkPosDistanceLevelPropagatorMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ChunkPosDistanceLevelPropagatorMixin.java @@ -1,11 +1,12 @@ package io.github.skippyall.minions.mixins.antimobcap; +import net.minecraft.server.world.ChunkPosDistanceLevelPropagator; 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(net.minecraft.world.ChunkPosDistanceLevelPropagator.class) +@Mixin(ChunkPosDistanceLevelPropagator.class) public class ChunkPosDistanceLevelPropagatorMixin { @Inject(method = "updateLevel", 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/ServerChunkManagerMixin.java b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerMixin.java index 160bceb..5e0054f 100644 --- a/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerMixin.java +++ b/src/main/java/io/github/skippyall/minions/mixins/antimobcap/ServerChunkManagerMixin.java @@ -1,7 +1,7 @@ package io.github.skippyall.minions.mixins.antimobcap; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor; -import io.github.skippyall.minions.mixinhelper.ChunkTicketManagerAccessor; +import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor; +import io.github.skippyall.minions.mixinhelper.ChunkLevelManagerAccessor; import net.minecraft.server.world.ChunkTicketManager; import net.minecraft.server.world.ServerChunkManager; import org.spongepowered.asm.mixin.Final; @@ -16,8 +16,8 @@ public class ServerChunkManagerMixin { @Final private ChunkTicketManager ticketManager; - @ModifyArg(method = "tickChunks(Lnet/minecraft/util/profiler/Profiler;JLjava/util/List;)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;")) + @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 ((ChunkTicketManager$DistanceFromNearestPlayerTrackerAccessor)((ChunkTicketManagerAccessor)ticketManager).getMinionless()).minions$getTickedChunkCount(); + return ((ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor)((ChunkLevelManagerAccessor)ticketManager).minions$getMinionless()).minions$getTickedChunkCount(); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 480a527..02ce27e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -23,7 +23,7 @@ "depends": { "fabricloader": "*", "fabric": "*", - "minecraft": "~1.21.3", + "minecraft": "~1.21.5", "polymer-core": "*" } } diff --git a/src/main/resources/minions.accesswidener b/src/main/resources/minions.accesswidener index 0ffdeca..0810614 100644 --- a/src/main/resources/minions.accesswidener +++ b/src/main/resources/minions.accesswidener @@ -1,4 +1,4 @@ accessWidener v2 named -accessible class net/minecraft/server/world/ChunkTicketManager$DistanceFromNearestPlayerTracker -accessible method net/minecraft/server/world/ChunkTicketManager$DistanceFromNearestPlayerTracker (Lnet/minecraft/server/world/ChunkTicketManager;I)V \ No newline at end of file +accessible class net/minecraft/server/world/ChunkLevelManager$DistanceFromNearestPlayerTracker +accessible method net/minecraft/server/world/ChunkLevelManager$DistanceFromNearestPlayerTracker (Lnet/minecraft/server/world/ChunkLevelManager;I)V \ No newline at end of file diff --git a/src/main/resources/minions.mixins.json b/src/main/resources/minions.mixins.json index 71fddc6..7fd1874 100644 --- a/src/main/resources/minions.mixins.json +++ b/src/main/resources/minions.mixins.json @@ -18,8 +18,8 @@ "SleepManagerMixin", "SpawnHelperMixin", "antimobcap.ChunkPosDistanceLevelPropagatorMixin", - "antimobcap.ChunkTicketManager$DistanceFromNearestPlayerTrackerMixin", - "antimobcap.ChunkTicketManagerMixin", + "antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerMixin", + "antimobcap.ChunkLevelManagerMixin", "antimobcap.ServerChunkManagerAccessor", "antimobcap.ServerChunkManagerMixin" ],