Forráskód Böngészése

Add PlayerEvent#CHANGE_DIMENSION

shedaniel 4 éve
szülő
commit
492521dfe3

+ 3 - 3
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

+ 6 - 0
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<SmeltItem> SMELT_ITEM = EventFactory.createLoop();
     Event<PickupItemPredicate> PICKUP_ITEM_PRE = EventFactory.createInteractionResult();
     Event<PickupItem> PICKUP_ITEM_POST = EventFactory.createLoop();
+    Event<ChangeDimension> CHANGE_DIMENSION = EventFactory.createLoop();
     Event<DropItem> DROP_ITEM = EventFactory.createLoop();
     Event<OpenMenu> OPEN_MENU = EventFactory.createLoop();
     Event<CloseMenu> 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<Level> oldLevel, ResourceKey<Level> newLevel);
+    }
+    
     interface DropItem {
         InteractionResult drop(Player player, ItemEntity entity);
     }

+ 6 - 0
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());
+    }
 }

+ 7 - 0
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 {
         
     }

+ 3 - 0
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) {