Add PlayerEvent#CHANGE_DIMENSION

This commit is contained in:
shedaniel
2021-01-25 17:52:39 +08:00
parent bb33552a49
commit 492521dfe3
5 changed files with 25 additions and 3 deletions

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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());
}
}

View File

@@ -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 {
}

View File

@@ -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) {