From 5de091abef37e36ceb2ae07f7899097aa6b9efff Mon Sep 17 00:00:00 2001 From: Yedelo <158670400+yedelo@users.noreply.github.com> Date: Wed, 14 Oct 2026 20:02:24 -0400 Subject: [PATCH 1/3] turkmenistan Signed-off-by: Yedelo <158670400+yedelo@users.noreply.github.com> --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb315f5..1d05995 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ ## **3.1.0** -`Trans Rights` :3 - truffle \ No newline at end of file +`Trans Rights` :3 - truffle +i am in turkmenistan right now - jamils \ No newline at end of file From 42f093adc0fba9f588518f41cf7d997bcf9ccf9c Mon Sep 17 00:00:00 2001 From: Yedelo <158670400+yedelo@users.noreply.github.com> Date: Sun, 18 Oct 2026 15:25:34 -0400 Subject: [PATCH 2/3] feather Signed-off-by: Yedelo <158670400+yedelo@users.noreply.github.com> --- build.fabric.gradle.kts | 8 ++- src/main/java/at/yedel/yedelmod/YedelMod.java | 1 - .../at/yedel/yedelmod/config/YedelConfig.java | 13 ++--- .../yedelmod/features/CustomHitParticles.java | 21 +++---- .../yedelmod/features/LimboCreative.java | 4 +- .../features/major/EasyAtlasVerdicts.java | 29 +++++----- .../features/major/StrengthIndicators.java | 7 ++- .../features/major/TNTTagFeatures.java | 12 ++-- .../yedelmod/features/ping/PingMethod.java | 11 ++-- .../yedelmod/features/ping/PingResponse.java | 9 +-- .../mixins/legacy/InvokerMinecraft.java | 4 +- .../legacy/MixinLivingEntityRenderer.java | 56 ++++++++++++++++++ ...java => MixinLocalClientPlayerEntity.java} | 8 +-- ...tityPlayer.java => MixinPlayerEntity.java} | 8 +-- .../mixins/legacy/MixinPlayerRenderer.java | 43 ++++++++++++++ .../mixins/legacy/MixinRenderPlayer.java | 43 -------------- .../legacy/MixinRendererLivingEntity.java | 58 ------------------- .../at/yedel/yedelmod/utils/Constants.java | 13 ++--- .../yedel/yedelmod/utils/NameLineEvent.java | 9 +-- .../at/yedel/yedelmod/utils/TextUtils.java | 5 +- .../resources/mixins.legacy.yedelmod.json | 6 +- stonecutter.gradle.kts | 4 +- stonecutter.properties.toml | 1 + 23 files changed, 184 insertions(+), 189 deletions(-) create mode 100644 src/main/java/at/yedel/yedelmod/mixins/legacy/MixinLivingEntityRenderer.java rename src/main/java/at/yedel/yedelmod/mixins/legacy/{MixinEntityPlayerSP.java => MixinLocalClientPlayerEntity.java} (66%) rename src/main/java/at/yedel/yedelmod/mixins/legacy/{MixinEntityPlayer.java => MixinPlayerEntity.java} (72%) create mode 100644 src/main/java/at/yedel/yedelmod/mixins/legacy/MixinPlayerRenderer.java delete mode 100644 src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRenderPlayer.java delete mode 100644 src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRendererLivingEntity.java diff --git a/build.fabric.gradle.kts b/build.fabric.gradle.kts index 3449d7c..afc646a 100644 --- a/build.fabric.gradle.kts +++ b/build.fabric.gradle.kts @@ -82,7 +82,13 @@ val ploceus = if (ornithe) { dependencies { minecraft("com.mojang:minecraft:${sc.current.version}") - if (ornithe) mappings(ploceus!!.mcpMappings("stable", "1.8.9", "22")) + if (ornithe) { + mappings(ploceus!!.layeredMappings { + mappings("net.ornithemc:feather-gen2:${sc.current.version}+build.${sc.properties["versions.feather"]}:v2") { + containsUnpick() + } + }) + } implementation("net.fabricmc:fabric-loader:$fabricLoaderVersion") implementation("org.polyfrost.oneconfig:${sc.current.version}-$environment:$oneconfigVersion") diff --git a/src/main/java/at/yedel/yedelmod/YedelMod.java b/src/main/java/at/yedel/yedelmod/YedelMod.java index edc84e2..1d14d64 100644 --- a/src/main/java/at/yedel/yedelmod/YedelMod.java +++ b/src/main/java/at/yedel/yedelmod/YedelMod.java @@ -58,7 +58,6 @@ private void initialize() { HudManager.register(new BountyHuntingHud(), new CustomTextHud()); Threading.scheduleRepeat(() -> { - //~ if modern 'Minecraft.getMinecraft().thePlayer' -> 'Minecraft.getInstance().player' if (Minecraft.getInstance().player != null) { YedelConfig.getInstance().playtimeMinutes++; YedelConfig.getInstance().save(); diff --git a/src/main/java/at/yedel/yedelmod/config/YedelConfig.java b/src/main/java/at/yedel/yedelmod/config/YedelConfig.java index c281148..c947d03 100644 --- a/src/main/java/at/yedel/yedelmod/config/YedelConfig.java +++ b/src/main/java/at/yedel/yedelmod/config/YedelConfig.java @@ -6,11 +6,6 @@ import at.yedel.yedelmod.features.major.EasyAtlasVerdicts; import at.yedel.yedelmod.features.major.TNTTagFeatures; import at.yedel.yedelmod.utils.Constants; -//? if legacy { -//import org.polyfrost.oneconfig.internal.legacy.InputConstants; -//?} else { -import com.mojang.blaze3d.platform.InputConstants; -//?} import org.polyfrost.compose.render.PolyColor; import org.polyfrost.oneconfig.api.config.v1.Config; import org.polyfrost.oneconfig.api.config.v1.Node; @@ -23,10 +18,12 @@ import org.polyfrost.oneconfig.utils.v1.dsl.ScreensKt; import net.fabricmc.loader.api.FabricLoader; //? if legacy { -//import net.minecraft.util.EnumParticleTypes; -//?} else { +/*import net.minecraft.entity.particle.ParticleType; +import org.polyfrost.oneconfig.internal.legacy.InputConstants; +*///?} else { import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.particles.ParticleTypes; +import com.mojang.blaze3d.platform.InputConstants; //?} @@ -148,7 +145,7 @@ public void open() { *///?} ) //? if legacy { - //public int customParticleTypeLegacy = EnumParticleTypes.NOTE.getParticleID(); + //public int customParticleTypeLegacy = ParticleType.NOTE.getId(); //?} else { public int customParticleTypeModern = BuiltInRegistries.PARTICLE_TYPE.getId(ParticleTypes.NOTE); //?} diff --git a/src/main/java/at/yedel/yedelmod/features/CustomHitParticles.java b/src/main/java/at/yedel/yedelmod/features/CustomHitParticles.java index 1291d6c..2ecbdac 100644 --- a/src/main/java/at/yedel/yedelmod/features/CustomHitParticles.java +++ b/src/main/java/at/yedel/yedelmod/features/CustomHitParticles.java @@ -8,13 +8,14 @@ //? if legacy { /*import at.yedel.yedelmod.utils.NumberUtils; import net.minecraft.block.Block; +import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; +import net.minecraft.entity.living.player.PlayerEntity; +import net.minecraft.entity.particle.ParticleType; import net.minecraft.item.Item; -import net.minecraft.util.EnumParticleTypes; -*///?} else { +import net.minecraft.item.Items; + + *///?} else { import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.minecraft.core.BlockPos; @@ -84,7 +85,7 @@ public void handleAttack(Entity entity) { if (entity.isInvisible()) { return; } - //~ if modern 'instanceof EntityPlayer' -> 'instanceof Player' + //~ if modern 'instanceof PlayerEntity' -> 'instanceof Player' if (YedelConfig.getInstance().onlySpawnCustomParticlesOnPlayers && !(entity instanceof Player)) { return; } @@ -92,7 +93,7 @@ public void handleAttack(Entity entity) { /* int particleId = YedelConfig.getInstance().randomParticleType ? (int) NumberUtils.randomRange(0, 41) : YedelConfig.getInstance().customParticleTypeLegacy; - EnumParticleTypes particle = EnumParticleTypes.getParticleFromId(particleId); + ParticleType particle = ParticleType.byId(particleId); int parameters; /^ Some particles take required parameters. @@ -107,16 +108,16 @@ public void handleAttack(Entity entity) { switch (particle) { case ITEM_CRACK: - parameters = Item.getIdFromItem(Items.redstone); + parameters = Item.getId(Items.REDSTONE); break; case BLOCK_CRACK: case BLOCK_DUST: - parameters = Block.getStateId(Blocks.redstone_ore.getDefaultState()); + parameters = Block.serialize(Blocks.REDSTONE_ORE.defaultState()); break; default: parameters = 0; } - Minecraft.getInstance().theWorld.spawnParticle(particle, true, entity.posX, entity.posY + YedelConfig.getInstance().particleYOffset, entity.posZ, 0, 0, 0, parameters); + Minecraft.getInstance().world.addParticle(particle, true, entity.x, entity.y + YedelConfig.getInstance().particleYOffset, entity.z, 0, 0, 0, parameters); *///?} else { position = entity.position(); diff --git a/src/main/java/at/yedel/yedelmod/features/LimboCreative.java b/src/main/java/at/yedel/yedelmod/features/LimboCreative.java index 277b8a0..cd6fece 100644 --- a/src/main/java/at/yedel/yedelmod/features/LimboCreative.java +++ b/src/main/java/at/yedel/yedelmod/features/LimboCreative.java @@ -60,7 +60,7 @@ public void awardLimboCreative() { private void giveCreative() { //? if legacy { - //Minecraft.getInstance().playerController.setGameType(WorldSettings.GameType.CREATIVE); + //Minecraft.getInstance().interactionManager.setGameMode(WorldSettings.GameMode.CREATIVE); //?} else Minecraft.getInstance().gameMode.setLocalMode(GameType.CREATIVE); Platform.compatibility().displayChatMessage(yedelogo + " §eSet gamemode to creative!"); @@ -68,7 +68,7 @@ private void giveCreative() { private boolean isAlreadyInCreative() { //? if legacy { - //return Minecraft.getInstance().playerController.isInCreativeMode(); + //return Minecraft.getInstance().interactionManager.hasCreativeInventory(); //?} else return Minecraft.getInstance().player.isCreative(); } diff --git a/src/main/java/at/yedel/yedelmod/features/major/EasyAtlasVerdicts.java b/src/main/java/at/yedel/yedelmod/features/major/EasyAtlasVerdicts.java index 5f0a020..bf0deff 100644 --- a/src/main/java/at/yedel/yedelmod/features/major/EasyAtlasVerdicts.java +++ b/src/main/java/at/yedel/yedelmod/features/major/EasyAtlasVerdicts.java @@ -4,9 +4,6 @@ import at.yedel.yedelmod.config.YedelConfig; - - - import org.polyfrost.oneconfig.api.event.v1.events.ChatEvent; import org.polyfrost.oneconfig.api.event.v1.events.PacketEvent; import org.polyfrost.oneconfig.api.event.v1.events.WorldEvent; @@ -16,10 +13,11 @@ import org.polyfrost.oneconfig.utils.v1.Multithreading; import net.minecraft.client.Minecraft; //? if legacy { -/*import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.inventory.GuiContainer; +/*import net.minecraft.client.entity.living.player.LocalClientPlayerEntity; +import net.minecraft.client.gui.screen.game.inventory.InventoryMenuScreen; import net.minecraft.item.ItemStack; -import net.minecraft.network.play.server.S2FPacketSetSlot; +import net.minecraft.network.packet.s2c.play.InventoryMenuSlotContentS2CPacket; +import net.minecraft.network.packet.s2c.play.SelectSlotS2CPacket; import at.yedel.yedelmod.mixins.legacy.InvokerMinecraft; *///?} else { @@ -80,17 +78,18 @@ public void submitEvidentWithoutDoubtVerdict() { } } private void submitVerdict(String name) { - //~ if modern 'EntityPlayerSP player = Minecraft.getMinecraft().thePlayer' -> 'LocalPlayer player = Minecraft.getInstance().player' + //~ if modern 'LocalClientPlayerEntity' -> 'LocalPlayer' LocalPlayer player = Minecraft.getInstance().player; if (inAtlas && player != null) { Platform.compatibility().displayChatMessage(yedelogo + " §eSubmitting an Atlas verdict for \"" + name + "\"..."); - //~ if modern 'player.inventory.currentItem = 7' -> 'player.getInventory().setSelectedSlot(7)' + // damn this would be easy with kotlin + //~ if modern 'player.inventory.selectedSlot = 7' -> 'player.getInventory().setSelectedSlot(7)' player.getInventory().setSelectedSlot(7); Multithreading.schedule(() -> { if (Platform.screen().current() == null) { verdict = name; //? if legacy - //((InvokerMinecraft) Minecraft.getInstance()).yedelmod$rightClickMouse(); + //((InvokerMinecraft) Minecraft.getInstance()).yedelmod$doUse(); //? else Minecraft.getInstance().gameMode.useItem(Minecraft.getInstance().player, InteractionHand.MAIN_HAND); } @@ -100,11 +99,11 @@ private void submitVerdict(String name) { @Subscribe public void reallyClickAtlasVerdict(PacketEvent.Receive event) { - //~ if modern 'S2FPacketSetSlot' -> 'ClientboundContainerSetSlotPacket' + //~ if modern 'InventoryMenuSlotContentS2CPacket' -> 'ClientboundContainerSetSlotPacket' if (inAtlas && event.getPacket() instanceof ClientboundContainerSetSlotPacket) { //? if legacy { - /*S2FPacketSetSlot packet = (S2FPacketSetSlot) event.getPacket(); - ItemStack item = packet.m_64707080(); + /*InventoryMenuSlotContentS2CPacket packet = (InventoryMenuSlotContentS2CPacket) event.getPacket(); + ItemStack item = packet.getItem(); if (item == null) return; String itemName = Platform.i18n().getUnformattedText(item.getDisplayName()); *///?} else { @@ -119,9 +118,9 @@ public void reallyClickAtlasVerdict(PacketEvent.Receive event) { Multithreading.schedule(() -> { Minecraft.getInstance().schedule(() -> { //? if legacy { - /*if (Minecraft.getInstance().currentScreen instanceof GuiContainer) { - int windowId = ((GuiContainer) Minecraft.getInstance().currentScreen).inventorySlots.windowId; - Minecraft.getInstance().playerController.windowClick(windowId, packet.m_40505239(), 0, 0, Minecraft.getInstance().thePlayer); + /*if (Minecraft.getInstance().screen instanceof InventoryMenuScreen) { + int windowId = ((InventoryMenuScreen) Minecraft.getInstance().screen).menu.networkId; + Minecraft.getInstance().interactionManager.clickSlot(windowId, packet.getSlotId(), 0, 0, Minecraft.getInstance().player); verdict = ""; } *///?} else { diff --git a/src/main/java/at/yedel/yedelmod/features/major/StrengthIndicators.java b/src/main/java/at/yedel/yedelmod/features/major/StrengthIndicators.java index 06c98bc..fbed373 100644 --- a/src/main/java/at/yedel/yedelmod/features/major/StrengthIndicators.java +++ b/src/main/java/at/yedel/yedelmod/features/major/StrengthIndicators.java @@ -6,6 +6,7 @@ import at.yedel.yedelmod.utils.NameLineEvent; import at.yedel.yedelmod.utils.NumberUtils; + import org.polyfrost.oneconfig.api.event.v1.events.TickEvent; import com.google.common.collect.ImmutableMap; import org.polyfrost.oneconfig.api.event.v1.events.ChatEvent; @@ -14,7 +15,7 @@ import net.hypixel.modapi.HypixelModAPI; import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket; //? if legacy { -//import net.minecraft.client.entity.AbstractClientPlayer; +//import net.minecraft.client.entity.living.player.ClientPlayerEntity; //?} else { import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.network.chat.Component; @@ -125,10 +126,10 @@ public void renderStrengthIndicators(NameLineEvent event) { && event.isPlayer() ) { //? if legacy - //AbstractClientPlayer player = event.getPlayer(); + //ClientPlayerEntity player = event.getPlayer(); //? else Player player = (Player) event.getEntity(); - //~ if modern 'isUser' -> 'isLocalPlayer' + //~ if modern 'isLocal' -> 'isLocalPlayer' if (!YedelConfig.getInstance().showSelfStrength && player.isLocalPlayer()) { return; } diff --git a/src/main/java/at/yedel/yedelmod/features/major/TNTTagFeatures.java b/src/main/java/at/yedel/yedelmod/features/major/TNTTagFeatures.java index 7d5a792..cc7d8d0 100644 --- a/src/main/java/at/yedel/yedelmod/features/major/TNTTagFeatures.java +++ b/src/main/java/at/yedel/yedelmod/features/major/TNTTagFeatures.java @@ -6,7 +6,6 @@ import at.yedel.yedelmod.utils.Constants; import at.yedel.yedelmod.utils.NameLineEvent; - import org.polyfrost.oneconfig.api.event.v1.events.ChatEvent; import org.polyfrost.oneconfig.api.event.v1.invoke.impl.Subscribe; @@ -17,9 +16,7 @@ import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket; import net.minecraft.client.Minecraft; //? if legacy { -/* -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.network.NetworkPlayerInfo; +/*import net.minecraft.client.network.PlayerInfo; import net.minecraft.entity.Entity; *///?} else { import net.minecraft.client.player.AbstractClientPlayer; @@ -82,7 +79,7 @@ private void handleLocationPacket(ClientboundLocationPacket packet) { public void onTNTTagJoin() { if (YedelConfig.getInstance().enabled && YedelConfig.getInstance().bountyHunting) { - //~ if modern 'thePlayer' -> 'getUser()' + //~ if modern '.player' -> '.getUser()' playerName = Minecraft.getInstance().getUser().getName(); dead = false; target = null; @@ -103,8 +100,9 @@ public void handleRoundStarted(ChatEvent.Receive event) { if (inTNTTag && event.getFullyUnformattedMessage().endsWith("has started!")) { players.clear(); //? if legacy { - /*for (NetworkPlayerInfo playerInfo : Minecraft.getInstance().getNetHandler().getPlayerInfoMap()) { - players.add(playerInfo.getGameProfile().getName()); + /*// look at me using the name 'playerInfo' before switching to feather + for (PlayerInfo playerInfo : Minecraft.getInstance().getNetworkHandler().getOnlinePlayers()) { + players.add(playerInfo.getProfile().getName()); } *///?} else { for (AbstractClientPlayer player : Minecraft.getInstance().level.players()) { diff --git a/src/main/java/at/yedel/yedelmod/features/ping/PingMethod.java b/src/main/java/at/yedel/yedelmod/features/ping/PingMethod.java index fd10b52..5dd9f6a 100644 --- a/src/main/java/at/yedel/yedelmod/features/ping/PingMethod.java +++ b/src/main/java/at/yedel/yedelmod/features/ping/PingMethod.java @@ -4,13 +4,14 @@ import at.yedel.yedelmod.utils.TextUtils; import net.minecraft.client.Minecraft; + import org.polyfrost.oneconfig.api.hypixel.v1.HypixelUtils; import net.hypixel.modapi.HypixelModAPI; import net.hypixel.modapi.packet.impl.serverbound.ServerboundPingPacket; //? if legacy { -/*import net.minecraft.network.play.client.C14PacketTabComplete; -import net.minecraft.network.play.client.C16PacketClientStatus; +/*import net.minecraft.network.packet.c2s.play.ClientStatusC2SPacket; +import net.minecraft.network.packet.c2s.play.CommandSuggestionsC2SPacket; *///?} else { import net.minecraft.network.protocol.game.ServerboundClientCommandPacket; import net.minecraft.network.protocol.game.ServerboundCommandSuggestionPacket; @@ -24,8 +25,8 @@ public enum PingMethod { //? if legacy { /*COMMAND_RESPONSE("Command", () -> TextUtils.sendChat("/" + TextUtils.randomUuid(8))), - TAB_PACKET("Tab", () -> Minecraft.getInstance().getNetHandler().addToSendQueue(new C14PacketTabComplete("#"))), - STATS_PACKET("Stats", () -> Minecraft.getInstance().getNetHandler().addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS))), + TAB_PACKET("Tab", () -> Minecraft.getInstance().getNetworkHandler().sendPacket(new CommandSuggestionsC2SPacket("#"))), + STATS_PACKET("Stats", () -> Minecraft.getInstance().getNetworkHandler().sendPacket(new ClientStatusC2SPacket(ClientStatusC2SPacket.Status.REQUEST_STATS))), HYPIXEL_PING("Hypixel", () -> { if (HypixelUtils.isHypixel()) { HypixelModAPI.getInstance().sendPacket(new ServerboundPingPacket()); @@ -38,7 +39,7 @@ public enum PingMethod { if (Minecraft.getInstance().isSingleplayer()) { throw new PingException("This method does not work in singleplayer!"); } - long ping = Minecraft.getInstance().getCurrentServerData().pingToServer; + long ping = Minecraft.getInstance().getCurrentServerEntry().ping; if (ping == 0) { throw new PingException("Ping is 0! This might have occured if you used Direct Connect."); } diff --git a/src/main/java/at/yedel/yedelmod/features/ping/PingResponse.java b/src/main/java/at/yedel/yedelmod/features/ping/PingResponse.java index d4da2ac..78c93cd 100644 --- a/src/main/java/at/yedel/yedelmod/features/ping/PingResponse.java +++ b/src/main/java/at/yedel/yedelmod/features/ping/PingResponse.java @@ -3,13 +3,14 @@ + import org.polyfrost.oneconfig.api.event.v1.events.PacketEvent; import net.hypixel.modapi.HypixelModAPI; import net.hypixel.modapi.error.ErrorReason; import net.hypixel.modapi.packet.impl.clientbound.ClientboundPingPacket; //? if legacy { -/*import net.minecraft.network.play.server.S37PacketStatistics; -import net.minecraft.network.play.server.S3APacketTabComplete; +/*import net.minecraft.network.packet.s2c.play.CommandSuggestionsS2CPacket; +import net.minecraft.network.packet.s2c.play.StatsS2CPacket; *///?} else { import net.minecraft.network.protocol.game.ClientboundAwardStatsPacket; import net.minecraft.network.protocol.game.ClientboundCommandSuggestionsPacket; @@ -44,7 +45,7 @@ public void handleCommandPingResponse(ChatEvent.Receive event) { @Subscribe public void handleStatsPingResponse(PacketEvent.Receive event) { - //~ if modern 'S37PacketStatistics' -> 'ClientboundAwardStatsPacket' + //~ if modern 'StatsS2CPacket' -> 'ClientboundAwardStatsPacket' if (event.getPacket() instanceof ClientboundAwardStatsPacket) { PingQueue.getInstance().post(PingMethod.STATS_PACKET); } @@ -52,7 +53,7 @@ public void handleStatsPingResponse(PacketEvent.Receive event) { @Subscribe public void handleTabPingResponse(PacketEvent.Receive event) { - //~ if modern 'S3APacketTabComplete' -> 'ClientboundCommandSuggestionsPacket' + //~ if modern 'CommandSuggestionsS2CPacket' -> 'ClientboundCommandSuggestionsPacket' if (event.getPacket() instanceof ClientboundCommandSuggestionsPacket) { PingQueue.getInstance().post(PingMethod.TAB_PACKET); } diff --git a/src/main/java/at/yedel/yedelmod/mixins/legacy/InvokerMinecraft.java b/src/main/java/at/yedel/yedelmod/mixins/legacy/InvokerMinecraft.java index 84269f0..56aa87a 100644 --- a/src/main/java/at/yedel/yedelmod/mixins/legacy/InvokerMinecraft.java +++ b/src/main/java/at/yedel/yedelmod/mixins/legacy/InvokerMinecraft.java @@ -11,6 +11,6 @@ @Mixin(Minecraft.class) public interface InvokerMinecraft { - @Invoker("rightClickMouse") - void yedelmod$rightClickMouse(); + @Invoker("doUse") + void yedelmod$doUse(); }*//*?}*/ \ No newline at end of file diff --git a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinLivingEntityRenderer.java b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinLivingEntityRenderer.java new file mode 100644 index 0000000..f07dbb1 --- /dev/null +++ b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinLivingEntityRenderer.java @@ -0,0 +1,56 @@ +/*? if legacy {*//* +package at.yedel.yedelmod.mixins.legacy; + + + +import at.yedel.yedelmod.utils.NameLineEvent; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.client.entity.living.player.ClientPlayerEntity; +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.LivingEntityRenderer; +import net.minecraft.entity.living.LivingEntity; +import org.polyfrost.oneconfig.api.event.v1.EventManager; +import net.minecraft.entity.Entity; +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; + + + +/^* + * Implements the {@link at.yedel.yedelmod.utils.NameLineEvent} via name rendering method SNEAKING. + ^/ +@Mixin(LivingEntityRenderer.class) +public abstract class MixinLivingEntityRenderer extends EntityRenderer { + @Shadow public abstract void renderNameTag(Entity par1, double par2, double par3, double par4); + + protected MixinLivingEntityRenderer(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher); + } + + // Might be wrong + @Unique + private static final double yedelmod$sneakHeightReduction = 0.25; + + /^* + * Injects after the sneaking name rendering code is done, constructing an event and calling the normal nametag rendering code anyways. + ^/ + @Inject(method = "renderNameTag(Lnet/minecraft/entity/living/LivingEntity;DDD)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/platform/GlStateManager;popMatrix()V", shift = At.Shift.AFTER)) + private void yedelmod$renderSneakingNameLines(LivingEntity entity, double x, double y, double z, CallbackInfo ci, @Local(name = "d") double distanceSq) { + if (!(entity instanceof ClientPlayerEntity player)) { + return; + } + NameLineEvent event = new NameLineEvent(NameLineEvent.NameRenderingMethod.SNEAKING, player, distanceSq); + EventManager.INSTANCE.post(event); + y -= yedelmod$sneakHeightReduction; + y += event.getVerticalAdjustment(); + for (String nameLine : event.getNameLines()) { + y += 9 * 1.15F * 0.02666667; + super.renderNameTag(player, x, y, z, nameLine, 0.02666667F, distanceSq); + } + } +}*//*?}*/ \ No newline at end of file diff --git a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinEntityPlayerSP.java b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinLocalClientPlayerEntity.java similarity index 66% rename from src/main/java/at/yedel/yedelmod/mixins/legacy/MixinEntityPlayerSP.java rename to src/main/java/at/yedel/yedelmod/mixins/legacy/MixinLocalClientPlayerEntity.java index 93ee954..8d54fff 100644 --- a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinEntityPlayerSP.java +++ b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinLocalClientPlayerEntity.java @@ -4,16 +4,16 @@ import at.yedel.yedelmod.features.RandomPlaceholder; -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.entity.living.player.LocalClientPlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -@Mixin(EntityPlayerSP.class) -public abstract class MixinEntityPlayerSP { - @ModifyVariable(method = "sendChatMessage", at = @At("HEAD"), ordinal = 0, argsOnly = true) +@Mixin(LocalClientPlayerEntity.class) +public abstract class MixinLocalClientPlayerEntity { + @ModifyVariable(method = "sendChat", at = @At("HEAD"), ordinal = 0, argsOnly = true) private String yedelmod$randomPlaceholder(String original) { if (RandomPlaceholder.getInstance().should()) { return RandomPlaceholder.getInstance().replace(original); diff --git a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinEntityPlayer.java b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinPlayerEntity.java similarity index 72% rename from src/main/java/at/yedel/yedelmod/mixins/legacy/MixinEntityPlayer.java rename to src/main/java/at/yedel/yedelmod/mixins/legacy/MixinPlayerEntity.java index 3227196..d17d65f 100644 --- a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinEntityPlayer.java +++ b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinPlayerEntity.java @@ -5,7 +5,7 @@ import at.yedel.yedelmod.features.CustomHitParticles; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.living.player.PlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -13,9 +13,9 @@ -@Mixin(EntityPlayer.class) -public abstract class MixinEntityPlayer { - @Inject(method = "attackTargetEntityWithCurrentItem", at = @At("HEAD")) +@Mixin(PlayerEntity.class) +public abstract class MixinPlayerEntity { + @Inject(method = "attack", at = @At("HEAD")) private void yedelmod$onAttackEntity(Entity entity, CallbackInfo ci) { CustomHitParticles.getInstance().handleAttack(entity); } diff --git a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinPlayerRenderer.java b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinPlayerRenderer.java new file mode 100644 index 0000000..4e9bbd9 --- /dev/null +++ b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinPlayerRenderer.java @@ -0,0 +1,43 @@ +/*? if legacy {*//* +package at.yedel.yedelmod.mixins.legacy; + + + +import at.yedel.yedelmod.utils.NameLineEvent; +import net.minecraft.client.entity.living.player.ClientPlayerEntity; +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.LivingEntityRenderer; +import net.minecraft.client.render.entity.PlayerRenderer; +import net.minecraft.client.render.model.Model; +import org.polyfrost.oneconfig.api.event.v1.EventManager; +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; + + + +/^* + * Implements the {@link at.yedel.yedelmod.utils.NameLineEvent} via name rendering method STANDARD. + ^/ +@Mixin(PlayerRenderer.class) +public abstract class MixinPlayerRenderer extends LivingEntityRenderer { + public MixinPlayerRenderer(EntityRenderDispatcher entityRenderDispatcher, Model model, float shadow) { + super(entityRenderDispatcher, model, shadow); + } + + /^* + * Injects after the score objective and player name labels render, calling the vanilla nametag rendering method for each name line. + * This respects the local y variable in the method, and we add on to it with vertical adjustments and the standard modifier for each line. + ^/ + @Inject(method = "renderNameTag(Lnet/minecraft/client/entity/living/player/ClientPlayerEntity;DDDLjava/lang/String;FD)V", at = @At("TAIL")) + private void yedelmod$renderNameLines(ClientPlayerEntity entity, double dx, double dy, double dz, String name, float tickDelta, double squaredDistance, CallbackInfo ci) { + NameLineEvent event = new NameLineEvent(NameLineEvent.NameRenderingMethod.STANDARD, entity, squaredDistance); + EventManager.INSTANCE.post(event); + dy += event.getVerticalAdjustment(); + for (String nameLine : event.getNameLines()) { + dy += 9 * 1.15F * 0.02666667; + super.renderNameTag(entity, dx, dy, dz, nameLine, 0.02666667F, squaredDistance); + } + } +}*//*?}*/ \ No newline at end of file diff --git a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRenderPlayer.java b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRenderPlayer.java deleted file mode 100644 index a3eb7a0..0000000 --- a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRenderPlayer.java +++ /dev/null @@ -1,43 +0,0 @@ -/*? if legacy {*//* -package at.yedel.yedelmod.mixins.legacy; - - - -import at.yedel.yedelmod.utils.NameLineEvent; -import org.polyfrost.oneconfig.api.event.v1.EventManager; -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.client.renderer.entity.RendererLivingEntity; -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; - - - -/^* - * Implements the {@link at.yedel.yedelmod.utils.NameLineEvent} via name rendering method STANDARD. - ^/ -@Mixin(RenderPlayer.class) -public abstract class MixinRenderPlayer extends RendererLivingEntity { - public MixinRenderPlayer(RenderManager renderManagerIn, ModelBase modelBaseIn, float shadowSizeIn) { - super(renderManagerIn, modelBaseIn, shadowSizeIn); - } - - /^* - * Injects after the score objective and player name labels render, calling {@link net.minecraft.client.renderer.entity.RendererLivingEntity#renderOffsetLivingLabel} for each name line. - * This respects the local y variable in the method, and we add on to it with vertical adjustments and the standard modifier for each line. - ^/ - @Inject(method = "renderOffsetLivingLabel(Lnet/minecraft/client/entity/AbstractClientPlayer;DDDLjava/lang/String;FD)V", at = @At("TAIL")) - private void yedelmod$renderNameLines(AbstractClientPlayer player, double x, double y, double z, String str, float oneDividedByThirtySevenPointFive, double distanceSquared, CallbackInfo ci) { - NameLineEvent event = new NameLineEvent(NameLineEvent.NameRenderingMethod.STANDARD, player, distanceSquared); - EventManager.INSTANCE.post(event); - y += event.getVerticalAdjustment(); - for (String nameLine : event.getNameLines()) { - y += 9 * 1.15F * 0.02666667; - super.renderOffsetLivingLabel(player, x, y, z, nameLine, 0.02666667F, distanceSquared); - } - } -}*//*?}*/ \ No newline at end of file diff --git a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRendererLivingEntity.java b/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRendererLivingEntity.java deleted file mode 100644 index 6b960f0..0000000 --- a/src/main/java/at/yedel/yedelmod/mixins/legacy/MixinRendererLivingEntity.java +++ /dev/null @@ -1,58 +0,0 @@ -/*? if legacy {*//* -package at.yedel.yedelmod.mixins.legacy; - - - -import at.yedel.yedelmod.config.YedelConfig; -import at.yedel.yedelmod.utils.NameLineEvent; -import com.llamalad7.mixinextras.sugar.Local; -import org.polyfrost.oneconfig.api.event.v1.EventManager; -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.RendererLivingEntity; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import org.spongepowered.asm.mixin.Mixin; -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.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; - - - -/^* - * Implements the {@link at.yedel.yedelmod.utils.NameLineEvent} via name rendering method SNEAKING. - ^/ -@Mixin(RendererLivingEntity.class) -public abstract class MixinRendererLivingEntity extends Render { - protected MixinRendererLivingEntity(RenderManager renderManager) { - super(renderManager); - } - - // Might be wrong - @Unique - private static final double yedelmod$sneakHeightReduction = 0.25; - - - /^* - * Injects after the sneaking name rendering code is done, constructing an event and calling {@link net.minecraft.client.renderer.entity.Render#renderOffsetLivingLabel} anyways. - ^/ - @Inject(method = "renderName(Lnet/minecraft/entity/EntityLivingBase;DDD)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;popMatrix()V", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD) - private void yedelmod$renderSneakingNameLines(EntityLivingBase entity, double x, double y, double z, CallbackInfo ci, @Local(name = "d") double distanceSq) { - if (!(entity instanceof AbstractClientPlayer)) { - return; - } - AbstractClientPlayer player = (AbstractClientPlayer) entity; - NameLineEvent event = new NameLineEvent(NameLineEvent.NameRenderingMethod.SNEAKING, player, distanceSq); - EventManager.INSTANCE.post(event); - y -= yedelmod$sneakHeightReduction; - y += event.getVerticalAdjustment(); - for (String nameLine : event.getNameLines()) { - y += 9 * 1.15F * 0.02666667; - super.renderOffsetLivingLabel(player, x, y, z, nameLine, 0.02666667F, distanceSq); - } - } -}*//*?}*/ \ No newline at end of file diff --git a/src/main/java/at/yedel/yedelmod/utils/Constants.java b/src/main/java/at/yedel/yedelmod/utils/Constants.java index 959b367..9c4e752 100644 --- a/src/main/java/at/yedel/yedelmod/utils/Constants.java +++ b/src/main/java/at/yedel/yedelmod/utils/Constants.java @@ -12,22 +12,17 @@ import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.sounds.SoundEvents; //?} else { -/*import net.minecraft.client.audio.PositionedSoundRecord; -import net.minecraft.util.ResourceLocation; +/*import net.minecraft.client.sound.instance.SimpleSoundInstance; +import net.minecraft.resource.Identifier; *///?} -import org.polyfrost.compose.render.PolyColor; public class Constants { //? if legacy - //public static final ResourceLocation PLING_SOUND_LOCATION = new ResourceLocation("random.successful_hit"); - public static final PolyColor EMPTY_COLOR = PolyColor.Companion.getTRANSPARENT(); + //public static final Identifier PLING_SOUND_LOCATION = new Identifier("random.successful_hit"); public static void playPingSound(float volume, float pitch) { - //? if legacy { - //Minecraft.getInstance().getSoundHandler().playSound(PositionedSoundRecord.create(PLING_SOUND_LOCATION, pitch)); - //?} else - Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.EXPERIENCE_ORB_PICKUP, pitch, volume)); + Minecraft.getInstance().getSoundManager().play(/*? if modern {*/SimpleSoundInstance.forUI(SoundEvents.EXPERIENCE_ORB_PICKUP, pitch, volume)/*? else {*//*SimpleSoundInstance.of(PLING_SOUND_LOCATION, pitch)*//*?}*/); } } diff --git a/src/main/java/at/yedel/yedelmod/utils/NameLineEvent.java b/src/main/java/at/yedel/yedelmod/utils/NameLineEvent.java index c8b9686..2623de7 100644 --- a/src/main/java/at/yedel/yedelmod/utils/NameLineEvent.java +++ b/src/main/java/at/yedel/yedelmod/utils/NameLineEvent.java @@ -3,12 +3,13 @@ //? if legacy { -//import net.minecraft.client.entity.AbstractClientPlayer; +//import net.minecraft.client.entity.living.player.ClientPlayerEntity; //?} else { import net.minecraft.network.chat.Component; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; //?} + import org.polyfrost.oneconfig.api.event.v1.events.Event; import java.util.ArrayList; @@ -19,7 +20,7 @@ public class NameLineEvent implements Event { //? if legacy { /*private final NameRenderingMethod method; - private final AbstractClientPlayer player; + private final ClientPlayerEntity player; *///?} else { private final Entity entity; private final boolean isPlayer; @@ -29,7 +30,7 @@ public class NameLineEvent implements Event { private double verticalAdjustment = 0; //? if legacy { - /*public NameLineEvent(NameRenderingMethod method, AbstractClientPlayer player, double distanceSquared) { + /*public NameLineEvent(NameRenderingMethod method, ClientPlayerEntity player, double distanceSquared) { this.method = method; this.player = player; this.distanceSquared = distanceSquared; @@ -48,7 +49,7 @@ public NameLineEvent(Entity entity, double distanceSquared) { return method; } - public AbstractClientPlayer getPlayer() { + public ClientPlayerEntity getPlayer() { return player; } *///?} else { diff --git a/src/main/java/at/yedel/yedelmod/utils/TextUtils.java b/src/main/java/at/yedel/yedelmod/utils/TextUtils.java index 847657d..cde6fbe 100644 --- a/src/main/java/at/yedel/yedelmod/utils/TextUtils.java +++ b/src/main/java/at/yedel/yedelmod/utils/TextUtils.java @@ -13,11 +13,8 @@ public class TextUtils { private static final Pattern ampersandFormattingPattern = Pattern.compile("&([0123456789abcdefklnor])"); public static void sendChat(String message) { - //? if legacy { - //Minecraft.getInstance().thePlayer.sendChatMessage(message); - //?} else { + //~ if legacy 'connection.sendChat' -> 'sendChat' Minecraft.getInstance().player.connection.sendChat(message); - //?} } public static String replaceAmpersand(String string) { diff --git a/src/main/resources/mixins.legacy.yedelmod.json b/src/main/resources/mixins.legacy.yedelmod.json index 0cdf612..00b4031 100644 --- a/src/main/resources/mixins.legacy.yedelmod.json +++ b/src/main/resources/mixins.legacy.yedelmod.json @@ -4,10 +4,10 @@ "minVersion": "${mixinMin}", "client": [ "InvokerMinecraft", - "MixinEntityPlayer", + "MixinPlayerEntity", "MixinEntityPlayerSP", - "MixinRendererLivingEntity", - "MixinRenderPlayer" + "MixinLivingEntityRenderer", + "MixinPlayerRenderer" ], "verbose": true } \ No newline at end of file diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index e6773b0..0852100 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,3 +1,4 @@ +import com.github.javaparser.printer.concretesyntaxmodel.CsmElement.string import kotlin.reflect.KProperty plugins { @@ -20,8 +21,7 @@ stonecutter parameters { replacements { string(modern) { - replace("Minecraft.getMinecraft().addScheduledTask", "Minecraft.getInstance().schedule") - replace("Minecraft.getMinecraft()", "Minecraft.getInstance()") + replace("Minecraft.getInstance().executeTask", "Minecraft.getInstance().schedule") } } diff --git a/stonecutter.properties.toml b/stonecutter.properties.toml index 28e228e..079280c 100644 --- a/stonecutter.properties.toml +++ b/stonecutter.properties.toml @@ -17,6 +17,7 @@ versions.modmenu = "18.0.0" ["1.8.9-fabric"] versioning = "single" +versions.feather = "2" versions.osl = "0.20.3" versions.oslcore = "0.9.0+mc14w27a-mc1.14.4" versions.oslentrypoints = "0.6.1+mc13w16a-mc1.14.4" From 6c1edb03ba55afe6330c2a161200f78c2179c88a Mon Sep 17 00:00:00 2001 From: Yedelo <158670400+yedelo@users.noreply.github.com> Date: Sun, 18 Oct 2026 17:07:44 -0400 Subject: [PATCH 3/3] Reset limbo server state on world unload Signed-off-by: Yedelo <158670400+yedelo@users.noreply.github.com> --- src/main/java/at/yedel/yedelmod/features/LimboCreative.java | 3 +++ src/main/resources/mixins.legacy.yedelmod.json | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/yedel/yedelmod/features/LimboCreative.java b/src/main/java/at/yedel/yedelmod/features/LimboCreative.java index cd6fece..6a577ad 100644 --- a/src/main/java/at/yedel/yedelmod/features/LimboCreative.java +++ b/src/main/java/at/yedel/yedelmod/features/LimboCreative.java @@ -3,6 +3,8 @@ import at.yedel.yedelmod.config.YedelConfig; +import org.polyfrost.oneconfig.api.event.v1.EventManager; +import org.polyfrost.oneconfig.api.event.v1.events.WorldEvent; import org.polyfrost.oneconfig.api.platform.v1.Platform; import net.hypixel.modapi.HypixelModAPI; import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket; @@ -35,6 +37,7 @@ private boolean isInLimbo() { private LimboCreative() { HypixelModAPI.getInstance().registerHandler(ClientboundLocationPacket.class, this::handleLocationPacket); + EventManager.register(WorldEvent.Unload.class, (event) -> inLimboServer = false); } private void handleLocationPacket(ClientboundLocationPacket packet) { diff --git a/src/main/resources/mixins.legacy.yedelmod.json b/src/main/resources/mixins.legacy.yedelmod.json index 00b4031..1089eab 100644 --- a/src/main/resources/mixins.legacy.yedelmod.json +++ b/src/main/resources/mixins.legacy.yedelmod.json @@ -4,9 +4,9 @@ "minVersion": "${mixinMin}", "client": [ "InvokerMinecraft", - "MixinPlayerEntity", - "MixinEntityPlayerSP", "MixinLivingEntityRenderer", + "MixinLocalClientPlayerEntity", + "MixinPlayerEntity", "MixinPlayerRenderer" ], "verbose": true