diff --git a/build.gradle b/build.gradle index 4252a8f0..3218f0b1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { - id "architectury-plugin" version "2.0.57" - id "forgified-fabric-loom" version "0.6.49" apply false + id "architectury-plugin" version "2.0.61" + id "forgified-fabric-loom" version "0.6.53" apply false id "org.cadixdev.licenser" version "0.5.0" id "com.jfrog.bintray" version "1.8.4" id "com.matthewprenger.cursegradle" version "1.4.0" apply false @@ -30,7 +30,7 @@ allprojects { isSnapshot = System.getenv("PR_NUM") != null } - def runNumber = (System.getenv("GITHUB_RUN_NUMBER") == null ? (((short) new Random().nextInt()).abs() + 1000).toString() : System.getenv("GITHUB_RUN_NUMBER")) + def runNumber = (System.getenv("GITHUB_RUN_NUMBER") == null ? "9999" : System.getenv("GITHUB_RUN_NUMBER")) if (!ext.isSnapshot) { version = rootProject.base_version + "." + runNumber diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/PlayerEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/PlayerEvent.java index e426ca51..451bf92d 100644 --- a/common/src/main/java/me/shedaniel/architectury/event/events/PlayerEvent.java +++ b/common/src/main/java/me/shedaniel/architectury/event/events/PlayerEvent.java @@ -24,6 +24,7 @@ import me.shedaniel.architectury.event.EventFactory; import me.shedaniel.architectury.utils.IntValue; import net.minecraft.advancements.Advancement; import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.InteractionResult; @@ -45,6 +46,7 @@ public interface PlayerEvent { Event SMELT_ITEM = EventFactory.createLoop(); Event PICKUP_ITEM_PRE = EventFactory.createInteractionResult(); Event PICKUP_ITEM_POST = EventFactory.createLoop(); + Event CHANGE_DIMENSION = EventFactory.createLoop(); Event DROP_ITEM = EventFactory.createLoop(); Event OPEN_MENU = EventFactory.createLoop(); Event CLOSE_MENU = EventFactory.createLoop(); @@ -86,6 +88,10 @@ public interface PlayerEvent { void pickup(Player player, ItemEntity entity, ItemStack stack); } + interface ChangeDimension { + void change(ServerPlayer player, ResourceKey oldLevel, ResourceKey newLevel); + } + interface DropItem { InteractionResult drop(Player player, ItemEntity entity); } diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java index c638ca8b..09680175 100644 --- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java +++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java @@ -20,6 +20,7 @@ package me.shedaniel.architectury.mixin.fabric; import me.shedaniel.architectury.event.events.PlayerEvent; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; @@ -57,4 +58,9 @@ public class MixinServerPlayer { private void doCloseContainer(CallbackInfo ci) { PlayerEvent.CLOSE_MENU.invoker().close((ServerPlayer) (Object) this, ((ServerPlayer) (Object) this).containerMenu); } + + @Inject(method = "triggerDimensionChangeTriggers", at = @At("HEAD")) + private void changeDimension(ServerLevel serverLevel, CallbackInfo ci) { + PlayerEvent.CHANGE_DIMENSION.invoker().change((ServerPlayer) (Object) this, serverLevel.dimension(), ((ServerPlayer) (Object) this).level.dimension()); + } } diff --git a/forge/src/main/java/me/shedaniel/architectury/event/forge/EventHandlerImplCommon.java b/forge/src/main/java/me/shedaniel/architectury/event/forge/EventHandlerImplCommon.java index 95459c66..72309483 100644 --- a/forge/src/main/java/me/shedaniel/architectury/event/forge/EventHandlerImplCommon.java +++ b/forge/src/main/java/me/shedaniel/architectury/event/forge/EventHandlerImplCommon.java @@ -322,6 +322,13 @@ public class EventHandlerImplCommon { LifecycleEvent.SERVER_BEFORE_START.invoker().stateChanged(event.getServer()); } + @SubscribeEvent + public static void event(PlayerChangedDimensionEvent event) { + if (event.getPlayer() instanceof ServerPlayer) { + PlayerEvent.CHANGE_DIMENSION.invoker().change((ServerPlayer) event.getPlayer(), event.getFrom(), event.getTo()); + } + } + public static class ModBasedEventHandler { } diff --git a/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java b/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java index 3acf5dc1..2447d448 100644 --- a/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java +++ b/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java @@ -165,6 +165,9 @@ public class DebugEvents { PlayerEvent.CLOSE_MENU.register((player, menu) -> { SINK.accept(player.getScoreboardName() + " closes " + toSimpleName(menu) + logSide(player.level)); }); + PlayerEvent.CHANGE_DIMENSION.register((player, oldLevel, newLevel) -> { + SINK.accept(player.getScoreboardName() + " switched from " + oldLevel.location() + " to " + newLevel.location() + logSide(player.level)); + }); } public static String toShortString(Vec3i pos) {