diff --git a/common/src/main/java/me/drex/antixray/common/mixin/ClientboundChunkBatchStartPacketMixin.java b/common/src/main/java/me/drex/antixray/common/mixin/ClientboundChunkBatchStartPacketMixin.java deleted file mode 100644 index dd9bc52..0000000 --- a/common/src/main/java/me/drex/antixray/common/mixin/ClientboundChunkBatchStartPacketMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package me.drex.antixray.common.mixin; - -import me.drex.antixray.common.interfaces.IClientboundChunkBatchStartPacket; -import net.minecraft.network.protocol.game.ClientboundChunkBatchStartPacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(ClientboundChunkBatchStartPacket.class) -public abstract class ClientboundChunkBatchStartPacketMixin implements IClientboundChunkBatchStartPacket { - - @Unique - private int antixray$batchSize; - - @Unique - private int antixray$readyPackets = 0; - - @Override - public void antixray$setBatchSize(int batchSize) { - this.antixray$batchSize = batchSize; - } - - @Override - public synchronized void antixray$notifyChunkReady() { - antixray$readyPackets++; - } - - /** - * We need to delay the chunk batch start packet until all of its packets are ready. - * This is to ensure that all packets between batch start and end can be sent to the client immediately, allowing - * the client to correctly calculate its desired batch size. - */ - @Override - public boolean isAntixray$ready() { - return antixray$readyPackets >= antixray$batchSize; - } -} diff --git a/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkPacketDataMixin.java b/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkPacketDataMixin.java index a74874e..bff89d0 100644 --- a/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkPacketDataMixin.java +++ b/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkPacketDataMixin.java @@ -20,28 +20,14 @@ @Mixin(ClientboundLevelChunkPacketData.class) public abstract class ClientboundLevelChunkPacketDataMixin { - @Shadow - @Final - private byte[] buffer; - - @Inject( - method = "(Lnet/minecraft/world/level/chunk/LevelChunk;)V", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/network/protocol/game/ClientboundLevelChunkPacketData;extractChunkData(Lnet/minecraft/network/FriendlyByteBuf;Lnet/minecraft/world/level/chunk/LevelChunk;)V" - ) - ) - private void setChunkPacketInfoBuffer(LevelChunk levelChunk, CallbackInfo ci) { - // custom arguments + // 1.20.1 - Moved setBuffer to extractChunkData, because mixins can't inject early enough into constructors + @Inject(method = "extractChunkData", at = @At("HEAD")) + private static void initializeChunkSectionIndex(FriendlyByteBuf friendlyByteBuf, LevelChunk levelChunk, CallbackInfo ci, @Share("chunkSectionIndex") LocalIntRef chunkSectionIndexRef) { ChunkPacketInfo chunkPacketInfo = Arguments.PACKET_INFO.get(); if (chunkPacketInfo != null) { - chunkPacketInfo.setBuffer(this.buffer); + chunkPacketInfo.setBuffer(friendlyByteBuf.array()); } - } - - @Inject(method = "extractChunkData", at = @At("HEAD")) - private static void initializeChunkSectionIndex(FriendlyByteBuf friendlyByteBuf, LevelChunk levelChunk, CallbackInfo ci, @Share("chunkSectionIndex") LocalIntRef chunkSectionIndexRef) { chunkSectionIndexRef.set(0); } diff --git a/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkWithLightPacketMixin.java b/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkWithLightPacketMixin.java index 3811e17..4fd18dc 100644 --- a/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkWithLightPacketMixin.java +++ b/common/src/main/java/me/drex/antixray/common/mixin/ClientboundLevelChunkWithLightPacketMixin.java @@ -29,9 +29,6 @@ public abstract class ClientboundLevelChunkWithLightPacketMixin implements IChun @Unique boolean antixray$ready = false; - @Unique - IClientboundChunkBatchStartPacket antixray$batchStartPacket; - @WrapOperation( method = "(Lnet/minecraft/world/level/chunk/LevelChunk;Lnet/minecraft/world/level/lighting/LevelLightEngine;Ljava/util/BitSet;Ljava/util/BitSet;)V", at = @At( @@ -44,9 +41,6 @@ public ClientboundLevelChunkPacketData setChunkPacketInfoArgument( @Share("controller") LocalRef controllerLocalRef, @Share("chunkPacketInfo") LocalRef> chunkPacketInfoLocalRef ) { - // custom argument - this.antixray$batchStartPacket = Arguments.BATCH_START_PACKET.get(); - final ChunkPacketBlockController controller = Util.getBlockController(chunk.getLevel()); final ChunkPacketInfo packetInfo = controller.getChunkPacketInfo((ClientboundLevelChunkWithLightPacket) (Object) this, chunk); @@ -82,10 +76,6 @@ public void modifyBlocks( @Override public void antixray$setReady(boolean antixray$ready) { this.antixray$ready = antixray$ready; - if (antixray$batchStartPacket != null) { - // Chunk packets may not have a batch start packet, if they are manually sent by other mods - antixray$batchStartPacket.antixray$notifyChunkReady(); - } } diff --git a/common/src/main/java/me/drex/antixray/common/mixin/ConnectionMixin.java b/common/src/main/java/me/drex/antixray/common/mixin/ConnectionMixin.java index dd7e549..0a39d28 100644 --- a/common/src/main/java/me/drex/antixray/common/mixin/ConnectionMixin.java +++ b/common/src/main/java/me/drex/antixray/common/mixin/ConnectionMixin.java @@ -1,88 +1,83 @@ package me.drex.antixray.common.mixin; -import com.google.common.collect.Queues; import io.netty.channel.Channel; import me.drex.antixray.common.util.Util; import net.minecraft.network.Connection; import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; -import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Queue; -import java.util.function.BooleanSupplier; -import java.util.function.Consumer; + @Mixin(Connection.class) public abstract class ConnectionMixin { - @Unique - private final Queue antiXray$isActionReady = Queues.newConcurrentLinkedQueue(); @Shadow private Channel channel; + @Shadow @Final - private Queue> pendingActions; + private Queue queue; - @Shadow - protected abstract void sendPacket(Packet $$0, PacketSendListener $$1, boolean $$2); + @Shadow protected abstract void sendPacket(Packet $$0, PacketSendListener $$1); - /** - * @author Drex - * @reason Wait for chunk packets to be ready (fully obfuscated) - */ - @Overwrite - private void flushQueue() { - assert pendingActions.size() == antiXray$isActionReady.size(); + private boolean flushQueue() { if (this.channel != null && this.channel.isOpen()) { - synchronized (this.pendingActions) { - while (!this.antiXray$isActionReady.isEmpty() && (this.antiXray$isActionReady.peek().getAsBoolean())) { - pendingActions.poll().accept((Connection) (Object) this); - antiXray$isActionReady.poll(); + synchronized (this.queue) { + while (!this.queue.isEmpty()) { + if (this.queue.peek() instanceof ConnectionPacketHolderAccessor packetAccessor) { // poll -> peek + if (!Util.isReady(packetAccessor.getPacket())) { + return false; // Return false if the peeked packet is a chunk packet which is not ready + } else { + this.queue.poll(); // poll here + this.sendPacket(packetAccessor.getPacket(), packetAccessor.getListener()); // dispatch the packet + } + } + } } } + return true; } @Redirect( - method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;Z)V", + method = "tick", at = @At( value = "INVOKE", - target = "Lnet/minecraft/network/Connection;sendPacket(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;Z)V" + target = "Lnet/minecraft/network/Connection;flushQueue()V" ) ) - public void redirectSendPacket(Connection instance, Packet packet, PacketSendListener listener, boolean flush) { - if (this.antiXray$isActionReady.isEmpty() && Util.isReady(packet)) { - this.sendPacket(packet, listener, flush); - } else { - pendingActions.add(connection -> this.sendPacket(packet, listener, flush)); - antiXray$isActionReady.add(() -> Util.isReady(packet)); - } + public void replaceFlushQueue(Connection connection) { + // Calling our own implementation + this.flushQueue(); } - @Inject( - method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;Z)V", + @Redirect( + method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;)V", at = @At( value = "INVOKE", - target = "Ljava/util/Queue;add(Ljava/lang/Object;)Z" + target = "Lnet/minecraft/network/Connection;flushQueue()V" ) ) - public void addToActionReadyQueue(Packet packet, PacketSendListener listener, boolean flush, CallbackInfo ci) { - antiXray$isActionReady.add(() -> Util.isReady(packet)); + public void noop(Connection connection) { + // no-op + // The call to our own flushQueue method has been moved inside the previous if statement (see below) } - @Inject( - method = {"flushChannel", "runOnceConnected"}, + @Redirect( + method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;)V", at = @At( value = "INVOKE", - target = "Ljava/util/Queue;add(Ljava/lang/Object;)Z" + target = "Lnet/minecraft/network/Connection;isConnected()Z" ) ) - public void addToActionReadyQueue(CallbackInfo ci) { - antiXray$isActionReady.add(() -> true); + public boolean redirectIfStatement(Connection connection, Packet packet, PacketSendListener listener) { + return connection.isConnected() && this.flushQueue() && Util.isReady(packet); } -} +} \ No newline at end of file diff --git a/common/src/main/java/me/drex/antixray/common/mixin/ConnectionPacketHolderAccessor.java b/common/src/main/java/me/drex/antixray/common/mixin/ConnectionPacketHolderAccessor.java new file mode 100644 index 0000000..f6c4147 --- /dev/null +++ b/common/src/main/java/me/drex/antixray/common/mixin/ConnectionPacketHolderAccessor.java @@ -0,0 +1,15 @@ +package me.drex.antixray.common.mixin; + +import net.minecraft.network.PacketSendListener; +import net.minecraft.network.protocol.Packet; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(targets = "net.minecraft.network.Connection$PacketHolder") +public interface ConnectionPacketHolderAccessor { + @Accessor("packet") + Packet getPacket(); + + @Accessor("listener") + PacketSendListener getListener(); +} \ No newline at end of file diff --git a/common/src/main/java/me/drex/antixray/common/mixin/PalettedContainer$DataMixin.java b/common/src/main/java/me/drex/antixray/common/mixin/PalettedContainer$DataMixin.java index 71364fb..0441ce7 100644 --- a/common/src/main/java/me/drex/antixray/common/mixin/PalettedContainer$DataMixin.java +++ b/common/src/main/java/me/drex/antixray/common/mixin/PalettedContainer$DataMixin.java @@ -5,7 +5,6 @@ import me.drex.antixray.common.util.Arguments; import me.drex.antixray.common.util.ChunkPacketInfo; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.VarInt; import net.minecraft.util.BitStorage; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.Palette; @@ -41,7 +40,7 @@ public long[] initializeChunkPacketInfo(BitStorage storage, Operation or chunkPacketInfo.setBits(chunkSectionIndex, storage.getBits()); //noinspection unchecked chunkPacketInfo.setPalette(chunkSectionIndex, (Palette) this.palette); - chunkPacketInfo.setIndex(chunkSectionIndex, buf.writerIndex() + VarInt.getByteSize(storage.getRaw().length)); + chunkPacketInfo.setIndex(chunkSectionIndex, buf.writerIndex() + FriendlyByteBuf.getVarIntSize(storage.getRaw().length)); } return original.call(storage); } diff --git a/common/src/main/java/me/drex/antixray/common/mixin/PlayerChunkSenderMixin.java b/common/src/main/java/me/drex/antixray/common/mixin/PlayerChunkSenderMixin.java deleted file mode 100644 index 0bb101e..0000000 --- a/common/src/main/java/me/drex/antixray/common/mixin/PlayerChunkSenderMixin.java +++ /dev/null @@ -1,60 +0,0 @@ -package me.drex.antixray.common.mixin; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import com.llamalad7.mixinextras.sugar.Share; -import com.llamalad7.mixinextras.sugar.ref.LocalRef; -import me.drex.antixray.common.interfaces.IClientboundChunkBatchStartPacket; -import me.drex.antixray.common.util.Arguments; -import net.minecraft.network.protocol.game.ClientboundChunkBatchStartPacket; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.network.PlayerChunkSender; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.level.chunk.LevelChunk; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.List; - -@Mixin(PlayerChunkSender.class) -public abstract class PlayerChunkSenderMixin { - - @WrapOperation( - method = "sendNextChunks", - at = @At( - value = "NEW", - target = "()Lnet/minecraft/network/protocol/game/ClientboundChunkBatchStartPacket;" - ) - ) - private ClientboundChunkBatchStartPacket addBatchSizeArgument(Operation original, @Local List list, @Share("startPacket") LocalRef ipacketRef) { - ClientboundChunkBatchStartPacket startPacket = original.call(); - IClientboundChunkBatchStartPacket iPacket = (IClientboundChunkBatchStartPacket) startPacket; - iPacket.antixray$setBatchSize(list.size()); - ipacketRef.set(iPacket); - return startPacket; - } - - @WrapOperation( - method = "sendNextChunks", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/server/network/PlayerChunkSender;sendChunk(Lnet/minecraft/server/network/ServerGamePacketListenerImpl;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/LevelChunk;)V" - ) - ) - private void setBatchStartPacketArgument( - ServerGamePacketListenerImpl serverGamePacketListenerImpl, ServerLevel serverLevel, LevelChunk levelChunk, - Operation original, @Share("startPacket") LocalRef ipacketRef - ) { - // Pass the batch start packet to the chunk packets - var previous = Arguments.BATCH_START_PACKET.get(); - Arguments.BATCH_START_PACKET.set(ipacketRef.get()); - try { - original.call(serverGamePacketListenerImpl, serverLevel, levelChunk); - } finally { - Arguments.BATCH_START_PACKET.set(previous); - } - } - -} diff --git a/common/src/main/java/me/drex/antixray/common/util/Arguments.java b/common/src/main/java/me/drex/antixray/common/util/Arguments.java index 3813e72..52dbedc 100644 --- a/common/src/main/java/me/drex/antixray/common/util/Arguments.java +++ b/common/src/main/java/me/drex/antixray/common/util/Arguments.java @@ -1,6 +1,5 @@ package me.drex.antixray.common.util; -import me.drex.antixray.common.interfaces.IClientboundChunkBatchStartPacket; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; @@ -13,5 +12,4 @@ public class Arguments { public static final ThreadLocal CHUNK_ACCESS = new ThreadLocal<>(); public static final ThreadLocal CHUNK_SECTION_INDEX = new ThreadLocal<>(); public static final ThreadLocal PRESET_VALUES = new ThreadLocal<>(); - public static final ThreadLocal BATCH_START_PACKET = new ThreadLocal<>(); } diff --git a/common/src/main/resources/antixray.common.mixins.json b/common/src/main/resources/antixray.common.mixins.json index ff7fa85..d6641d0 100644 --- a/common/src/main/resources/antixray.common.mixins.json +++ b/common/src/main/resources/antixray.common.mixins.json @@ -6,15 +6,14 @@ "ChunkAccessMixin", "ChunkSerializerMixin", "ClientboundBundlePacketMixin", - "ClientboundChunkBatchStartPacketMixin", "ClientboundLevelChunkPacketDataMixin", "ClientboundLevelChunkWithLightPacketMixin", "ConnectionMixin", + "ConnectionPacketHolderAccessor", "LevelChunkSectionMixin", "LevelMixin", "PalettedContainer$DataMixin", "PalettedContainerMixin", - "PlayerChunkSenderMixin", "ServerLevelMixin", "ServerPlayerGameModeMixin" ], diff --git a/common/src/main/resources/architectury.common.json b/common/src/main/resources/architectury.common.json index 4d74ac4..de35730 100644 --- a/common/src/main/resources/architectury.common.json +++ b/common/src/main/resources/architectury.common.json @@ -13,10 +13,6 @@ ], "net/minecraft/class_8042": [ "me/drex/antixray/common/interfaces/IPacket" - ], - "net/minecraft/class_8739": [ - "me/drex/antixray/common/interfaces/IClientboundChunkBatchStartPacket", - "me/drex/antixray/common/interfaces/IPacket" ] } } \ No newline at end of file diff --git a/fabric/src/main/java/me/drex/antixray/fabric/mixin/imm_ptl_core/ClientboundCustomPayloadPacketMixin.java b/fabric/src/main/java/me/drex/antixray/fabric/mixin/imm_ptl_core/ClientboundCustomPayloadPacketMixin.java deleted file mode 100644 index 6f93937..0000000 --- a/fabric/src/main/java/me/drex/antixray/fabric/mixin/imm_ptl_core/ClientboundCustomPayloadPacketMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.drex.antixray.fabric.mixin.imm_ptl_core; - -import me.drex.antixray.common.interfaces.IPacket; -import me.drex.antixray.fabric.interfaces.imm_ptl_core.IPayload; -import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(ClientboundCustomPayloadPacket.class) -public abstract class ClientboundCustomPayloadPacketMixin implements IPacket { - @Shadow - @Final - private CustomPacketPayload payload; - - @Override - public boolean isAntixray$ready() { - if (payload instanceof IPayload redirectionPayload) { - return redirectionPayload.isReady(); - } - return true; - } -} diff --git a/fabric/src/main/java/me/drex/antixray/fabric/mixin/imm_ptl_core/PacketRedirection$PayloadMixin.java b/fabric/src/main/java/me/drex/antixray/fabric/mixin/imm_ptl_core/PacketRedirection$PayloadMixin.java deleted file mode 100644 index 33be18c..0000000 --- a/fabric/src/main/java/me/drex/antixray/fabric/mixin/imm_ptl_core/PacketRedirection$PayloadMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.drex.antixray.fabric.mixin.imm_ptl_core; - -import me.drex.antixray.fabric.interfaces.imm_ptl_core.IPayload; -import me.drex.antixray.common.util.Util; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.common.ClientCommonPacketListener; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import qouteall.imm_ptl.core.network.PacketRedirection; - -@Mixin(PacketRedirection.Payload.class) -public abstract class PacketRedirection$PayloadMixin implements IPayload { - @Shadow - @Final - private Packet packet; - - @Override - public boolean isReady() { - return Util.isReady(packet); - } -} diff --git a/fabric/src/main/resources/antixray.fabric.mixins.json b/fabric/src/main/resources/antixray.fabric.mixins.json index 6393d5d..831d83e 100644 --- a/fabric/src/main/resources/antixray.fabric.mixins.json +++ b/fabric/src/main/resources/antixray.fabric.mixins.json @@ -4,8 +4,6 @@ "compatibilityLevel": "JAVA_17", "plugin": "me.drex.antixray.fabric.FabricMixinPlugin", "mixins": [ - "imm_ptl_core.ClientboundCustomPayloadPacketMixin", - "imm_ptl_core.PacketRedirection$PayloadMixin" ], "injectors": { "defaultRequire": 1 diff --git a/forge/build.gradle b/forge/build.gradle index 6699733..40ec31e 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -17,7 +17,7 @@ configurations { loom { forge { - mixinConfig "antixray.common.mixins.json" + mixinConfig "antixray.common.mixins.json", "antixray.forge.mixins.json" convertAccessWideners.set true } } @@ -32,7 +32,8 @@ dependencies { include(forgeRuntimeLibrary("com.moandjiezana.toml:toml4j:${project.toml_version}")) // Mixin Extras - include(forgeRuntimeLibrary("io.github.llamalad7:mixinextras-forge:${project.mixin_extras}")) + compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:${project.mixin_extras}")) + implementation(include("io.github.llamalad7:mixinextras-forge:${project.mixin_extras}")) // Allows running other mods in dev environment modLocalRuntime(fileTree(dir: 'runtime-mods', include: '*.jar')) diff --git a/forge/src/main/java/me/drex/antixray/forge/ForgeMixinPlugin.java b/forge/src/main/java/me/drex/antixray/forge/ForgeMixinPlugin.java new file mode 100644 index 0000000..e531554 --- /dev/null +++ b/forge/src/main/java/me/drex/antixray/forge/ForgeMixinPlugin.java @@ -0,0 +1,43 @@ +package me.drex.antixray.forge; + +import com.llamalad7.mixinextras.MixinExtrasBootstrap; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class ForgeMixinPlugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + MixinExtrasBootstrap.init(); + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } +} diff --git a/forge/src/main/resources/antixray.forge.mixins.json b/forge/src/main/resources/antixray.forge.mixins.json new file mode 100644 index 0000000..3b1785f --- /dev/null +++ b/forge/src/main/resources/antixray.forge.mixins.json @@ -0,0 +1,6 @@ +{ + "required": true, + "package": "me.drex.antixray.forge.mixin", + "compatibilityLevel": "JAVA_17", + "plugin": "me.drex.antixray.forge.ForgeMixinPlugin" +} diff --git a/gradle.properties b/gradle.properties index 1106297..d034121 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,19 +2,19 @@ org.gradle.jvmargs=-Xmx3G # Minecraft Properties -minecraft=1.20.4 +minecraft=1.20.1 fabric_version=0.15.11 -forge_version=49.1.0 +forge_version=47.3.0 neoforged_version=20.4.237 # Mod Properties mod_version=1.4.3 maven_group=me.drexhd archives_base_name=antixray -enabled_platforms=fabric,neoforge +enabled_platforms=fabric,forge # Other Dependencies -mixin_extras=0.3.5 +mixin_extras=0.4.0 toml_version=0.7.2 # Compat diff --git a/settings.gradle b/settings.gradle index 1657af4..d2620d8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,5 +10,5 @@ pluginManagement { include("common") include("fabric") -include("neoforge") -//include("forge") \ No newline at end of file +//include("neoforge") +include("forge") \ No newline at end of file