diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..2a3b6eb --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 diff --git a/src/main/java/com/froobworld/seemore/controller/ViewDistanceController.java b/src/main/java/com/froobworld/seemore/controller/ViewDistanceController.java index f72ef9e..fd0f960 100644 --- a/src/main/java/com/froobworld/seemore/controller/ViewDistanceController.java +++ b/src/main/java/com/froobworld/seemore/controller/ViewDistanceController.java @@ -24,7 +24,7 @@ public ViewDistanceController(SeeMore seeMore) { this.seeMore = seeMore; this.viewDistanceUpdateLogger = new ViewDistanceUpdateLogger(seeMore); seeMore.getSchedulerHook().runRepeatingTask(this::cleanMaps, 1200, 1200); - Bukkit.getPluginManager().registerEvents(new ViewDistanceUpdater(this), seeMore); + Bukkit.getPluginManager().registerEvents(new ViewDistanceUpdater(this, seeMore), seeMore); } public void updateAllPlayers() { diff --git a/src/main/java/com/froobworld/seemore/controller/ViewDistanceUpdater.java b/src/main/java/com/froobworld/seemore/controller/ViewDistanceUpdater.java index 288f5d8..5113fe9 100644 --- a/src/main/java/com/froobworld/seemore/controller/ViewDistanceUpdater.java +++ b/src/main/java/com/froobworld/seemore/controller/ViewDistanceUpdater.java @@ -6,16 +6,22 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.entity.Player; import java.util.Set; import java.util.UUID; +import com.froobworld.seemore.SeeMore; + public class ViewDistanceUpdater implements Listener { private final ViewDistanceController controller; + private final SeeMore seeMore; private final Set seenBefore = Sets.newConcurrentHashSet(); - public ViewDistanceUpdater(ViewDistanceController viewDistanceController) { + public ViewDistanceUpdater(ViewDistanceController viewDistanceController, SeeMore seeMore) { this.controller = viewDistanceController; + this.seeMore = seeMore; } @EventHandler @@ -40,4 +46,13 @@ private void onWorldChange(PlayerChangedWorldEvent event) { controller.setTargetViewDistance(event.getPlayer(), event.getPlayer().getClientViewDistance(), false, false); } + @EventHandler + private void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + // 延迟10tick(0.5秒)后主动根据客户端视距调整服务器视距 + seeMore.getSchedulerHook().runTaskDelayed(() -> { + controller.setTargetViewDistance(player, player.getClientViewDistance(), false, true); + }, 10L); + } + }