fix reload command

This commit is contained in:
zimzaza4
2024-12-22 12:06:05 +08:00
parent edb962faf3
commit 593621077f
4 changed files with 37 additions and 33 deletions

View File

@@ -26,10 +26,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public final class GeyserModelEngine extends JavaPlugin { public final class GeyserModelEngine extends JavaPlugin {
@@ -68,6 +65,7 @@ public final class GeyserModelEngine extends JavaPlugin {
@Getter @Getter
private ScheduledExecutorService scheduler; private ScheduledExecutorService scheduler;
private ScheduledFuture<?> updateTask;
@Override @Override
public void onLoad() { public void onLoad() {
@@ -78,20 +76,6 @@ public final class GeyserModelEngine extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
PacketEvents.getAPI().init(); PacketEvents.getAPI().init();
saveDefaultConfig();
// alwaysSendSkin = getConfig().getBoolean("always-send-skin");
sendDelay = getConfig().getInt("data-send-delay", 0);
scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 4));
viewDistance = getConfig().getInt("entity-view-distance", 60);
debug = getConfig().getBoolean("debug", false);
joinSendDelay = getConfig().getInt("join-send-delay", 20);
entityPositionUpdatePeriod = getConfig().getLong("entity-position-update-period", 35);
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
if (joinSendDelay > 0) {
joinedPlayer = CacheBuilder.newBuilder()
.expireAfterWrite(joinSendDelay * 50L, TimeUnit.MILLISECONDS).build();
}
instance = this;
PacketEvents.getAPI().getEventManager().registerListener(new MountPacketListener(), PacketListenerPriority.NORMAL); PacketEvents.getAPI().getEventManager().registerListener(new MountPacketListener(), PacketListenerPriority.NORMAL);
/* /*
scheduler.scheduleAtFixedRate(() -> { scheduler.scheduleAtFixedRate(() -> {
@@ -106,17 +90,7 @@ public final class GeyserModelEngine extends JavaPlugin {
*/ */
scheduler.scheduleWithFixedDelay(() -> { reload();
try {
for (Map<ActiveModel, ModelEntity> models : ModelEntity.ENTITIES.values()) {
models.values().forEach(model -> model.getTask().updateEntityProperties(model.getViewers(), false));
}
} catch (Throwable t) {
t.printStackTrace();
}
}, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS);
getCommand("geysermodelengine").setExecutor(new ReloadCommand(this)); getCommand("geysermodelengine").setExecutor(new ReloadCommand(this));
Bukkit.getPluginManager().registerEvents(new ModelListener(), this); Bukkit.getPluginManager().registerEvents(new ModelListener(), this);
Bukkit.getScheduler() Bukkit.getScheduler()
@@ -140,6 +114,36 @@ public final class GeyserModelEngine extends JavaPlugin {
BedrockMountControl.startTask(); BedrockMountControl.startTask();
} }
public void reload() {
saveDefaultConfig();
// alwaysSendSkin = getConfig().getBoolean("always-send-skin");
sendDelay = getConfig().getInt("data-send-delay", 0);
scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 4));
viewDistance = getConfig().getInt("entity-view-distance", 60);
debug = getConfig().getBoolean("debug", false);
joinSendDelay = getConfig().getInt("join-send-delay", 20);
entityPositionUpdatePeriod = getConfig().getLong("entity-position-update-period", 35);
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
if (joinSendDelay > 0) {
joinedPlayer = CacheBuilder.newBuilder()
.expireAfterWrite(joinSendDelay * 50L, TimeUnit.MILLISECONDS).build();
}
instance = this;
if (updateTask != null) {
updateTask.cancel(true);
}
updateTask = scheduler.scheduleWithFixedDelay(() -> {
try {
for (Map<ActiveModel, ModelEntity> models : ModelEntity.ENTITIES.values()) {
models.values().forEach(model -> model.getTask().updateEntityProperties(model.getViewers(), false));
}
} catch (Throwable t) {
t.printStackTrace();
}
}, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS);
}
@Override @Override
public void onDisable() { public void onDisable() {
PacketEvents.getAPI().terminate(); PacketEvents.getAPI().terminate();

View File

@@ -23,7 +23,7 @@ public class ReloadCommand implements CommandExecutor {
} }
plugin.reloadConfig(); plugin.reloadConfig();
plugin.onEnable(); plugin.reload();
sender.sendMessage("§aGeyserModelEngine configuration reloaded!"); sender.sendMessage("§aGeyserModelEngine configuration reloaded!");
return true; return true;

View File

@@ -149,8 +149,8 @@ public class EntityTask {
sendScale(Collections.singleton(player), true); sendScale(Collections.singleton(player), true);
sendColor(Collections.singleton(player), true); sendColor(Collections.singleton(player), true);
updateEntityProperties(Collections.singleton(player), true); updateEntityProperties(Collections.singleton(player), true);
}, 1000, TimeUnit.MILLISECONDS); }, 500, TimeUnit.MILLISECONDS);
}, 100, TimeUnit.MILLISECONDS); }, delay * 50L, TimeUnit.MILLISECONDS);
} }
public void sendScale(Collection<Player> players, boolean firstSend) { public void sendScale(Collection<Player> players, boolean firstSend) {

View File

@@ -76,7 +76,7 @@ public class PacketEntity {
public void sendSpawnPacket(Collection<Player> players) { public void sendSpawnPacket(Collection<Player> players) {
// EntitySpawnPacket packet = new EntitySpawnPacket(id, uuid, type, location); // EntitySpawnPacket packet = new EntitySpawnPacket(id, uuid, type, location);
// EntityMetadataPacket metadataPacket = new EntityMetadataPacket(id); // EntityMetadataPacket metadataPacket = new EntityMetadataPacket(id);
WrapperPlayServerSpawnEntity spawnEntity = new WrapperPlayServerSpawnEntity(id, uuid, EntityTypes.BAT, SpigotConversionUtil.fromBukkitLocation(location), location.getYaw(), 0, null); WrapperPlayServerSpawnEntity spawnEntity = new WrapperPlayServerSpawnEntity(id, uuid, type, SpigotConversionUtil.fromBukkitLocation(location), location.getYaw(), 0, null);
players.forEach(player -> PacketEvents.getAPI().getPlayerManager().sendPacket(player, spawnEntity)); players.forEach(player -> PacketEvents.getAPI().getPlayerManager().sendPacket(player, spawnEntity));
} }