diff --git a/build.gradle b/build.gradle index 0e4933331..b47d08103 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 archivesBaseName = "$project.archives_base_name-${loom.getPlatform().get().id()}" -version = "$project.minecraft_version-$project.mod_version+v${new Date().format('yyMMdd')}" +version = "$project.mod_main_version.${new Date().format('yyMMdd')}+mc$project.minecraft_version" group = project.maven_group loom { @@ -37,14 +37,15 @@ dependencies { parchment("org.parchmentmc.data:parchment-${project.minecraft_version}:${project.parchment_mappings}@zip") } neoForge "net.neoforged:neoforge:${project.neoforge_version}" + compileOnly "com.google.code.findbugs:jsr305:${project.jsr305_version}" } processResources { - inputs.property "version", project.version+'+v'+new Date().format('yyMMdd') + inputs.property "version", project.version filesMatching("META-INF/neoforge.mods.toml") { - expand "version": project.mod_version+'+v'+new Date().format('yyMMdd') + expand "version": project.version } } diff --git a/gradle.properties b/gradle.properties index eab6b6d5d..3b7a579b9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,6 +9,7 @@ loom.platform = neoforge parchment_mappings=2024.11.17 # Mod Properties - mod_version = 1.4.147 + mod_main_version = 0.1.100 + carpet_version = 1.4.147 maven_group = org.thinkingstudio.sheet archives_base_name = sheet diff --git a/src/main/java/carpet/mixins/CustomPacketPayload_networkStuffMixin.java b/src/main/java/carpet/mixins/CustomPacketPayload_networkStuffMixin.java index e0fdf0975..91727dfb2 100644 --- a/src/main/java/carpet/mixins/CustomPacketPayload_networkStuffMixin.java +++ b/src/main/java/carpet/mixins/CustomPacketPayload_networkStuffMixin.java @@ -1,34 +1,34 @@ package carpet.mixins; -import carpet.helpers.CarpetTaintedList; -import carpet.network.CarpetClient; -import net.minecraft.network.ConnectionProtocol; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.PacketFlow; +//import carpet.helpers.CarpetTaintedList; +//import carpet.network.CarpetClient; +//import net.minecraft.network.ConnectionProtocol; +//import net.minecraft.network.FriendlyByteBuf; +//import net.minecraft.network.codec.StreamCodec; +//import net.minecraft.network.protocol.PacketFlow; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 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.CallbackInfoReturnable; +//import org.spongepowered.asm.mixin.injection.At; +//import org.spongepowered.asm.mixin.injection.Inject; +//import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +// +//import java.util.List; -import java.util.List; - -@Mixin(CustomPacketPayload.class) +@Mixin(value = CustomPacketPayload.class, priority = 9999) public interface CustomPacketPayload_networkStuffMixin { //private static void onCodec(final CustomPacketPayload.FallbackProvider fallbackProvider, final List> list, final CallbackInfoReturnable> cir) - @Inject(method = "codec(Lnet/minecraft/network/protocol/common/custom/CustomPacketPayload$FallbackProvider;Ljava/util/List;Lnet/minecraft/network/ConnectionProtocol;Lnet/minecraft/network/protocol/PacketFlow;)Lnet/minecraft/network/codec/StreamCodec;", at = @At("HEAD"), cancellable = true) - private static void onCodec(CustomPacketPayload.FallbackProvider fallbackProvider, List> list, ConnectionProtocol protocol, PacketFlow packetFlow, CallbackInfoReturnable> cir) - { - // this is stupid hack to make sure carpet payloads are always registered - // that might collide with other mods that do the same thing - // so we may need to adjust this in the future - if (!(list instanceof CarpetTaintedList)) - { - List> extendedList = new CarpetTaintedList<>(list); - extendedList.add(new CustomPacketPayload.TypeAndCodec<>(CarpetClient.CarpetPayload.TYPE, CarpetClient.CarpetPayload.STREAM_CODEC)); - cir.setReturnValue(CustomPacketPayload.codec(fallbackProvider, extendedList, protocol, packetFlow)); - } - } +// @Inject(method = "codec(Lnet/minecraft/network/protocol/common/custom/CustomPacketPayload$FallbackProvider;Ljava/util/List;Lnet/minecraft/network/ConnectionProtocol;Lnet/minecraft/network/protocol/PacketFlow;)Lnet/minecraft/network/codec/StreamCodec;", at = @At("HEAD"), cancellable = true) +// private static void onCodec(CustomPacketPayload.FallbackProvider fallbackProvider, List> list, ConnectionProtocol protocol, PacketFlow packetFlow, CallbackInfoReturnable> cir) +// { +// // this is stupid hack to make sure carpet payloads are always registered +// // that might collide with other mods that do the same thing +// // so we may need to adjust this in the future +// if (!(list instanceof CarpetTaintedList)) +// { +// List> extendedList = new CarpetTaintedList<>(list); +// extendedList.add(new CustomPacketPayload.TypeAndCodec<>(CarpetClient.CarpetPayload.TYPE, CarpetClient.CarpetPayload.STREAM_CODEC)); +// cir.setReturnValue(CustomPacketPayload.codec(fallbackProvider, extendedList, protocol, packetFlow)); +// } +// } } diff --git a/src/main/java/carpet/mixins/ExplosionAccessor.java b/src/main/java/carpet/mixins/ExplosionAccessor.java index 5b0875bac..60e6133e6 100644 --- a/src/main/java/carpet/mixins/ExplosionAccessor.java +++ b/src/main/java/carpet/mixins/ExplosionAccessor.java @@ -24,13 +24,13 @@ public interface ExplosionAccessor { @Accessor RandomSource getRandom(); - @Accessor + @Accessor(remap = false) double getX(); - @Accessor + @Accessor(remap = false) double getY(); - @Accessor + @Accessor(remap = false) double getZ(); @Accessor diff --git a/src/main/java/carpet/mixins/Explosion_optimizedTntMixin.java b/src/main/java/carpet/mixins/Explosion_optimizedTntMixin.java index 3cf32d6cf..eeacddb3e 100644 --- a/src/main/java/carpet/mixins/Explosion_optimizedTntMixin.java +++ b/src/main/java/carpet/mixins/Explosion_optimizedTntMixin.java @@ -28,7 +28,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -@Mixin(value = Explosion.class) +@Mixin(Explosion.class) public abstract class Explosion_optimizedTntMixin { @Shadow diff --git a/src/main/java/carpet/mixins/Explosion_scarpetEventMixin.java b/src/main/java/carpet/mixins/Explosion_scarpetEventMixin.java index 12e9bf2b6..f3885cf84 100644 --- a/src/main/java/carpet/mixins/Explosion_scarpetEventMixin.java +++ b/src/main/java/carpet/mixins/Explosion_scarpetEventMixin.java @@ -73,7 +73,7 @@ private void onExplosion(boolean spawnParticles, CallbackInfo ci) { if (EXPLOSION_OUTCOME.isNeeded() && !level.isClientSide()) { - EXPLOSION_OUTCOME.onExplosion((ServerLevel) level, source, this::getIndirectSourceEntity, x, y, z, radius, fire, toBlow, affectedEntities, blockInteraction); + EXPLOSION_OUTCOME.onExplosion((ServerLevel) level, source, this::getIndirectSourceEntity, this.x, this.y, this.z, radius, fire, toBlow, affectedEntities, blockInteraction); } } } diff --git a/src/main/java/carpet/mixins/PerfCommand_permissionMixin.java b/src/main/java/carpet/mixins/PerfCommand_permissionMixin.java index a07fdd4df..92553754a 100644 --- a/src/main/java/carpet/mixins/PerfCommand_permissionMixin.java +++ b/src/main/java/carpet/mixins/PerfCommand_permissionMixin.java @@ -11,7 +11,8 @@ @Mixin(PerfCommand.class) public class PerfCommand_permissionMixin { - @Inject(method = "method_37340", at = @At("HEAD"), cancellable = true, remap = false) + // method_37340 = lambda$register$0 + @Inject(method = { "method_37340(Lnet/minecraft/commands/CommandSourceStack;)Z", "lambda$register$0(Lnet/minecraft/commands/CommandSourceStack;)Z" }, at = @At("HEAD"), cancellable = true, remap = false) private static void canRun(CommandSourceStack source, CallbackInfoReturnable cir) { cir.setReturnValue(source.hasPermission(CarpetSettings.perfPermissionLevel)); diff --git a/src/main/java/carpet/mixins/ReloadCommand_reloadAppsMixin.java b/src/main/java/carpet/mixins/ReloadCommand_reloadAppsMixin.java index f27abc7a0..41e18df9b 100644 --- a/src/main/java/carpet/mixins/ReloadCommand_reloadAppsMixin.java +++ b/src/main/java/carpet/mixins/ReloadCommand_reloadAppsMixin.java @@ -11,9 +11,9 @@ @Mixin(ReloadCommand.class) public class ReloadCommand_reloadAppsMixin { - //method_13530(Lcom/mojang/brigadier/context/CommandContext;)I + // method_13530(Lcom/mojang/brigadier/context/CommandContext;)I = lambda$register$3(Lcom/mojang/brigadier/context/CommandContext;)I // internal of register. - @Inject(method = "method_13530", at = @At("TAIL"), remap = false) + @Inject(method = { "method_13530(Lcom/mojang/brigadier/context/CommandContext;)I", "lambda$register$3(Lcom/mojang/brigadier/context/CommandContext;)I" }, at = @At("TAIL"), remap = false) private static void onReload(CommandContext context, CallbackInfoReturnable cir) { // can't fetch here the reference to the server diff --git a/src/main/java/org/thinkingstudio/sheet/SheetModEntrypoint.java b/src/main/java/org/thinkingstudio/sheet/SheetModEntrypoint.java index 7d3e5ef9c..37a3bd36c 100644 --- a/src/main/java/org/thinkingstudio/sheet/SheetModEntrypoint.java +++ b/src/main/java/org/thinkingstudio/sheet/SheetModEntrypoint.java @@ -2,19 +2,21 @@ import carpet.CarpetServer; import carpet.utils.CarpetRulePrinter; +import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.common.Mod; import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.neoforge.common.NeoForge; @Mod(SheetModEntrypoint.MODID) public class SheetModEntrypoint { public static final String MODID = "sheet"; - public SheetModEntrypoint() { + public SheetModEntrypoint(IEventBus modEventBus) { CarpetServer.onGameStarted(); if (FMLLoader.getDist().isDedicatedServer()) { CarpetRulePrinter.onInitializeServer(); } - SheetModEvents.registerEvents(); + SheetModEvents.registerEvents(modEventBus, NeoForge.EVENT_BUS); } } diff --git a/src/main/java/org/thinkingstudio/sheet/SheetModEvents.java b/src/main/java/org/thinkingstudio/sheet/SheetModEvents.java index 3e8565cd7..8d6778220 100644 --- a/src/main/java/org/thinkingstudio/sheet/SheetModEvents.java +++ b/src/main/java/org/thinkingstudio/sheet/SheetModEvents.java @@ -1,17 +1,21 @@ package org.thinkingstudio.sheet; import carpet.CarpetServer; +import carpet.network.CarpetClient; import net.minecraft.server.level.ServerPlayer; import net.neoforged.bus.api.EventPriority; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.RegisterCommandsEvent; import net.neoforged.neoforge.event.entity.living.LivingSwapItemsEvent; import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; import static carpet.script.CarpetEventServer.Event.PLAYER_SWAPS_HANDS; public class SheetModEvents { - public static void registerEvents() { + public static void registerEvents(IEventBus modEventBus, IEventBus forgeEventBus) { NeoForge.EVENT_BUS.addListener(EventPriority.HIGHEST, RegisterCommandsEvent.class, event -> { CarpetServer.registerCarpetCommands(event.getDispatcher(), event.getCommandSelection(), event.getBuildContext()); }); @@ -23,5 +27,14 @@ public static void registerEvents() { event.isCanceled(); } }); + + modEventBus.addListener(EventPriority.HIGHEST, RegisterPayloadHandlersEvent.class, event -> { + final PayloadRegistrar registrar = event.registrar(SheetModReference.MODID); + + registrar.playBidirectional( + CarpetClient.CarpetPayload.TYPE, CarpetClient.CarpetPayload.STREAM_CODEC, + (payload, context) -> context.handle(payload) + ); + }); } } diff --git a/src/main/java/org/thinkingstudio/sheet/util/PermissionHooks.java b/src/main/java/org/thinkingstudio/sheet/util/PermissionHooks.java new file mode 100644 index 000000000..d0c61bd53 --- /dev/null +++ b/src/main/java/org/thinkingstudio/sheet/util/PermissionHooks.java @@ -0,0 +1,25 @@ +package org.thinkingstudio.sheet.util; + +import net.neoforged.fml.ModList; +import net.neoforged.neoforge.server.ServerLifecycleHooks; +import net.neoforged.neoforge.server.permission.events.PermissionGatherEvent; +import net.neoforged.neoforge.server.permission.nodes.PermissionNode; +import org.thinkingstudio.sheet.SheetModReference; + +import java.util.ArrayList; + +// TODO +public class PermissionHooks { + private static final ArrayList> PENDING = makeRegisterQueue(); + + private static boolean hasPermissionAPI() { + // in version 1.18, the permission api only available on the service side. + return ServerLifecycleHooks.getCurrentServer() != null; + } + + private static ArrayList> makeRegisterQueue() { + var modEventBus = ModList.get().getModContainerById(SheetModReference.MODID).orElseThrow().getEventBus(); + modEventBus.addListener(PermissionGatherEvent.Nodes.class, event -> event.addNodes(PENDING)); + return new ArrayList<>(); + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 6b68dcff1..b86d943f5 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -180,7 +180,6 @@ "ChestBlock_customStickyMixin", "PistonStructureResolver_customStickyMixin", - "CustomPacketPayload_networkStuffMixin", "ServerGamePacketListenerimpl_connectionMixin" ],