From b7f31c768d06a359cd7f72a94526cb1e1769260d Mon Sep 17 00:00:00 2001 From: Exterminate Date: Sat, 13 Dec 2025 13:47:06 +1100 Subject: [PATCH 1/2] Update for 1.21.11 --- build.gradle | 4 +- common/build.gradle | 4 +- common/src/test/java/CodeTesting.java | 12 - {fabric-1.21.9 => fabric-1.21.11}/.gitignore | 0 .../build.gradle | 8 +- .../gradle.properties | 9 +- .../fabric_1_21_11/EventHandler.java | 124 +++++ .../fabric_1_21_11/FunctionCompatibility.java | 457 ++++++++++++++++++ .../fabric_1_21_11}/MPKGuiScreen.java | 44 +- .../compatibility/fabric_1_21_11}/MPKMod.java | 33 +- .../mixin/KeyMappingAccessor.java | 12 + .../mixin/KeyboardHandlerMixin.java | 19 + .../mixin/LevelRendererMixin.java | 23 + .../fabric_1_21_11/mixin/MinecraftMixin.java | 10 +- .../mixin/MouseHandlerMixin.java | 36 +- .../network/DataCustomPayload.java | 36 ++ .../src/main/resources/assets/mpkmod/icon.png | 0 .../resources/assets/mpkmod/lang/en_us.json | 0 .../resources/assets/mpkmod/lang/pl_pl.json | 0 .../src/main/resources/fabric.mod.json | 11 +- .../src/main/resources/mpkmod.mixins.json | 12 +- .../fabric_1_21_9/EventHandler.java | 124 ----- .../fabric_1_21_9/FunctionCompatibility.java | 410 ---------------- .../mixin/GameRendererMixin.java | 23 - .../mixin/KeyBindingAccessor.java | 12 - .../fabric_1_21_9/mixin/KeyboardMixin.java | 19 - .../network/DataCustomPayload.java | 36 -- .../src/main/resources/assets/mpkmod/icon.png | Bin 11576 -> 0 bytes .../resources/assets/mpkmod/lang/pl_pl.json | 8 - forge-1.12.2/build.gradle | 4 +- forge-1.12.2/src/main/resources/mcmod.info | 2 +- forge-1.8.9/build.gradle | 4 +- forge-1.8.9/src/main/resources/mcmod.info | 2 +- gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 2 +- 36 files changed, 766 insertions(+), 740 deletions(-) delete mode 100644 common/src/test/java/CodeTesting.java rename {fabric-1.21.9 => fabric-1.21.11}/.gitignore (100%) rename {fabric-1.21.9 => fabric-1.21.11}/build.gradle (82%) rename {fabric-1.21.9 => fabric-1.21.11}/gradle.properties (56%) create mode 100644 fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java create mode 100644 fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java rename {fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9 => fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11}/MPKGuiScreen.java (68%) rename {fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9 => fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11}/MPKMod.java (75%) create mode 100644 fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyMappingAccessor.java create mode 100644 fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java create mode 100644 fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/LevelRendererMixin.java rename fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MinecraftClientMixin.java => fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MinecraftMixin.java (57%) rename fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MouseMixin.java => fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java (61%) create mode 100644 fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/network/DataCustomPayload.java create mode 100644 fabric-1.21.11/src/main/resources/assets/mpkmod/icon.png rename {fabric-1.21.9 => fabric-1.21.11}/src/main/resources/assets/mpkmod/lang/en_us.json (100%) create mode 100644 fabric-1.21.11/src/main/resources/assets/mpkmod/lang/pl_pl.json rename {fabric-1.21.9 => fabric-1.21.11}/src/main/resources/fabric.mod.json (74%) rename {fabric-1.21.9 => fabric-1.21.11}/src/main/resources/mpkmod.mixins.json (62%) delete mode 100644 fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/EventHandler.java delete mode 100644 fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/FunctionCompatibility.java delete mode 100644 fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/GameRendererMixin.java delete mode 100644 fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyBindingAccessor.java delete mode 100644 fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyboardMixin.java delete mode 100644 fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/network/DataCustomPayload.java delete mode 100644 fabric-1.21.9/src/main/resources/assets/mpkmod/icon.png delete mode 100644 fabric-1.21.9/src/main/resources/assets/mpkmod/lang/pl_pl.json diff --git a/build.gradle b/build.gradle index 2a1bb796..e44a78a5 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,9 @@ configure( group = $group version = $version - archivesBaseName = $modBaseName + tasks.withType(Jar).configureEach { + archiveBaseName.set("${$modBaseName}") + } configurations { library diff --git a/common/build.gradle b/common/build.gradle index d8fd35fa..163f12a8 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -2,7 +2,9 @@ apply plugin: 'maven-publish' group = $group version = $version -archivesBaseName = $commonBaseName +tasks.withType(Jar).configureEach { + archiveBaseName.set("${$commonBaseName}") +} dependencies { compileOnly 'org.apache.logging.log4j:log4j-api:2.0-beta9' diff --git a/common/src/test/java/CodeTesting.java b/common/src/test/java/CodeTesting.java deleted file mode 100644 index 141f8f1f..00000000 --- a/common/src/test/java/CodeTesting.java +++ /dev/null @@ -1,12 +0,0 @@ -import org.junit.jupiter.api.Test; - - -public class CodeTesting { - public static boolean test = false; - - @Test - public void testAdd() { - - } - -} diff --git a/fabric-1.21.9/.gitignore b/fabric-1.21.11/.gitignore similarity index 100% rename from fabric-1.21.9/.gitignore rename to fabric-1.21.11/.gitignore diff --git a/fabric-1.21.9/build.gradle b/fabric-1.21.11/build.gradle similarity index 82% rename from fabric-1.21.9/build.gradle rename to fabric-1.21.11/build.gradle index dd3a297c..08bd95dc 100644 --- a/fabric-1.21.9/build.gradle +++ b/fabric-1.21.11/build.gradle @@ -1,14 +1,14 @@ plugins { - id 'fabric-loom' version "1.11-SNAPSHOT" + id 'fabric-loom' version "1.14-SNAPSHOT" - id "me.modmuss50.mod-publish-plugin" version "0.8.4" + id "me.modmuss50.mod-publish-plugin" version "1.1.0" } loom.runs.client.runDir = "../runs/run" dependencies { 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}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" @@ -34,7 +34,7 @@ publishMods { modrinth { projectId = "412tAvWq" accessToken = providers.environmentVariable("MODRINTH_TOKEN") - minecraftVersions.add("1.21.9") + minecraftVersions.add("1.21.11") } /*github { repository = "MPKMod/MPKMod2" diff --git a/fabric-1.21.9/gradle.properties b/fabric-1.21.11/gradle.properties similarity index 56% rename from fabric-1.21.9/gradle.properties rename to fabric-1.21.11/gradle.properties index 1b215788..67a97799 100644 --- a/fabric-1.21.9/gradle.properties +++ b/fabric-1.21.11/gradle.properties @@ -1,14 +1,13 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx3G org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21.9 -yarn_mappings=1.21.9+build.1 -loader_version=0.17.2 +minecraft_version=1.21.11 +loader_version=0.18.2 # Fabric API -fabric_version=0.133.14+1.21.9 +fabric_version=0.139.5+1.21.11 jdkVersion=21 diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java new file mode 100644 index 00000000..7fbc949e --- /dev/null +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java @@ -0,0 +1,124 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11; + +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.vertex.PoseStack; +import io.github.kurrycat.mpkmod.compatibility.API; +import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin.KeyMappingAccessor; +import io.github.kurrycat.mpkmod.ticks.ButtonMS; +import io.github.kurrycat.mpkmod.ticks.ButtonMSList; +import io.github.kurrycat.mpkmod.util.BoundingBox3D; +import io.github.kurrycat.mpkmod.util.Vector3D; +import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; +import net.minecraft.client.Options; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.util.Util; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +public class EventHandler { + private static final ButtonMSList timeQueue = new ButtonMSList(); + + /** + * @param keyInput The Minecraft {@link KeyEvent} object. + * @param action The action, where 0 = unpressed, 1 = pressed, 2 = held. + */ + public void onKey(KeyEvent keyInput, int action) { + Options options = Minecraft.getInstance().options; + long eventNanos = Util.getNanos(); + + InputConstants.Key inputKey = InputConstants.getKey(new KeyEvent(keyInput.key(), keyInput.scancode(), keyInput.modifiers())); + + int[] keys = { + ((KeyMappingAccessor) options.keyUp).getKey().getValue(), + ((KeyMappingAccessor) options.keyLeft).getKey().getValue(), + ((KeyMappingAccessor) options.keyDown).getKey().getValue(), + ((KeyMappingAccessor) options.keyRight).getKey().getValue(), + ((KeyMappingAccessor) options.keySprint).getKey().getValue(), + ((KeyMappingAccessor) options.keyShift).getKey().getValue(), + ((KeyMappingAccessor) options.keyJump).getKey().getValue() + }; + + for (int i = 0; i < keys.length; i++) { + if (keyInput.key() == keys[i]) { + timeQueue.add(ButtonMS.of(ButtonMS.Button.values()[i], eventNanos, action == 1)); + } + } + + if (action == 1) { + FunctionCompatibility.pressedButtons.add(inputKey.getValue()); + } else if (action == 0) { + FunctionCompatibility.pressedButtons.remove(inputKey.getValue()); + } + + API.Events.onKeyInput(keyInput.key(), inputKey.getDisplayName().getString(), action == 1); + + MPKMod.keyBindingMap.forEach((id, keyBinding) -> { + if (keyBinding.isDown()) { + API.Events.onKeybind(id); + } + }); + } + + public void onInGameOverlayRender(GuiGraphics drawContext, DeltaTracker renderTickCounter) { + drawContext.pose().pushMatrix(); + API.getFunctionHolder().drawContext = drawContext; + API.Events.onRenderOverlay(); + drawContext.pose().popMatrix(); + } + + public void onRenderWorldOverlay(PoseStack matrixStack, float tickDelta) { + MPKMod.INSTANCE.matrixStack = matrixStack; + matrixStack.pushPose(); + Vec3 pos = Minecraft.getInstance().gameRenderer.getMainCamera().position().reverse(); + MPKMod.INSTANCE.matrixStack.translate(pos); + API.Events.onRenderWorldOverlay(tickDelta); + matrixStack.popPose(); + } + + public void onClientTickStart(Minecraft mc) { + if (mc.isPaused() || mc.level == null) return; + API.Events.onTickStart(); + } + + public void onClientTickEnd(Minecraft mc) { + if (mc.isPaused() || mc.level == null) return; + LocalPlayer mcPlayer = mc.player; + + if (mcPlayer != null) { + AABB playerBB = mcPlayer.getBoundingBox(); + new Player() + .setPos(new Vector3D(mcPlayer.getX(), mcPlayer.getY(), mcPlayer.getZ())) + .setLastPos(new Vector3D(mcPlayer.xo, mcPlayer.yo, mcPlayer.zo)) + .setMotion(new Vector3D(mcPlayer.getDeltaMovement().x, mcPlayer.getDeltaMovement().y, mcPlayer.getDeltaMovement().z)) + .setRotation(mcPlayer.getRotationVector().y, mcPlayer.getRotationVector().x) + .setOnGround(mcPlayer.onGround()) + .setSprinting(mcPlayer.isSprinting()) + .setBoundingBox(new BoundingBox3D( + new Vector3D(playerBB.minX, playerBB.minY, playerBB.minZ), + new Vector3D(playerBB.maxX, playerBB.maxY, playerBB.maxZ) + )) + .setFlying(mcPlayer.getAbilities().flying) + .constructKeyInput() + .setKeyMSList(timeQueue) + .buildAndSave(); + timeQueue.clear(); + } + + API.Events.onTickEnd(); + } + + + public void onServerConnect(ClientPacketListener clientPlayNetworkHandler, PacketSender packetSender, Minecraft minecraftClient) { + API.Events.onServerConnect(clientPlayNetworkHandler.getConnection().isMemoryConnection()); + } + + public void onServerDisconnect(ClientPacketListener clientPlayNetworkHandler, Minecraft minecraftClient) { + API.Events.onServerDisconnect(); + } +} diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java new file mode 100644 index 00000000..4b596a79 --- /dev/null +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java @@ -0,0 +1,457 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11; + +import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import io.github.kurrycat.mpkmod.compatibility.MCClasses.*; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin.KeyMappingAccessor; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.network.DataCustomPayload; +import io.github.kurrycat.mpkmod.gui.MPKGuiScreen; +import io.github.kurrycat.mpkmod.util.BoundingBox3D; +import io.github.kurrycat.mpkmod.util.Debug; +import io.github.kurrycat.mpkmod.util.Vector2D; +import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Options; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.navigation.ScreenRectangle; +import net.minecraft.client.gui.render.TextureSetup; +import net.minecraft.client.gui.render.state.GuiElementRenderState; +import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.renderer.ShapeRenderer; +import net.minecraft.client.renderer.rendertype.RenderTypes; +import net.minecraft.client.resources.sounds.SimpleSoundInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.Mth; +import net.minecraft.util.Util; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +import java.awt.*; +import java.util.*; + +public class FunctionCompatibility implements FunctionHolder, + SoundManager.Interface, + WorldInteraction.Interface, + Renderer3D.Interface, + Renderer2D.Interface, + FontRenderer.Interface, + Minecraft.Interface, + Keyboard.Interface, + Profiler.Interface { + public static final Set pressedButtons = new HashSet<>(); + public GuiGraphics drawContext = null; + + public void playButtonSound() { + net.minecraft.client.Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + } + + public ArrayList getCollisionBoundingBoxes(Vector3D blockPosVector) { + final Vector3D blockPosVec = blockPosVector.copy(); + BlockPos blockPos = new BlockPos(blockPosVec.getXI(), blockPosVec.getYI(), blockPosVec.getZI()); + if (net.minecraft.client.Minecraft.getInstance().level == null) return null; + ArrayList boundingBoxes = new ArrayList<>(); + BlockState blockState = net.minecraft.client.Minecraft.getInstance().level.getBlockState(blockPos); + + blockState.getCollisionShape(net.minecraft.client.Minecraft.getInstance().level, blockPos).optimize().forAllBoxes( + ((minX, minY, minZ, maxX, maxY, maxZ) -> boundingBoxes.add( + new BoundingBox3D(new Vector3D(minX, minY, minZ), new Vector3D(maxX, maxY, maxZ)).move(blockPosVec) + )) + ); + + return boundingBoxes; + } + + public Vector3D getLookingAt() { + if (net.minecraft.client.Minecraft.getInstance().getCameraEntity() == null) + return null; + + HitResult hitResult = net.minecraft.client.Minecraft.getInstance().getCameraEntity().pick(20, 0, false); + if (hitResult instanceof BlockHitResult) { + BlockPos blockPos = ((BlockHitResult) hitResult).getBlockPos(); + return new Vector3D(blockPos.getX(), blockPos.getY(), blockPos.getZ()); + } + + return null; + } + + @Override + public String getBlockName(Vector3D blockPos) { + BlockPos blockpos = new BlockPos(blockPos.getXI(), blockPos.getYI(), blockPos.getZI()); + if (net.minecraft.client.Minecraft.getInstance().level == null) + return null; + + return BuiltInRegistries.BLOCK.getResourceKey( + net.minecraft.client.Minecraft.getInstance().level.getBlockState(blockpos).getBlock() + ).get().identifier().toString(); + } + + @Override + public HashMap getBlockProperties(Vector3D blockPos) { + HashMap properties = new HashMap<>(); + if (net.minecraft.client.Minecraft.getInstance().level == null) + return properties; + + BlockPos blockpos = new BlockPos(blockPos.getXI(), blockPos.getYI(), blockPos.getZI()); + BlockState blockState = net.minecraft.client.Minecraft.getInstance().level.getBlockState(blockpos); + blockState.getValues().forEach((key, value) -> + properties.put(key.getName(), Util.getPropertyName(key, value)) + ); + return null; + } + + /** + * Is called in {@link WorldInteraction.Interface WorldInteraction.Interface} + */ + public String getLookingAtBlock() { + if (net.minecraft.client.Minecraft.getInstance().getCameraEntity() == null) + return null; + + HitResult hitResult = net.minecraft.client.Minecraft.getInstance().getCameraEntity().pick(20, 0, false); + if (hitResult.getType() == HitResult.Type.BLOCK && net.minecraft.client.Minecraft.getInstance().level != null) { + return BuiltInRegistries.BLOCK.getResourceKey( + net.minecraft.client.Minecraft.getInstance().level.getBlockState(((BlockHitResult) hitResult).getBlockPos()).getBlock() + ).get().identifier().toLanguageKey(); + } + return null; + } + + public void drawBox(BoundingBox3D bb, Color color, float partialTicks) { + var ms = MPKMod.INSTANCE.matrixStack; + ms.pushPose(); + ms.translate((float) bb.minX(), (float) bb.minY(), (float) bb.minZ()); + + VoxelShape shape = Shapes.box( + 0.0, 0.0, 0.0, + bb.maxX() - bb.minX(), + bb.maxY() - bb.minY(), + bb.maxZ() - bb.minZ() + ); + + VertexConsumer buf = net.minecraft.client.Minecraft.getInstance() + .renderBuffers().bufferSource().getBuffer(RenderTypes.debugFilledBox()); + + renderFilled(ms, buf, shape, 0, 0, 0, color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); + ms.popPose(); + } + + public static void renderFilled(PoseStack poseStack, VertexConsumer vertexConsumer, VoxelShape voxelShape, double x, double y, double z, float r, float g, float b, float a) { + PoseStack.Pose pose = poseStack.last(); + voxelShape.forAllBoxes((minX, minY, minZ, maxX, maxY, maxZ) -> { + float x1 = (float)(minX + x); + float y1 = (float)(minY + y); + float z1 = (float)(minZ + z); + float x2 = (float)(maxX + x); + float y2 = (float)(maxY + y); + float z2 = (float)(maxZ + z); + + // Draw all 6 faces of the box + // Down + vertexConsumer.addVertex(pose, x1, y1, z1).setColor(r, g, b, a).setNormal(pose, 0, -1, 0); + vertexConsumer.addVertex(pose, x2, y1, z1).setColor(r, g, b, a).setNormal(pose, 0, -1, 0); + vertexConsumer.addVertex(pose, x2, y1, z2).setColor(r, g, b, a).setNormal(pose, 0, -1, 0); + vertexConsumer.addVertex(pose, x1, y1, z2).setColor(r, g, b, a).setNormal(pose, 0, -1, 0); + + // Up + vertexConsumer.addVertex(pose, x1, y2, z2).setColor(r, g, b, a).setNormal(pose, 0, 1, 0); + vertexConsumer.addVertex(pose, x2, y2, z2).setColor(r, g, b, a).setNormal(pose, 0, 1, 0); + vertexConsumer.addVertex(pose, x2, y2, z1).setColor(r, g, b, a).setNormal(pose, 0, 1, 0); + vertexConsumer.addVertex(pose, x1, y2, z1).setColor(r, g, b, a).setNormal(pose, 0, 1, 0); + + // North + vertexConsumer.addVertex(pose, x1, y1, z1).setColor(r, g, b, a).setNormal(pose, 0, 0, -1); + vertexConsumer.addVertex(pose, x1, y2, z1).setColor(r, g, b, a).setNormal(pose, 0, 0, -1); + vertexConsumer.addVertex(pose, x2, y2, z1).setColor(r, g, b, a).setNormal(pose, 0, 0, -1); + vertexConsumer.addVertex(pose, x2, y1, z1).setColor(r, g, b, a).setNormal(pose, 0, 0, -1); + + // South + vertexConsumer.addVertex(pose, x2, y1, z2).setColor(r, g, b, a).setNormal(pose, 0, 0, 1); + vertexConsumer.addVertex(pose, x2, y2, z2).setColor(r, g, b, a).setNormal(pose, 0, 0, 1); + vertexConsumer.addVertex(pose, x1, y2, z2).setColor(r, g, b, a).setNormal(pose, 0, 0, 1); + vertexConsumer.addVertex(pose, x1, y1, z2).setColor(r, g, b, a).setNormal(pose, 0, 0, 1); + + // West + vertexConsumer.addVertex(pose, x1, y1, z2).setColor(r, g, b, a).setNormal(pose, -1, 0, 0); + vertexConsumer.addVertex(pose, x1, y2, z2).setColor(r, g, b, a).setNormal(pose, -1, 0, 0); + vertexConsumer.addVertex(pose, x1, y2, z1).setColor(r, g, b, a).setNormal(pose, -1, 0, 0); + vertexConsumer.addVertex(pose, x1, y1, z1).setColor(r, g, b, a).setNormal(pose, -1, 0, 0); + + // East + vertexConsumer.addVertex(pose, x2, y1, z1).setColor(r, g, b, a).setNormal(pose, 1, 0, 0); + vertexConsumer.addVertex(pose, x2, y2, z1).setColor(r, g, b, a).setNormal(pose, 1, 0, 0); + vertexConsumer.addVertex(pose, x2, y2, z2).setColor(r, g, b, a).setNormal(pose, 1, 0, 0); + vertexConsumer.addVertex(pose, x2, y1, z2).setColor(r, g, b, a).setNormal(pose, 1, 0, 0); + }); + } + + + /** + * Is called in {@link Renderer2D.Interface} + */ + public void drawRect(Vector2D pos, Vector2D size, Color color) { + if (drawContext == null) return; + drawContext.fill( + (int) pos.getX(), (int) pos.getY(), + (int) (pos.getX() + size.getX()), (int) (pos.getY() + size.getY()), + color.getRGB() + ); + } + + /** + * Is called in {@link Renderer2D.Interface} + */ + public void drawLines(Collection points, Color color) { + if (points.size() < 2) { + Debug.stacktrace("At least two points expected, got: " + points.size()); + return; + } + int r = color.getRed(), g = color.getGreen(), b = color.getBlue(), a = color.getAlpha(); + + var window = net.minecraft.client.Minecraft.getInstance().getWindow(); + var bounds = new ScreenRectangle(0, 0, window.getGuiScaledWidth(), window.getGuiScaledHeight()); + + drawContext.guiRenderState.submitGuiElement(new PointsRenderState( + points, + r, g, b, a, + PictureInPictureRenderState.getBounds(bounds.left(), bounds.top(), bounds.right(), bounds.bottom(), drawContext.scissorStack.peek()), + drawContext.scissorStack.peek() + )); + } + + public Vector2D getScaledSize() { + return new Vector2D( + net.minecraft.client.Minecraft.getInstance().getWindow().getGuiScaledWidth(), + net.minecraft.client.Minecraft.getInstance().getWindow().getGuiScaledHeight() + ); + } + + public Vector2D getScreenSize() { + return new Vector2D(net.minecraft.client.Minecraft.getInstance().getWindow().getScreenWidth(), net.minecraft.client.Minecraft.getInstance().getWindow().getScreenHeight()); + } + + public void enableScissor(double x, double y, double w, double h) { + int x1 = (int) x; + int y1 = (int) y; + int x2 = (int) (x + w); + int y2 = (int) (y + h); + drawContext.enableScissor(x1, y1, x2, y2); + } + + public void disableScissor() { + try { + drawContext.disableScissor(); + } catch (IllegalStateException ignored) {} + } + + public void clearScissors() { + boolean clearedAll = false; + while (!clearedAll) { + try { + drawContext.disableScissor(); + } catch (IllegalStateException e) { + clearedAll = true; + } + } + } + + public boolean scissorContains(Vector2D point) { + return drawContext.containsPointInScissor(point.getXI(), point.getYI()); + } + + public void drawString(String text, double x, double y, Color color, double fontSize, boolean shadow) { + if (drawContext == null) return; + var matrixStack = drawContext.pose(); + matrixStack.pushMatrix(); + matrixStack.translate((float) x, (float) y); + double scale = fontSize / net.minecraft.client.Minecraft.getInstance().font.lineHeight; + matrixStack.scale((float) scale, (float) scale); + drawContext.drawString( + net.minecraft.client.Minecraft.getInstance().font, text, + 0, 0, color.getRGB(), shadow + ); + matrixStack.popMatrix(); + } + + public Vector2D getStringSize(String text, double fontSize) { + return new Vector2D( + net.minecraft.client.Minecraft.getInstance().font.width(text) * + (float) (fontSize / net.minecraft.client.Minecraft.getInstance().font.lineHeight), + (float) fontSize + ); + } + + public String getIP() { + ServerData d = net.minecraft.client.Minecraft.getInstance().getCurrentServer(); + + if (d == null) + return "Multiplayer"; + else + return d.ip; + } + + public String getFPS() { + return String.valueOf(net.minecraft.client.Minecraft.getInstance().getFps()); + } + + public void displayGuiScreen(MPKGuiScreen screen) { + net.minecraft.client.Minecraft.getInstance().setScreen( + screen == null + ? null + : new io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKGuiScreen(screen)); + } + + public String getCurrentGuiScreen() { + Screen curr = net.minecraft.client.Minecraft.getInstance().screen; + + if (curr == null) + return null; + else if (curr instanceof io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKGuiScreen) { + String id = ((io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKGuiScreen) curr).eventReceiver.getID(); + if (id == null) + id = "unknown"; + + return id; + } + + return curr.getClass().getSimpleName(); + } + + /** + * Is called in {@link Minecraft.Interface Minecraft.Interface} + */ + public String getUserName() { + if (net.minecraft.client.Minecraft.getInstance().player == null) return null; + return net.minecraft.client.Minecraft.getInstance().player.getName().getString(); + } + + public void copyToClipboard(String content) { + net.minecraft.client.Minecraft.getInstance().keyboardHandler.setClipboard(content); + } + + public boolean setInputs(Float yaw, boolean relYaw, Float pitch, boolean relPitch, int pressedInputs, int releasedInputs, int L, int R) { + if (!Minecraft.isSingleplayer()) return false; + LocalPlayer player = net.minecraft.client.Minecraft.getInstance().player; + if (player == null) return false; + Options op = net.minecraft.client.Minecraft.getInstance().options; + + float prevYaw = player.getYRot(); + float prevPitch = player.getXRot(); + + if (yaw != null) { + player.setYRot(relYaw ? (player.getYRot() + yaw) : yaw); + player.yRotO += player.getYRot() - prevYaw; + } + if (pitch != null) { + player.setXRot(relPitch ? (player.getXRot() + pitch) : pitch); + player.setXRot(Mth.clamp(player.getXRot(), -90.0F, 90.0F)); + + player.xRotO += player.getXRot() - prevPitch; + player.xRotO = Mth.clamp(player.xRotO, -90.0F, 90.0F); + } + + if (player.getVehicle() != null) { + player.getVehicle().onPassengerTurned(player); + } + + KeyMapping[] keys = new KeyMapping[]{ + op.keyUp, + op.keyLeft, + op.keyDown, + op.keyRight, + op.keySprint, + op.keyShift, + op.keyJump + }; + + for (int i = 0; i < keys.length; i++) { + if ((releasedInputs & 1 << i) != 0) { + KeyMapping.set(((KeyMappingAccessor) keys[i]).getKey(), false); + } + if ((pressedInputs & 1 << i) != 0) { + KeyMapping.set(((KeyMappingAccessor) keys[i]).getKey(), true); + KeyMapping.click(((KeyMappingAccessor) keys[i]).getKey()); + } + } + + KeyMapping.set(((KeyMappingAccessor) op.keyAttack).getKey(), L > 0); + for (int i = 0; i < L; i++) + KeyMapping.click(((KeyMappingAccessor) op.keyAttack).getKey()); + + KeyMapping.set(((KeyMappingAccessor) op.keyUse).getKey(), R > 0); + for (int i = 0; i < R; i++) + KeyMapping.click(((KeyMappingAccessor) op.keyUse).getKey()); + + return true; + } + + public boolean isF3Enabled() { + return net.minecraft.client.Minecraft.getInstance().debugEntries.isOverlayVisible(); + } + + public void sendPacket(MPKPacket packet) { + ClientPlayNetworking.send(new DataCustomPayload(packet.getData())); + } + + public ArrayList getPressedButtons() { + return new ArrayList<>(pressedButtons); + } + + public void startSection(String name) { + net.minecraft.util.profiling.Profiler.get().push(name); + } + + public void endStartSection(String name) { + net.minecraft.util.profiling.Profiler.get().popPush(name); + } + + public void endSection() { + net.minecraft.util.profiling.Profiler.get().pop(); + } + + private record PointsRenderState( + Collection points, + int r, int g, int b, int a, + ScreenRectangle bounds, + ScreenRectangle scissor + ) implements GuiElementRenderState { + + @Override + public @Nullable ScreenRectangle bounds() { + return this.bounds; + } + + @Override + public void buildVertices(VertexConsumer consumer) { + for (Vector2D p : this.points) { + consumer.addVertex((float) p.getX(), (float) p.getY(), 0).setColor(r, g, b, a); + } + } + + @Override + public RenderPipeline pipeline() { + return RenderPipelines.GUI; + } + + @Override + public TextureSetup textureSetup() { + return TextureSetup.noTexture(); + } + + @Override + public @Nullable ScreenRectangle scissorArea() { + return this.scissor; + } + } +} diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/MPKGuiScreen.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKGuiScreen.java similarity index 68% rename from fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/MPKGuiScreen.java rename to fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKGuiScreen.java index c39e79d4..714d0d57 100644 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/MPKGuiScreen.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKGuiScreen.java @@ -1,22 +1,22 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9; +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11; import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Profiler; import io.github.kurrycat.mpkmod.util.MathUtil; import io.github.kurrycat.mpkmod.util.Vector2D; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.input.CharInput; -import net.minecraft.client.input.KeyInput; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.input.CharacterEvent; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.network.chat.Component; public class MPKGuiScreen extends Screen { public io.github.kurrycat.mpkmod.gui.MPKGuiScreen eventReceiver; public MPKGuiScreen(io.github.kurrycat.mpkmod.gui.MPKGuiScreen screen) { - super(Text.translatable(API.MODID + ".gui.title")); + super(Component.translatable(API.MODID + ".gui.title")); eventReceiver = screen; } @@ -26,14 +26,14 @@ public void init() { } @Override - public void resize(MinecraftClient client, int width, int height) { - super.resize(client, width, height); + public void resize(int width, int height) { + super.resize(width, height); eventReceiver.onResize(width, height); } @Override - public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) { - drawContext.getMatrices().pushMatrix(); + public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) { + drawContext.pose().pushMatrix(); API.getFunctionHolder().drawContext = drawContext; Profiler.startSection(eventReceiver.getID() == null ? "mpk_gui" : eventReceiver.getID()); try { @@ -42,46 +42,46 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) API.LOGGER.warn("Error in drawScreen with id: " + eventReceiver.getID(), e); } Profiler.endSection(); - drawContext.getMatrices().popMatrix(); + drawContext.pose().popMatrix(); } @Override - public void close() { - super.close(); + public void onClose() { + super.onClose(); eventReceiver.onGuiClosed(); } @Override - public boolean shouldPause() { + public boolean isPauseScreen() { return false; } @Override - public boolean mouseClicked(Click click, boolean doubled) { + public boolean mouseClicked(MouseButtonEvent click, boolean doubled) { eventReceiver.onMouseClicked(new Vector2D(click.x(), click.y()), click.button()); return super.mouseClicked(click, doubled); } @Override - public boolean mouseReleased(Click click) { + public boolean mouseReleased(MouseButtonEvent click) { eventReceiver.onMouseReleased(new Vector2D(click.x(), click.y()), click.button()); return super.mouseReleased(click); } @Override - public boolean mouseDragged(Click click, double offsetX, double offsetY) { + public boolean mouseDragged(MouseButtonEvent click, double offsetX, double offsetY) { eventReceiver.onMouseClickMove(new Vector2D(click.x(), click.y()), click.button(), 0); return super.mouseDragged(click, offsetX, offsetY); } @Override - public boolean keyPressed(KeyInput input) { + public boolean keyPressed(KeyEvent input) { eventReceiver.onKeyEvent(input.key(), input.scancode(), input.modifiers(), false); return super.keyPressed(input); } @Override - public boolean charTyped(CharInput input) { + public boolean charTyped(CharacterEvent input) { eventReceiver.onKeyEvent(input.codepoint(), 0, input.modifiers(), true); return super.charTyped(input); } diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/MPKMod.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java similarity index 75% rename from fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/MPKMod.java rename to fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java index 3ef388d0..e87ddfcc 100644 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/MPKMod.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java @@ -1,8 +1,9 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9; +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11; +import com.mojang.blaze3d.vertex.PoseStack; import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.KeyBinding; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.network.DataCustomPayload; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.network.DataCustomPayload; import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; @@ -11,20 +12,18 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; import net.minecraft.SharedConstants; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.option.KeyBinding.Category; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Identifier; - +import net.minecraft.client.KeyMapping.Category; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.Identifier; import java.util.HashMap; import java.util.Map; public class MPKMod implements ModInitializer { public static final MPKMod INSTANCE = new MPKMod(); - public static Map keyBindingMap = new HashMap<>(); + public static Map keyBindingMap = new HashMap<>(); public final EventHandler eventHandler = new EventHandler(); - public MatrixStack matrixStack; - public static final Category KEYBINDING_CATEGORY = Category.create(Identifier.of(API.MODID, "mpkmod_2")); + public PoseStack matrixStack; + public static final Category KEYBINDING_CATEGORY = Category.register(Identifier.fromNamespaceAndPath(API.MODID, "mpkmod_2")); @Override public void onInitialize() { @@ -34,7 +33,7 @@ public void onInitialize() { API.preInit(getClass()); registerKeybindingsFromGUIs(); - HudElementRegistry.addLast(Identifier.of(API.MODID, "hud_layer"), eventHandler::onInGameOverlayRender); + HudElementRegistry.addLast(Identifier.fromNamespaceAndPath(API.MODID, "hud_layer"), eventHandler::onInGameOverlayRender); ClientTickEvents.START_CLIENT_TICK.register(eventHandler::onClientTickStart); ClientTickEvents.END_CLIENT_TICK.register(eventHandler::onClientTickEnd); ClientPlayConnectionEvents.JOIN.register(eventHandler::onServerConnect); @@ -60,7 +59,7 @@ private void registerKeybindingsFromGUIs() { } public void registerKeyBinding(String id) { - net.minecraft.client.option.KeyBinding keyBinding = new net.minecraft.client.option.KeyBinding( + net.minecraft.client.KeyMapping keyBinding = new net.minecraft.client.KeyMapping( API.MODID + ".key." + id + ".desc", -1, KEYBINDING_CATEGORY @@ -75,17 +74,17 @@ public void init() { API.LOGGER.info(API.COMPATIBILITY_MARKER, "Registered compatibility functions."); registerKeyBindings(); - API.init(SharedConstants.getGameVersion().name()); + API.init(SharedConstants.getCurrentVersion().name()); API.Events.onLoadComplete(); } private void registerKeyBindings() { - for (net.minecraft.client.option.KeyBinding k : MinecraftClient.getInstance().options.allKeys) { + for (net.minecraft.client.KeyMapping k : Minecraft.getInstance().options.keyMappings) { new KeyBinding( - () -> k.getBoundKeyLocalizedText().getString(), - k.getId(), - k::isPressed + () -> k.getTranslatedKeyMessage().getString(), + k.getName(), + k::isDown ); } diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyMappingAccessor.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyMappingAccessor.java new file mode 100644 index 00000000..ec39381c --- /dev/null +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyMappingAccessor.java @@ -0,0 +1,12 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin; + +import com.mojang.blaze3d.platform.InputConstants; +import net.minecraft.client.KeyMapping; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(KeyMapping.class) +public interface KeyMappingAccessor { + @Accessor + InputConstants.Key getKey(); +} diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java new file mode 100644 index 00000000..018a692d --- /dev/null +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java @@ -0,0 +1,19 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin; + +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKMod; +import net.minecraft.client.KeyboardHandler; +import net.minecraft.client.input.KeyEvent; +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(KeyboardHandler.class) +public class KeyboardHandlerMixin { + @Inject(method = "keyPress", at = @At(value = "RETURN")) + private void onKey(long window, int action, KeyEvent keyInput, CallbackInfo ci) { + if (keyInput.key() != -1) { + MPKMod.INSTANCE.eventHandler.onKey(keyInput, action); + } + } +} diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/LevelRendererMixin.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/LevelRendererMixin.java new file mode 100644 index 00000000..c170ed9b --- /dev/null +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/LevelRendererMixin.java @@ -0,0 +1,23 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin; + +import com.mojang.blaze3d.vertex.PoseStack; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKMod; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.SubmitNodeStorage; +import net.minecraft.client.renderer.state.LevelRenderState; +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(value = LevelRenderer.class) +public class LevelRendererMixin { + @Inject(method = "submitBlockEntities", at = @At("HEAD")) + public void render(PoseStack matrices, LevelRenderState renderState, SubmitNodeStorage orderedRenderCommandQueueImpl, CallbackInfo ci) { + MPKMod.INSTANCE.eventHandler.onRenderWorldOverlay( + new PoseStack(), + Minecraft.getInstance().getDeltaTracker().getGameTimeDeltaPartialTick(true) + ); + } +} diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MinecraftClientMixin.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MinecraftMixin.java similarity index 57% rename from fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MinecraftClientMixin.java rename to fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MinecraftMixin.java index 0d7a676c..500fc75f 100644 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MinecraftClientMixin.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MinecraftMixin.java @@ -1,14 +1,14 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin; +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.MPKMod; -import net.minecraft.client.MinecraftClient; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKMod; +import net.minecraft.client.Minecraft; 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(MinecraftClient.class) -public class MinecraftClientMixin { +@Mixin(Minecraft.class) +public class MinecraftMixin { @Inject(at = @At("TAIL"), method = "") private void init(CallbackInfo info) { MPKMod.INSTANCE.init(); diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MouseMixin.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java similarity index 61% rename from fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MouseMixin.java rename to fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java index 80293cd5..58d30f22 100644 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/MouseMixin.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java @@ -1,55 +1,55 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin; +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin; import io.github.kurrycat.mpkmod.compatibility.API; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.Mouse; -import net.minecraft.client.input.MouseInput; +import net.minecraft.client.Minecraft; +import net.minecraft.client.MouseHandler; +import net.minecraft.client.input.MouseButtonInfo; 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.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(Mouse.class) -public class MouseMixin { +@Mixin(MouseHandler.class) +public class MouseHandlerMixin { @Shadow - private double cursorDeltaX; + private double accumulatedDX; @Shadow - private double cursorDeltaY; + private double accumulatedDY; @Shadow - private double x; + private double xpos; @Shadow - private double y; + private double ypos; - @Inject(method = "onCursorPos", at = @At(value = "TAIL")) + @Inject(method = "onMove", at = @At(value = "TAIL")) private void onCursorPos(long window, double x, double y, CallbackInfo ci) { - if (window == MinecraftClient.getInstance().getWindow().getHandle()) { + if (window == Minecraft.getInstance().getWindow().handle()) { API.Events.onMouseInput( io.github.kurrycat.mpkmod.util.Mouse.Button.NONE, io.github.kurrycat.mpkmod.util.Mouse.State.NONE, - (int) x, (int) y, (int) cursorDeltaX, (int) -cursorDeltaY, + (int) x, (int) y, (int) accumulatedDX, (int) -accumulatedDY, 0, System.nanoTime() ); } } - @Inject(method = "onMouseScroll", at = @At(value = "TAIL")) + @Inject(method = "onScroll", at = @At(value = "TAIL")) private void onMouseScroll(long window, double horizontal, double vertical, CallbackInfo ci) { API.Events.onMouseInput( io.github.kurrycat.mpkmod.util.Mouse.Button.NONE, io.github.kurrycat.mpkmod.util.Mouse.State.NONE, - (int) x, (int) y, 0, 0, + (int) xpos, (int) ypos, 0, 0, (int) vertical, System.nanoTime() ); } - @Inject(method = "onMouseButton", at = @At(value = "TAIL")) - private void onMouseButton(long window, MouseInput input, int action, CallbackInfo ci) { + @Inject(method = "onButton", at = @At(value = "TAIL")) + private void onMouseButton(long window, MouseButtonInfo input, int action, CallbackInfo ci) { API.Events.onMouseInput( io.github.kurrycat.mpkmod.util.Mouse.Button.fromInt(input.button()), input.button() == -1 ? io.github.kurrycat.mpkmod.util.Mouse.State.NONE : (action == 1 ? io.github.kurrycat.mpkmod.util.Mouse.State.DOWN : io.github.kurrycat.mpkmod.util.Mouse.State.UP), - (int) x, (int) y, 0, 0, + (int) xpos, (int) ypos, 0, 0, 0, System.nanoTime() ); } diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/network/DataCustomPayload.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/network/DataCustomPayload.java new file mode 100644 index 00000000..03423724 --- /dev/null +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/network/DataCustomPayload.java @@ -0,0 +1,36 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.network; + +import io.github.kurrycat.mpknetapi.common.MPKNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.Identifier; + +public record DataCustomPayload(byte[] data) implements CustomPacketPayload { + public static final Type MPK_ID = new Type<>(Identifier.fromNamespaceAndPath(MPKNetworking.CHANNEL_NAMESPACE, MPKNetworking.CHANNEL_PATH)); + + public static final StreamCodec CODEC = StreamCodec.ofMember( + (payload, buf) -> buf.writeBytes(payload.data()), + buf -> { + byte[] data = new byte[buf.readableBytes()]; + buf.readBytes(data); + return new DataCustomPayload(data); + } + ); + + @Override + public Type type() { + return MPK_ID; + } + + public static Type registerClientboundPayload() { + PayloadTypeRegistry.playS2C().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } + + public static Type registerServerboundPayload() { + PayloadTypeRegistry.playC2S().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } +} \ No newline at end of file diff --git a/fabric-1.21.11/src/main/resources/assets/mpkmod/icon.png b/fabric-1.21.11/src/main/resources/assets/mpkmod/icon.png new file mode 100644 index 00000000..e69de29b diff --git a/fabric-1.21.9/src/main/resources/assets/mpkmod/lang/en_us.json b/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/en_us.json similarity index 100% rename from fabric-1.21.9/src/main/resources/assets/mpkmod/lang/en_us.json rename to fabric-1.21.11/src/main/resources/assets/mpkmod/lang/en_us.json diff --git a/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/pl_pl.json b/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/pl_pl.json new file mode 100644 index 00000000..e69de29b diff --git a/fabric-1.21.9/src/main/resources/fabric.mod.json b/fabric-1.21.11/src/main/resources/fabric.mod.json similarity index 74% rename from fabric-1.21.9/src/main/resources/fabric.mod.json rename to fabric-1.21.11/src/main/resources/fabric.mod.json index 8cc89a6d..5b93be26 100644 --- a/fabric-1.21.9/src/main/resources/fabric.mod.json +++ b/fabric-1.21.11/src/main/resources/fabric.mod.json @@ -2,7 +2,6 @@ "schemaVersion": 1, "id": "mpkmod", "version": "${version}", - "name": "MPK Mod", "description": "A Mod that adds some features that help parkour to the game.", "authors": [ @@ -13,25 +12,23 @@ "Contributors" ], "contact": { - "sources": "https://github.com/kurrycat2004/MPKMod_2" + "sources": "https://github.com/MPKMod/MPKMod2" }, - "license": "MIT", "icon": "assets/mpkmod/icon.png", "environment": "client", "entrypoints": { "main": [ - "io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.MPKMod" + "io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKMod" ] }, "mixins": [ "mpkmod.mixins.json" ], - "depends": { - "fabricloader": ">=0.17.2", + "fabricloader": ">=0.18.0", "fabric-api": "*", - "minecraft": ">=1.21.9", + "minecraft": ">=1.21.11", "java": ">=21" }, "suggests": {} diff --git a/fabric-1.21.9/src/main/resources/mpkmod.mixins.json b/fabric-1.21.11/src/main/resources/mpkmod.mixins.json similarity index 62% rename from fabric-1.21.9/src/main/resources/mpkmod.mixins.json rename to fabric-1.21.11/src/main/resources/mpkmod.mixins.json index 82c84991..5a973cb1 100644 --- a/fabric-1.21.9/src/main/resources/mpkmod.mixins.json +++ b/fabric-1.21.11/src/main/resources/mpkmod.mixins.json @@ -1,16 +1,16 @@ { "required": true, "minVersion": "0.8", - "package": "io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin", + "package": "io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin", "compatibilityLevel": "JAVA_21", "mixins": [ ], "client": [ - "GameRendererMixin", - "KeyBindingAccessor", - "KeyboardMixin", - "MinecraftClientMixin", - "MouseMixin" + "LevelRendererMixin", + "KeyMappingAccessor", + "KeyboardHandlerMixin", + "MinecraftMixin", + "MouseHandlerMixin" ], "injectors": { "defaultRequire": 1 diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/EventHandler.java b/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/EventHandler.java deleted file mode 100644 index edbcc808..00000000 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/EventHandler.java +++ /dev/null @@ -1,124 +0,0 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9; - -import io.github.kurrycat.mpkmod.compatibility.API; -import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin.KeyBindingAccessor; -import io.github.kurrycat.mpkmod.ticks.ButtonMS; -import io.github.kurrycat.mpkmod.ticks.ButtonMSList; -import io.github.kurrycat.mpkmod.util.BoundingBox3D; -import io.github.kurrycat.mpkmod.util.Vector3D; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.input.KeyInput; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.option.GameOptions; -import net.minecraft.client.render.RenderTickCounter; -import net.minecraft.client.util.InputUtil; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Util; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; - -public class EventHandler { - private static final ButtonMSList timeQueue = new ButtonMSList(); - - /** - * @param keyInput The Minecraft {@link KeyInput} object. - * @param action The action, where 0 = unpressed, 1 = pressed, 2 = held. - */ - public void onKey(KeyInput keyInput, int action) { - GameOptions options = MinecraftClient.getInstance().options; - long eventNanos = Util.getMeasuringTimeNano(); - - InputUtil.Key inputKey = InputUtil.fromKeyCode(new KeyInput(keyInput.key(), keyInput.scancode(), keyInput.modifiers())); - - int[] keys = { - ((KeyBindingAccessor) options.forwardKey).getBoundKey().getCode(), - ((KeyBindingAccessor) options.leftKey).getBoundKey().getCode(), - ((KeyBindingAccessor) options.backKey).getBoundKey().getCode(), - ((KeyBindingAccessor) options.rightKey).getBoundKey().getCode(), - ((KeyBindingAccessor) options.sprintKey).getBoundKey().getCode(), - ((KeyBindingAccessor) options.sneakKey).getBoundKey().getCode(), - ((KeyBindingAccessor) options.jumpKey).getBoundKey().getCode() - }; - - for (int i = 0; i < keys.length; i++) { - if (keyInput.key() == keys[i]) { - timeQueue.add(ButtonMS.of(ButtonMS.Button.values()[i], eventNanos, action == 1)); - } - } - - if (action == 1) { - FunctionCompatibility.pressedButtons.add(inputKey.getCode()); - } else if (action == 0) { - FunctionCompatibility.pressedButtons.remove(inputKey.getCode()); - } - - API.Events.onKeyInput(keyInput.key(), inputKey.getLocalizedText().getString(), action == 1); - - MPKMod.keyBindingMap.forEach((id, keyBinding) -> { - if (keyBinding.isPressed()) { - API.Events.onKeybind(id); - } - }); - } - - public void onInGameOverlayRender(DrawContext drawContext, RenderTickCounter renderTickCounter) { - drawContext.getMatrices().pushMatrix(); - API.getFunctionHolder().drawContext = drawContext; - API.Events.onRenderOverlay(); - drawContext.getMatrices().popMatrix(); - } - - public void onRenderWorldOverlay(MatrixStack matrixStack, float tickDelta) { - MPKMod.INSTANCE.matrixStack = matrixStack; - matrixStack.push(); - Vec3d pos = MinecraftClient.getInstance().gameRenderer.getCamera().getPos().negate(); - MPKMod.INSTANCE.matrixStack.translate(pos); - API.Events.onRenderWorldOverlay(tickDelta); - matrixStack.pop(); - } - - public void onClientTickStart(MinecraftClient mc) { - if (mc.isPaused() || mc.world == null) return; - API.Events.onTickStart(); - } - - public void onClientTickEnd(MinecraftClient mc) { - if (mc.isPaused() || mc.world == null) return; - ClientPlayerEntity mcPlayer = mc.player; - - if (mcPlayer != null) { - Box playerBB = mcPlayer.getBoundingBox(); - new Player() - .setPos(new Vector3D(mcPlayer.getX(), mcPlayer.getY(), mcPlayer.getZ())) - .setLastPos(new Vector3D(mcPlayer.lastX, mcPlayer.lastY, mcPlayer.lastZ)) - .setMotion(new Vector3D(mcPlayer.getVelocity().x, mcPlayer.getVelocity().y, mcPlayer.getVelocity().z)) - .setRotation(mcPlayer.getRotationClient().y, mcPlayer.getRotationClient().x) - .setOnGround(mcPlayer.isOnGround()) - .setSprinting(mcPlayer.isSprinting()) - .setBoundingBox(new BoundingBox3D( - new Vector3D(playerBB.minX, playerBB.minY, playerBB.minZ), - new Vector3D(playerBB.maxX, playerBB.maxY, playerBB.maxZ) - )) - .setFlying(mcPlayer.getAbilities().flying) - .constructKeyInput() - .setKeyMSList(timeQueue) - .buildAndSave(); - timeQueue.clear(); - } - - API.Events.onTickEnd(); - } - - - public void onServerConnect(ClientPlayNetworkHandler clientPlayNetworkHandler, PacketSender packetSender, MinecraftClient minecraftClient) { - API.Events.onServerConnect(clientPlayNetworkHandler.getConnection().isLocal()); - } - - public void onServerDisconnect(ClientPlayNetworkHandler clientPlayNetworkHandler, MinecraftClient minecraftClient) { - API.Events.onServerDisconnect(); - } -} diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/FunctionCompatibility.java b/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/FunctionCompatibility.java deleted file mode 100644 index 7ce47d10..00000000 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/FunctionCompatibility.java +++ /dev/null @@ -1,410 +0,0 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9; - -import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.systems.RenderSystem; -import io.github.kurrycat.mpkmod.compatibility.MCClasses.*; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin.KeyBindingAccessor; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.network.DataCustomPayload; -import io.github.kurrycat.mpkmod.gui.MPKGuiScreen; -import io.github.kurrycat.mpkmod.util.BoundingBox3D; -import io.github.kurrycat.mpkmod.util.Debug; -import io.github.kurrycat.mpkmod.util.Vector2D; -import io.github.kurrycat.mpkmod.util.Vector3D; -import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.RenderPipelines; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.ScreenRect; -import net.minecraft.client.gui.render.state.SimpleGuiElementRenderState; -import net.minecraft.client.gui.render.state.special.SpecialGuiElementRenderState; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.client.option.GameOptions; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexRendering; -import net.minecraft.client.sound.PositionedSoundInstance; -import net.minecraft.client.texture.TextureSetup; -import net.minecraft.registry.Registries; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.Util; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.profiler.Profilers; -import org.jetbrains.annotations.Nullable; - -import java.awt.*; -import java.util.*; -import java.util.List; - -public class FunctionCompatibility implements FunctionHolder, - SoundManager.Interface, - WorldInteraction.Interface, - Renderer3D.Interface, - Renderer2D.Interface, - FontRenderer.Interface, - Minecraft.Interface, - Keyboard.Interface, - Profiler.Interface { - public static final Set pressedButtons = new HashSet<>(); - public DrawContext drawContext = null; - - public void playButtonSound() { - MinecraftClient.getInstance().getSoundManager().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); - } - - public List getCollisionBoundingBoxes(Vector3D blockPosVector) { - final Vector3D blockPosVec = blockPosVector.copy(); - BlockPos blockPos = new BlockPos(blockPosVec.getXI(), blockPosVec.getYI(), blockPosVec.getZI()); - if (MinecraftClient.getInstance().world == null) return null; - ArrayList boundingBoxes = new ArrayList<>(); - BlockState blockState = MinecraftClient.getInstance().world.getBlockState(blockPos); - - blockState.getCollisionShape(MinecraftClient.getInstance().world, blockPos).simplify().forEachBox( - ((minX, minY, minZ, maxX, maxY, maxZ) -> boundingBoxes.add( - new BoundingBox3D(new Vector3D(minX, minY, minZ), new Vector3D(maxX, maxY, maxZ)).move(blockPosVec) - )) - ); - - return boundingBoxes; - } - - public Vector3D getLookingAt() { - if (MinecraftClient.getInstance().getCameraEntity() == null) - return null; - - HitResult hitResult = MinecraftClient.getInstance().getCameraEntity().raycast(20, 0, false); - if (hitResult instanceof BlockHitResult) { - BlockPos blockPos = ((BlockHitResult) hitResult).getBlockPos(); - return new Vector3D(blockPos.getX(), blockPos.getY(), blockPos.getZ()); - } - - return null; - } - - @Override - public String getBlockName(Vector3D blockPos) { - BlockPos blockpos = new BlockPos(blockPos.getXI(), blockPos.getYI(), blockPos.getZI()); - if (MinecraftClient.getInstance().world == null) - return null; - - return Registries.BLOCK.getKey( - MinecraftClient.getInstance().world.getBlockState(blockpos).getBlock() - ).get().getValue().toString(); - } - - @Override - public HashMap getBlockProperties(Vector3D blockPos) { - HashMap properties = new HashMap<>(); - if (MinecraftClient.getInstance().world == null) - return properties; - - BlockPos blockpos = new BlockPos(blockPos.getXI(), blockPos.getYI(), blockPos.getZI()); - BlockState blockState = MinecraftClient.getInstance().world.getBlockState(blockpos); - blockState.getEntries().forEach((key, value) -> - properties.put(key.getName(), Util.getValueAsString(key, value)) - ); - return null; - } - - /** - * Is called in {@link WorldInteraction.Interface WorldInteraction.Interface} - */ - public String getLookingAtBlock() { - if (MinecraftClient.getInstance().getCameraEntity() == null) - return null; - - HitResult hitResult = MinecraftClient.getInstance().getCameraEntity().raycast(20, 0, false); - if (hitResult.getType() == HitResult.Type.BLOCK && MinecraftClient.getInstance().world != null) { - return Registries.BLOCK.getKey( - MinecraftClient.getInstance().world.getBlockState(((BlockHitResult) hitResult).getBlockPos()).getBlock() - ).get().getValue().toTranslationKey(); - } - return null; - } - - public void drawBox(BoundingBox3D bb, Color color, float partialTicks) { - int r = color.getRed(), g = color.getGreen(), b = color.getBlue(), a = color.getAlpha(); - - RenderSystem.lineWidth(1.0F); - - float minX = (float) bb.minX(); - float minY = (float) bb.minY(); - float minZ = (float) bb.minZ(); - float maxX = (float) bb.maxX(); - float maxY = (float) bb.maxY(); - float maxZ = (float) bb.maxZ(); - - VertexRendering.drawFilledBox( - MPKMod.INSTANCE.matrixStack, - MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers().getBuffer(RenderLayer.getDebugFilledBox()), - minX, minY, minZ, - maxX, maxY, maxZ, - r / 255f, g / 255f, b / 255f, a / 255f - ); - } - - /** - * Is called in {@link Renderer2D.Interface} - */ - public void drawRect(Vector2D pos, Vector2D size, Color color) { - if (drawContext == null) return; - drawContext.fill( - (int) pos.getX(), (int) pos.getY(), - (int) (pos.getX() + size.getX()), (int) (pos.getY() + size.getY()), - color.getRGB() - ); - } - - /** - * Is called in {@link Renderer2D.Interface} - */ - public void drawLines(Collection points, Color color) { - if (points.size() < 2) { - Debug.stacktrace("At least two points expected, got: " + points.size()); - return; - } - int r = color.getRed(), g = color.getGreen(), b = color.getBlue(), a = color.getAlpha(); - - var window = MinecraftClient.getInstance().getWindow(); - var bounds = new ScreenRect(0, 0, window.getScaledWidth(), window.getScaledHeight()); - - drawContext.state.addSimpleElement(new PointsRenderState( - points, - r, g, b, a, - SpecialGuiElementRenderState.createBounds(bounds.getLeft(), bounds.getTop(), bounds.getRight(), bounds.getBottom(), drawContext.scissorStack.peekLast()), - drawContext.scissorStack.peekLast() - )); - } - - public Vector2D getScaledSize() { - return new Vector2D( - MinecraftClient.getInstance().getWindow().getScaledWidth(), - MinecraftClient.getInstance().getWindow().getScaledHeight() - ); - } - - public Vector2D getScreenSize() { - return new Vector2D(MinecraftClient.getInstance().getWindow().getWidth(), MinecraftClient.getInstance().getWindow().getHeight()); - } - - public void enableScissor(double x, double y, double w, double h) { - int x1 = (int) x; - int y1 = (int) y; - int x2 = (int) (x + w); - int y2 = (int) (y + h); - drawContext.enableScissor(x1, y1, x2, y2); - } - - public void disableScissor() { - try { - drawContext.disableScissor(); - } catch (IllegalStateException ignored) {} - } - - public void clearScissors() { - boolean clearedAll = false; - while (!clearedAll) { - try { - drawContext.disableScissor(); - } catch (IllegalStateException e) { - clearedAll = true; - } - } - } - - public boolean scissorContains(Vector2D point) { - return drawContext.scissorContains(point.getXI(), point.getYI()); - } - - public void drawString(String text, double x, double y, Color color, double fontSize, boolean shadow) { - if (drawContext == null) return; - var matrixStack = drawContext.getMatrices(); - matrixStack.pushMatrix(); - matrixStack.translate((float) x, (float) y); - double scale = fontSize / MinecraftClient.getInstance().textRenderer.fontHeight; - matrixStack.scale((float) scale, (float) scale); - drawContext.drawText( - MinecraftClient.getInstance().textRenderer, text, - 0, 0, color.getRGB(), shadow - ); - matrixStack.popMatrix(); - } - - public Vector2D getStringSize(String text, double fontSize) { - return new Vector2D( - MinecraftClient.getInstance().textRenderer.getWidth(text) * - (float) (fontSize / MinecraftClient.getInstance().textRenderer.fontHeight), - (float) fontSize - ); - } - - public String getIP() { - ServerInfo d = MinecraftClient.getInstance().getCurrentServerEntry(); - - if (d == null) - return "Multiplayer"; - else - return d.address; - } - - public String getFPS() { - return String.valueOf(MinecraftClient.getInstance().getCurrentFps()); - } - - public void displayGuiScreen(MPKGuiScreen screen) { - MinecraftClient.getInstance().setScreen( - screen == null - ? null - : new io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.MPKGuiScreen(screen)); - } - - public String getCurrentGuiScreen() { - Screen curr = MinecraftClient.getInstance().currentScreen; - - if (curr == null) - return null; - else if (curr instanceof io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.MPKGuiScreen) { - String id = ((io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.MPKGuiScreen) curr).eventReceiver.getID(); - if (id == null) - id = "unknown"; - - return id; - } - - return curr.getClass().getSimpleName(); - } - - /** - * Is called in {@link Minecraft.Interface Minecraft.Interface} - */ - public String getUserName() { - if (MinecraftClient.getInstance().player == null) return null; - return MinecraftClient.getInstance().player.getName().getString(); - } - - public void copyToClipboard(String content) { - MinecraftClient.getInstance().keyboard.setClipboard(content); - } - - public boolean setInputs(Float yaw, boolean relYaw, Float pitch, boolean relPitch, int pressedInputs, int releasedInputs, int L, int R) { - if (!Minecraft.isSingleplayer()) return false; - ClientPlayerEntity player = MinecraftClient.getInstance().player; - if (player == null) return false; - GameOptions op = MinecraftClient.getInstance().options; - - float prevYaw = player.getYaw(); - float prevPitch = player.getPitch(); - - if (yaw != null) { - player.setYaw(relYaw ? (player.getYaw() + yaw) : yaw); - player.lastYaw += player.getYaw() - prevYaw; - } - if (pitch != null) { - player.setPitch(relPitch ? (player.getPitch() + pitch) : pitch); - player.setPitch(MathHelper.clamp(player.getPitch(), -90.0F, 90.0F)); - - player.lastPitch += player.getPitch() - prevPitch; - player.lastPitch = MathHelper.clamp(player.lastPitch, -90.0F, 90.0F); - } - - if (player.getVehicle() != null) { - player.getVehicle().onPassengerLookAround(player); - } - - KeyBinding[] keys = new KeyBinding[]{ - op.forwardKey, - op.leftKey, - op.backKey, - op.rightKey, - op.sprintKey, - op.sneakKey, - op.jumpKey - }; - - for (int i = 0; i < keys.length; i++) { - if ((releasedInputs & 1 << i) != 0) { - KeyBinding.setKeyPressed(((KeyBindingAccessor) keys[i]).getBoundKey(), false); - } - if ((pressedInputs & 1 << i) != 0) { - KeyBinding.setKeyPressed(((KeyBindingAccessor) keys[i]).getBoundKey(), true); - KeyBinding.onKeyPressed(((KeyBindingAccessor) keys[i]).getBoundKey()); - } - } - - KeyBinding.setKeyPressed(((KeyBindingAccessor) op.attackKey).getBoundKey(), L > 0); - for (int i = 0; i < L; i++) - KeyBinding.onKeyPressed(((KeyBindingAccessor) op.attackKey).getBoundKey()); - - KeyBinding.setKeyPressed(((KeyBindingAccessor) op.useKey).getBoundKey(), R > 0); - for (int i = 0; i < R; i++) - KeyBinding.onKeyPressed(((KeyBindingAccessor) op.useKey).getBoundKey()); - - return true; - } - - public boolean isF3Enabled() { - return MinecraftClient.getInstance().debugHudEntryList.isF3Enabled(); - } - - public void sendPacket(MPKPacket packet) { - ClientPlayNetworking.send(new DataCustomPayload(packet.getData())); - } - - public List getPressedButtons() { - return new ArrayList<>(pressedButtons); - } - - public void startSection(String name) { - Profilers.get().push(name); - } - - public void endStartSection(String name) { - Profilers.get().swap(name); - } - - public void endSection() { - Profilers.get().pop(); - } - - private record PointsRenderState( - Collection points, - int r, int g, int b, int a, - ScreenRect bounds, - ScreenRect scissor - ) implements SimpleGuiElementRenderState { - - @Override - public @Nullable ScreenRect bounds() { - return this.bounds; - } - - @Override - public void setupVertices(VertexConsumer consumer) { - for (Vector2D p : this.points) { - consumer.vertex((float) p.getX(), (float) p.getY(), 0).color(r, g, b, a); - } - } - - @Override - public RenderPipeline pipeline() { - return RenderPipelines.GUI; - } - - @Override - public TextureSetup textureSetup() { - return TextureSetup.empty(); - } - - @Override - public @Nullable ScreenRect scissorArea() { - return this.scissor; - } - } -} diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/GameRendererMixin.java b/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/GameRendererMixin.java deleted file mode 100644 index 151b0dd2..00000000 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/GameRendererMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin; - -import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.MPKMod; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; -import net.minecraft.client.render.state.WorldRenderState; -import net.minecraft.client.util.math.MatrixStack; -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(value = WorldRenderer.class) -public class GameRendererMixin { - @Inject(method = "renderBlockEntities", at = @At("HEAD")) - public void render(MatrixStack matrices, WorldRenderState renderState, OrderedRenderCommandQueueImpl orderedRenderCommandQueueImpl, CallbackInfo ci) { - MPKMod.INSTANCE.eventHandler.onRenderWorldOverlay( - new MatrixStack(), - MinecraftClient.getInstance().getRenderTickCounter().getTickProgress(true) - ); - } -} diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyBindingAccessor.java b/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyBindingAccessor.java deleted file mode 100644 index 4076bc74..00000000 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyBindingAccessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin; - -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.util.InputUtil; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(KeyBinding.class) -public interface KeyBindingAccessor { - @Accessor - InputUtil.Key getBoundKey(); -} diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyboardMixin.java b/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyboardMixin.java deleted file mode 100644 index 1375fc3a..00000000 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/mixin/KeyboardMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.mixin; - -import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.MPKMod; -import net.minecraft.client.Keyboard; -import net.minecraft.client.input.KeyInput; -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(Keyboard.class) -public class KeyboardMixin { - @Inject(method = "onKey", at = @At(value = "RETURN")) - private void onKey(long window, int action, KeyInput keyInput, CallbackInfo ci) { - if (keyInput.key() != -1) { - MPKMod.INSTANCE.eventHandler.onKey(keyInput, action); - } - } -} diff --git a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/network/DataCustomPayload.java b/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/network/DataCustomPayload.java deleted file mode 100644 index 97c954b6..00000000 --- a/fabric-1.21.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_9/network/DataCustomPayload.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_9.network; - -import io.github.kurrycat.mpknetapi.common.MPKNetworking; -import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.codec.PacketCodec; -import net.minecraft.network.packet.CustomPayload; -import net.minecraft.util.Identifier; - -public record DataCustomPayload(byte[] data) implements CustomPayload { - public static final Id MPK_ID = new Id<>(Identifier.of(MPKNetworking.CHANNEL_NAMESPACE, MPKNetworking.CHANNEL_PATH)); - - public static final PacketCodec CODEC = PacketCodec.of( - (payload, buf) -> buf.writeBytes(payload.data()), - buf -> { - byte[] data = new byte[buf.readableBytes()]; - buf.readBytes(data); - return new DataCustomPayload(data); - } - ); - - @Override - public Id getId() { - return MPK_ID; - } - - public static Id registerClientboundPayload() { - PayloadTypeRegistry.playS2C().register(MPK_ID, DataCustomPayload.CODEC); - return MPK_ID; - } - - public static Id registerServerboundPayload() { - PayloadTypeRegistry.playC2S().register(MPK_ID, DataCustomPayload.CODEC); - return MPK_ID; - } -} \ No newline at end of file diff --git a/fabric-1.21.9/src/main/resources/assets/mpkmod/icon.png b/fabric-1.21.9/src/main/resources/assets/mpkmod/icon.png deleted file mode 100644 index 48bcd55b0c041883e83c5cf2cabb942b2ad92f14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11576 zcmbVyWmuG5*zL^FDJ|V19nv8p-Q77bq;xk7jWm+d4T3b%F*FJiA|YKeN)8|bQs;TU z@7Fm$&&6;t_3USJ?>pC8Z?!d*2ym%!K_C!;in6>e2m}V6f9yzlhBaJb3(iDsH`mI6Rtvy_L~?(I(6Rr zNHzkMgv9bKQx6oZ`Cx13V_j4oBX$_Pvs;X#Tlwvy8ZM8Gl-S95PjG6FKYX@^f8i(r zTx(DDTi$$X-*9w`3xZvSB}kc>`(dV1S0x~&G5GpA=;=?B4derDsOp9-T#GeDV7)0` zG`?Dtr|?4BGdGJh=DHwYtptzcm6wIzO|ti#b%aA~vU*UFm^wFwr11&V@P+;k$4-3N zn@m1i3qvt?PeU%@#qQ_f*6fY-+}?%z*d)dyB)UXQ<*_d~n}{k6SVraZ{_fI0SdSMo z=cqTlpcJRjj=}wW7WFuI>h^VLFFKzr0WIR`>H{T4WRFa%+v?_c`??hPZU&LH_}7RA zarFH6Wjlp9yGHXjA1Z*r($m+seESmsOjZ>{q>d{0-hDzcfu zM1k_5p?%dYE$6t?H%lO)-r-lro)%ZZQBhG>^x|I8FCZkK^j)nGEk>fwGy%VtFc)c1 z80}+znyw!%Q-6^%Ytc%pL#hUk3WU)sJ~kHf84M_+$BeFO*Js~#_xDvd zHvaw{CE3rwL_Y}Jot#WQi$7AsTr^_;87XrVds$pnEiNu5e;;85F;C`7`tx4h-ar3P z`!95CnGnq2E666n$<578pX_IT!G#+5R|e`i0n^BO z!{I|seZ8ybB?t$e3!&h%lroxc8d*-{YzB>8!DMUz;pT$N5+K0T-O-eGtSQB)xpsbZ3R7GA5z57*qCbZQZNDX&PtH@+9nph`b##{ z0E0#~oKl%1Rhc84B60M=%H7>PIw%QU#uh#{HpXnR)M!Zdvo5JQ&*xU%P}LY|+LXtm zoQkd{@QY63&#T{1n9~z1oUM{wG10DuV0R@YrKF%VbeW{6-}BYClV83x09RimH3vE= z*~<)BIt;srFx`juz-M5zL3M=3CIsB?)00Z{u+Q!XOG|H4Xr*0rQs05%ccEiRR7EW< zEs0{tO=uF2%I(|JoF=0mP1&YIr2|%z!z{E#_4GCQ`b}h$aI8JTCErF#k1YfPOFFgz zIdFZ4%|>rv-VD;Ly!N1j3Rb;+{l#yS{t2|P$-3x`Y-RzJxEMWC2cw99zGhXQ@gCX1 zRk^k!HhuY4e&?ny_)6mYE-Prqm_bNbxUl@qN{1M%Zk{lN++*4UTI4oV?=@dE$0dg= zMe|a-qgKh``ZrTFkycm3ZDD(Rd-B8x9|Z?4?0P%)_wQd35-?5))X~uq8a5D~UgflDn`D8F z$Z>npooJrxtS%<3*?lv-sj>$?F2TH4pi}L5_qIs`m+3^UQdd+F)_ku-$iPON20G8F zs;Y`fC<`&v$*fCvyDUOqQ+&FJi}%+h*aq#4VJ zpC5f$x-4XZi-OnO`0(PUe@gsO3|`i@>z)n&^d<7;QmlUUN$F=7OxIM*dndZP%Opxi zW9&2MVg9fd=cNYzWLgrL2CT3TGss(Rz{NoNRdmZ#%VwU=H}m%|O_;3f+n|NEuMd7mYS^n_ zYUN|C1o5yir|JI1VRB0t-yJwUK2DyWUw9kzlN<27lQ8*Zk_+ z`v-4wg&RWH(Vi@MEtk3cJL06gaw4xC+fhnM1D(vx;*j&tK)62m1=#M5E(Y1Y-rbQc_(=G{Z2R@zVsC~kdGNtBBb@M~{4)LPItcxhr{`LGV;M;@#v z^cB>QJczoKhK5G9p@G56n%V=sq-OG%*#dq7-|9Cebt*EIb8(_Gte2UcrH}N)kvZPe zd=fW%84NzO$k-^XCnt0?H04Qf^fYO;Z0`5vPAgAS$j``Jww~9s#%2ujuYa_Nz7ia3 zm=!wS`O)gIS)^JSwzj?=nx@E)1MQ8ls&iUFiX)4`M4aCdqOPQJpP48%rwhm^_6ovz zfgJne+qZK)rjf6%uC8c8Wt-GNh39Ph(}iYI-uqMTj(L7~u%i%A5eLB#HBOJy`Mm3} z2tOH(tQdJLi{{!4~O>vOMZBOo~jy1Ld=W23JqDJs^)!qHKS+?Ktao&Eg} zR=t*|76lhq5N!KVy?}QZ&=s~=(qT$f!b;(p83_39JrT^Me(A99BXB0a&jNxR9hmbV zcQFcy6gR#WkBrDWiLvD=Sy!ypPXc+A3f~iC_mRk(Rx*XIuHN1|wP(+siB{--i1Rz$ zus~709<&EtUS1v?{b=P|@VzITzNw~!Ju?x1QoMza@T5y(RpL*hgm2rs6%{K`A!w|V znt_V-th=GHuC|tXPRLbDh?-|PN(--|?*RO3sfLl%8g+1Qa)=G;;R3k~c68&6C zJ-j_V&)oC#^77cxCZf3A&vr(WyBor@ydRj<&km)SMRy{+!`?R>KIO6K{$n}W;&ya& zw59}^5cscX$t_(v10H4lMsxa^7YzgQ?oH!T@Z7gbwNnv|i#Q7li_n{Z^1x51x#eYJ zGb^jd)9!}NQA#sHnaRuGyonA_yEBWu#?)D;$v=v%XaxkNSyk;p*22QV#?H=8(f0N> zIu7Hcai@p1iG{_wkre$*eZhr)b^eJOJ$f!78xM(03SNn#>UZV0IwB8W8!2I7(>I(J zORsbd3@Wp;vV5b5tuxU1N53yD#Zm81-8fh*xf_uEw5c%Zd;T8lLzzFU;_hAL|A85e(R)C#Qp1-Bx0?GKGGGNp( zs<6}Y_OnEWJxLra?)hE^(r4=R?~F=4l53;{p{9Vw^~Rrsd2o~3(phiAF5~3HVD*2U zf)Y2y?QnnSEj|eXeSUVf1S4t?FZFn&RqXiCffN6cDxRVcLys$by!c{ym_4B(PP7Xn zjS#RL`W8mhVte!V7H!sz8{z)XlzvXsMc;h!EBPQym23NA)BdpLWzyTL(+(97RaI}V z`G>~F@WwKBE4w5fwa0EM^-ZUE^1|dyhn2U=43>2a3UeAL)(+^4lr|P{uOK~$ix#W; zJ=>R&w+p8glyY$myHpx#{%=soq%D(i&;F&w#lN&(d%eRSDP-*IDs|1wddv+LXeeRG zssZ~!>tJeP4img#K?1J=Uu}Gd^aZwT`qL5`*NG9Q_wHQq40BfA=ipu{I>hgW#8!1u z@`n6HnH297BOf}x51h=u6A{_E(hjSCm#{D~{RjyOaY+z3FPs;-DR5&nbqp?@fn>mh z)_6f1DqS|}oc?DTKBfIbGy?+O1x3ywOW&`PGKW&VYkC-rT(Gsf6DoO2BIDFab~&>k z7p_s91`f_Uw284RUGaP&0cR8GYLXy4zkUDy9mvr} zV#pi@(ol(QG$nVLUdLxU{WobYHU~wyKE&$Biu~tN`oX8sLUlEyO^e1&NV^l`CUv}$ zfHq2DNoS&EVvx7sCZpES@$ zP|6G^7uR8k^ya66izh5-W*%K{2zEvfiLUsfq5mq@uyRBopVzS!ir_oyQ@r{%Mewen z=yhoIOQtWGAV@Q)>XW9NqZ0NMl!~F`A{t>jIpnii)b`B)hw&qOz~|jT5rx;7*`ejS zUnF%ue1GD1yy6>;?vVrwKD`f||Ju@qCeI;P=15l-!G%*R$kI&Q zT^YRQXr6BOd}qg$#zK=R1`6__n{lEh^eFOURN+{y%-qC_8-7A3;WIJ81)h2@IBsTc zen*D9qph%LuNyuuOi(@(=l_JeXDQqoeUelr)&eft+s7e}_@gF<6yw(tW=a_8#6Vc2 zc$x^u>DEb$Wh2%GkYzlXgnmpwubvP(o6&Jdgz*c(G3oBqq)2 zz);iVV@dM49q;sS&gr+x*B`^8%gnY^+=imR6J0+$@)h}LkH^fIVg(|pkv30GFyh)e z{%aqSSpzZ@C)8}^&g{DJ>~w!8;Bz2RwAj|xFNF^6Y*=mbMoy~)>ZOs=L@saG%O@JK z{Qe-95;pKB`$XgSCuIY3^Z`%YgfhO@f~JC;kZjvohQ-pC)q|$agKydy`_2msq7ytY zYDEo)R}WtXad5Xr9s4Ye;?Bzl<}C#Oh_zBJu+KBLU0tp^G%kK$J0wd1irRgj>Uc)Y z`tp6<#^l(odXNL-&o0`q3m3BFmlz8NUq51(;TK`OoE81uWN6%!ZJgG9SBK!E=8|1s zl(_B=q2k-o0df0Ud=%2qN1AL6yoVDRJ5d^c5pVx3QM4qK%L*qoht5%_u}eG^cpNb} zwOfydd$RVnrhR-6i~P_B#BhYo>CDGBmJX;jWW?VVOy`)G?^9$6;|V(JhRIuhp<`%P z^mupPY^6bbtLzjIXM8j@R~j>4I=&iCbeyfzk8qUDh#Id9_bmD#uJ^9xXR?vIi*(di zMgD%g(z&?7^dFau{l&w<2)ue(IfIX!y9>dHxxxTm5sj&q<4Ec7hBe=_6Mfuj4qW=H zfZ0-8BWK%%_N}T$jP$L~7&Le8AwGF9lEzDQC8_R!p@-NP73#_;G?~Q1vQk9U<71Hv zBw|iyDs{Bw;Y4(q z-ml$CYp-`?X!kAgh~81Nj-ze9z#kd57W<%YXvKvCP4LVh)Q!tf_N7WAyB1G^96>||nA|ry)|19l5jq%esTp9OG znt5@z3B^u%c~jY3fs|twI={(%F04aS>6@eCV>MjL)*;a z$I^?xVr5kPZ{;P=v}^CJ#I;i`5`;WPe_GQJCP@#eN38k(tlY)>u9;GIc$moT;m>m% zCR6TM$!m|PiY}MINpsa$LUxR?ra(Hal=Y=SLeVeMjdg=MmKUbZhaz{>PDfo z=d*=Wy`=xoNP4{Quy*;oHEK5|(Y)$|QqlPpu!j}SJxD$@kX6V<6dx{Ey&d_*KIPa3 zU4^52NJY5gR1iK-TZ75y5^GIo94-X2!awIdU4e|r;J#f~iO0qWo5l(&(mzcHu}PhS zz4>E|jUYBjhF4y6OTOtz@@dpmpA!#W0>&60;3D2s7%YAo%JFP0g_ffx>z*`1kF=K{ zDUZ>eRYoh61oWDS6%@&+3_^dM2EvX+mmxyOfiq(Nzwa}GiO^p|0PyMm`U1R7yO5YY zQpD|AEx3llCsgct<9gZ2Ef*_1J}>n4)OLZ~Ns*@Zb~yfNqr%iC_Geu0VdiOz?~5l& zfj5SZE9nKjamlr~`xn+-PGxOy(Y-X#SVH2Nsw>aReHaO1Q_eG`B;Z;T-R6RrPvWWP z=2|2%7zPm*4rS-t#7uRt(%ekM*)lO0RWukiT^-Y%l+}rN%SeJ-+FFIl7bn|f;^!ui zRhd3oVj8SXa-uNX3Yy#bq#Sg>^!{B(gq5Xq^ud7!D(H$n*liCB6Rspo07UBI4-w54 z?(2&XrH$y#)P_827haBt&n?03UEJYqsx|haUod-!&x@j!&p0cjd?$(tZdp~;;&jY< z$SqHK`LhQih++6oeo0t<6Z$C426;In4}C)|QLQyTsh|+g(RJ4J<^7teps9{^+wh;_ z6vsIe{y!@P^xTz|EHw=q;DPYxlw3*QbHS80_*ZnKgA$WNkk#oxV&mF`bzk3QbJGNY zXB{oyY4gqT0^XTvrw5T&g;Oz)azQ^l6VD=!mem0)E6?9annZr$G}I^<+apCkwJ22J zV3K<%rtPhco>FULr9mK)lVzi~Kg10de6rj6meLW-F=19f;NvN*z$Eg-{ zrHwaQHXkA0$9gMxD?ZL+$wz?~;mw2B>MD7dsAoRr(bP_1HaY33yyV?|?;R9a_?9f> z?A2iYT9U0JkIi5Pl&kb(w_>Ac%*u*eW~K`|Qhyiarx(RLJ$HOrrZV63rG@{iXNx9! zq`)5|!=1`n&Od=tfzA5)PfwR}l^KZwDf^f4lw%EV%n-N|hMs%x+(7+b)f&&dX;VYTlr0y@(w=_i|}yP;6XE3^DDVs(X55p2S3XgLZdD zpiEZ(TBr#nru|jVqH2j+byD&P**?o`6y*PD_yoj+* zL}6BzZ#*-%TR2O9Cq>sTDS}K&M1=Qr1;5T8xCOz*1|$)P0ey{D^Rm?iF<2m zmuqXq#yy*+gmhlujLMV9RCH2GzIoFmNCY1~zbfeL)o^hmH{5_`=Yj{$Kk79lW`EA1t`izGr= zxqUlORO!S5&)AG47&87Y%mNcD>l+f5)V{f(slD=oA+T`@ey}$E#ivQ_tJ%(?CoDqC zDT3mszM(GCGw7XcpR+MR+5K9u{)Uu8wmB{9o8u>vr;OnJa;CxgdL;8h`?>5!2EU;f zJ$~PQbX0b8`9iR;u-W$IUwHGHxNLzyiD&kRa1N#MisS1gRzn^^lxiGShxFd-nZY&6 zYn(CE7ELW~J`Y}zX9D88ug~`-Sg@x+Sud(Tg%2@v%qj$X&UtHQ{V#{b(1%TT+{D1x zR3fRiRsrTnzViX{Qjj;*56N8I_u|AH1*+@lMqte`+exkJbq?$$}2ORe;B+LIU@&lxJBzb zgFH`u$0KF#-=U+ZVb@tpiHb~3D=qw!?T^g-gW`mSMld}EjDJ3b*>5%(XK@?=$W>tw z+LYmKS$v81HZUE#;7RqXx6F@Y1$cKQPdd*bG^f(zGJz`p4oT65aUVK25+&&upg+2V zoAP52xWfo#p#+V}%H`9uy`f5)hC`8~wXO?n9JrWU2>n)+GhMHHRzw~y)_e1bY!Wf4 znw?UI-he#?@(;BCVpYVm>Goz5zE06K@(x=WG$N^M0x|cDh!J)uFut^G*QF)tbo3?R($q=GehN4ktLnWvgmEKN0*zr{ zVys(`KtKEEX8vJ|&C{HL=Mf8&`clmsQ9TSx&~N=UtZ>=!Qw-^*vB6*?>Y93=wA13! zC4I5Zf6Q2i)B0zKc}uB(x^Dji%_o&OBVv#eowoH6zlCoYuHEM$TQmsrBud zs5S5u*e-?v&@0A6Mu0uwph}4mrS+k}O|2POjahM|#qf18FBR(PFhJ^pgTCi;Ctb-Wx5dxLCl+@W8smL4<#ovu>XlPhsyG_;l=ZpY25Og>L zuW8#aO#qt&(AgYN<~K1$T>MGjbu5dezW%yW>j~{`Z0|SqBZ{^EWus!kMV#&nJ3}_4p zigC~B#PQu6dpVRt3<$J!xnz~I4&e2Yen;2Qb|#ZCL<3-%YI%|yc&4tKH!bqpJLqLM zz-m7AKiw!4_FXbD!kPuPEG{AOPb=H5@L6;KI_OwPW$(>ihj@y&f|b>#Nqv3&6Rao& zla4?e!!SI6m;>WLgMEE3p8?3NLrrZE3+%`RgiFB1yt+$|a8B7ZchB3u2lnvUrGNS3 z1EnJrilC#UT-LU<46_Uky$=S+6>8X#4=8DjDm_N)PMYIqs!j89VP9Wgx_Re*!8Nr< zK)^B`J$+cfbb+`QfYn$Gi9brfTyO})nazp}0ECn?UHQ&srs(Bxm(RBNr8o)zOSwT; z+~%FA@R#&608bZ^C?FE|0%DU8573ycb|#O&Ru^&-Mbk2F!9M=}&p~Sj06eX2XZQ0t zC9K#k>1)}UvN{O|)5yz|-H=CPU@m$$Z-w^v@^aMgX!&f{_C;XAuGkWovZ7fV**k(v`8#~+*$?g zeI0un_=!Qr!NFlOg-)_RTeUJThNuIq{B8N!H=GcTpWcA|84^dOf%E7WE{=TV{sJyK zzpwzmAjttl0aE{I0enFSVSu)|`Ot9qADM`cklTGPrWu{-6?fRZNl!x){O{9}<>czT z)55L zy9QfEj#x^osp<`+rdMn{%11Wruke!ZE4pOGoKNlT8%EfJ#ivvVtGW4k7SPA5n-J%x z+{R6@-eE6cM?$tGu_ew7e4Ps&}AoqdsIVKg{9|8S>xWnnlIu zI?b5E02lk#@-emT)2EjbQc^DJi+yRJmbB7Rrk;U;a3vFyA9Mv5)}TZxn8GfFTI6=j zG3Sc^Av=zMeol`zISJzJ4sLAy?Exyo!G5Q`UV&1jlI}W|Xoq56sPT=v`+&crBfG$l zD|yI-8*%Ra{e6Dq;Fd*R)%&DoMNot%1_j!`II4#>gV8z*iP|slFE79fOki5AEr0rk z!6!v|F{|y_C49B;O403(ip;B?hF}He^v*-$x#i5XWJpP><3=oS;!ePc^O73G=t3Mi zu+49z(GqF6QQU!7LuHuP&T*|frqQ;`>sArB9Y)*DZtiTDRV9iKkADp3@u zcy0$vABFCn1t+^uBQwFh1b~s7A08fFW#!~-HnJxK9bLd&d#MIX!Lj3(-%$TbV!!B? z^p0p;ea?PL1)vPj8vG9T+?Z1-y@+*d;q|Q?-7l9wXayms3q=X>@oA^C1r+q)Yh;5p z)_Gc(QG-}w$e&5gH_E%0PNz&MuiU=#3ze1jE0(Y`R;i=waez1?9vq3?%wExKKI%O) zwbBZy%94#}K8nl%cv% z1F>rl;x8}8jO&86B&YrNZq$L-P&H=8GkEUyV8*ea$8Lsiz?+UI_WvTnM|{^00l3~l zLPA1BkvYA9{kWHw*z zjgGza?F@u*5GuSl|42nFdnc8pdjGMfN3y_qH+loI$1(mTaaFE#)?Ex4Cx*nMg4yj7 z(neY9)kP9C((F@4Wp2Qa2mihb;s@X|t;e(!%z120ZX1P^{)W#0oNQrDn+( zXQ=4u{V*{xEpcLG{hjg_!?|fF{Rsw*3%0v*40^u>>Z5-me_ziz)dq6OfgSccUH>k& z-}>u1O7&sG+u{l+YSN1q=!mBPx#|Y!Wbgoz5Cb7u zv`GS4UKwnz98SF|+#S3%d~YnYl=o+0?S5NVs;Lk2iQhG&-AcHHDu)%o(EkHOCpl>j zwLJ+SzAXL&J z`-wSybF+JlH~!Mp;CgQiB;C0q~vIN`=TB6gyzj8C1 zG|H6QGx=3~^V?-17qP9F?Ft79j-NpF|FrFKt=9weBLXj8=bQ-hckyrUx>)D+tjvE7XGpZp{@?<&4>XF&=bR$`W5u_?I+XAN$M#NHf0yc~;PijxA;|Fca#aYler1 z$5lD`2T2tTCpBa2)^pl|Y*b=3TyZT|8p>OuOIy_M6wuwt;M?rWYi6mB0XCTQj(FCr zqw}GyL;yuJ#Gh0L1Tj6p-Mp1OH6sCeuE{eK2ScIIV4%XdQ^J5%*~XST>u^~-V;!sv zo9iuTr+pfqlKa0Np+N>dZ3aqDd@b!os6pEk8 zA|xVW7}U3+Flg<`{ri%5jJ^9S>g{>_fFVhHG%I;lLU*EmKLG!@R zNdM5;+hvARQDCU-G-){Qdjj&9?f@Tui3 zlcAp8u0bdBSXucZT6ibRVM2j2NLoo^crXMwVS*9DeNqu z0P?6|?)&3u?hJB)DksFzaUx(VeYLf{I~_d@YpPH(=QgCjGOsE$N1)v+Ql7CgvnQHJ z6cGB&HdyrFzquLMZ&8!}EUUn@&i~FF*M1{(ldmOA0w~3N#()rrb8NXo42iU_4X+$| z%`xgbl_!mi4!j_IcaA%7D1904AXgT-k*bcWB{?Y}$10I?Ag2Q%vF zi!nDbzoNmjzgIPf-2)yLR}Mg@6a_-PPYq9`F;u^Dl%|#Hoe8;1z4|QcwmK8KV^(XO z-wiWcJRZ28DY!3+K-UIM6^PFp85;UwAn&+9)EnEyV?b+Zl6{#mJv|-ee)&Y&=eMxb z){}z*??C8`<)Ic011~#q$b;b0hwW|fSD;7j$8!ICb4sNQ!Wg-`xrmZ3KGg%-=m-JB ztJud(pxfGLKhEDdyWY6Jy?R_Pc|hF08dFPD>r3)R?yrVHe+I9H?#UJFOVJOUT>e|P zy8Bnv+hs)}1O5gmL5|M?q$}CKj8|sT(2aLB1LFitYQXnWNxE^ly|nMo4&MIYLs9P( zrgYdsj?ilRvc Date: Sat, 13 Dec 2025 13:54:34 +1100 Subject: [PATCH 2/2] Bump version --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index af1aa092..9b43c3b2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ $group=io.github.kurrycat.mpkmod $jitpackGroup=com.github.mpkmod -$version=2.2.0 +$version=2.3.0 $apiVersion=1.0 $modBaseName=mpkmod $commonBaseName=mpkmod-common @@ -8,4 +8,4 @@ $vendor=mpkmod networkApiVersion=1.0.1 -org.gradle.jvmargs=-Xmx4096m \ No newline at end of file +org.gradle.jvmargs=-Xmx4096m