XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

MyDimension

【Java】我的维度模组

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/MyDimension

修复一个可能导致睡觉时间不到白天的问题

6ceff37
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

2 个文件 +36 -18
Modified gradle.properties +1 -1
@@ -11,7 +11,7 @@ loader_version_range=[47,)
11 11 mod_id=mydimension
12 12 mod_name=\u6211\u7684\u7ef4\u5ea6
13 13 mod_license=CC0-1.0
14 mod_version=1.2.1
14 mod_version=1.2.2
15 15 mod_group_id=com.xfestudio.mydimension
16 16 maven_group=com.xfestudio
17 17 archives_base_name=mydimension
Modified src/main/java/com/xfestudio/mydimension/MyDimensionEvents.java +35 -17
@@ -9,6 +9,8 @@ import net.minecraft.commands.CommandSourceStack;
9 9 import net.minecraft.commands.arguments.EntityArgument;
10 10 import net.minecraft.commands.arguments.selector.EntitySelector;
11 11 import net.minecraft.network.chat.Component;
12 import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
13 import net.minecraft.network.protocol.game.ClientboundSetTimePacket;
12 14 import net.minecraft.server.level.ServerLevel;
13 15 import net.minecraft.server.level.ServerPlayer;
14 16 import net.minecraft.world.InteractionHand;
@@ -18,10 +20,10 @@ import net.minecraft.world.entity.LivingEntity;
18 20 import net.minecraft.world.entity.Mob;
19 21 import net.minecraft.world.entity.MobSpawnType;
20 22 import net.minecraft.world.item.ItemStack;
23 import net.minecraft.world.level.GameRules;
21 24 import net.minecraftforge.event.CommandEvent;
22 25 import net.minecraftforge.event.entity.living.MobSpawnEvent;
23 26 import net.minecraftforge.event.entity.player.PlayerInteractEvent;
24 import net.minecraftforge.event.entity.player.PlayerWakeUpEvent;
25 27 import net.minecraftforge.event.level.SleepFinishedTimeEvent;
26 28 import net.minecraftforge.eventbus.api.Event;
27 29 import net.minecraftforge.eventbus.api.EventPriority;
@@ -31,7 +33,7 @@ import java.util.Collection;
31 33 import java.util.Locale;
32 34
33 35 public class MyDimensionEvents {
34 private static final long DAY_LENGTH = 24000L;
36 private static final int CLEAR_WEATHER_DURATION = 6000;
35 37
36 38 @SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true)
37 39 public void sendMobToEtherealMind(PlayerInteractEvent.EntityInteract event) {
@@ -88,16 +90,7 @@ public class MyDimensionEvents {
88 90 return;
89 91 }
90 92
91 makeEtherealMorning(level);
92 }
93
94 @SubscribeEvent
95 public void wakeUpInEtherealMind(PlayerWakeUpEvent event) {
96 if (!event.updateLevel() || !(event.getEntity() instanceof ServerPlayer player) || !player.level().dimension().equals(ModDimensions.ETHEREAL_MIND)) {
97 return;
98 }
99
100 makeEtherealMorning(player.serverLevel());
93 makeEtherealMorning(level, event.getNewTime());
101 94 }
102 95
103 96 private static String firstWord(String input) {
@@ -105,11 +98,36 @@ public class MyDimensionEvents {
105 98 return space < 0 ? input : input.substring(0, space);
106 99 }
107 100
108 private static void makeEtherealMorning(ServerLevel level) {
109 long dayTime = level.getDayTime();
110 long morning = dayTime - (dayTime % DAY_LENGTH) + DAY_LENGTH;
111 level.setDayTime(morning);
112 level.setWeatherParameters(6000, 0, false, false);
101 private static void makeEtherealMorning(ServerLevel etherealMind, long morning) {
102 ServerLevel overworld = etherealMind.getServer().overworld();
103 overworld.setDayTime(morning);
104 overworld.setWeatherParameters(CLEAR_WEATHER_DURATION, 0, false, false);
105 syncEtherealMindWeather(etherealMind);
106 syncEtherealMindTime(etherealMind);
107 }
108
109 private static void syncEtherealMindWeather(ServerLevel level) {
110 level.setRainLevel(0.0F);
111 level.setThunderLevel(0.0F);
112 level.getServer().getPlayerList().broadcastAll(
113 new ClientboundGameEventPacket(ClientboundGameEventPacket.STOP_RAINING, 0.0F),
114 level.dimension()
115 );
116 level.getServer().getPlayerList().broadcastAll(
117 new ClientboundGameEventPacket(ClientboundGameEventPacket.RAIN_LEVEL_CHANGE, 0.0F),
118 level.dimension()
119 );
120 level.getServer().getPlayerList().broadcastAll(
121 new ClientboundGameEventPacket(ClientboundGameEventPacket.THUNDER_LEVEL_CHANGE, 0.0F),
122 level.dimension()
123 );
124 }
125
126 private static void syncEtherealMindTime(ServerLevel level) {
127 level.getServer().getPlayerList().broadcastAll(
128 new ClientboundSetTimePacket(level.getGameTime(), level.getDayTime(), level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)),
129 level.dimension()
130 );
113 131 }
114 132
115 133 private static void sendTargetToEtherealMind(PlayerInteractEvent event, Entity targetEntity) {