FallingBlock #144
@ -35,7 +35,7 @@ import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
public class CommandTPSLimiter implements CommandExecutor {
|
||||
|
||||
private static int currentTPSLimit = 20;
|
||||
private static double currentTPSLimit = 20;
|
||||
private static World world = Bukkit.getWorlds().get(0);
|
||||
private long lastTime = System.nanoTime();
|
||||
private long currentTime = System.nanoTime();
|
||||
@ -71,12 +71,14 @@ public class CommandTPSLimiter implements CommandExecutor {
|
||||
}
|
||||
|
||||
try {
|
||||
int tpsLimitInt = Integer.parseInt(tpsLimit);
|
||||
if (tpsLimitInt < 1 || tpsLimitInt > 20) {
|
||||
double tpsLimitDouble = Double.parseDouble(tpsLimit.replace(',', '.'));
|
||||
if (tpsLimitDouble < 0.5 || tpsLimitDouble > 20) {
|
||||
|
||||
sendInvalidArgumentMessage(player);
|
||||
return false;
|
||||
}
|
||||
currentTPSLimit = tpsLimitInt;
|
||||
if (tpsLimitDouble <= 1) tpsLimitDouble = (int)(tpsLimitDouble * 10) / 10.0;
|
||||
Lixfel
hat
Was machst du hier verwirrendes, warum machst du den Double zum int? ist doch vollkommen unnötig. Wenn die Leute krumme TPS-Werte wollen, lass sie doch einfach krumme TPS-Werte haben! Was machst du hier verwirrendes, warum machst du den Double zum int? ist doch vollkommen unnötig. Wenn die Leute krumme TPS-Werte wollen, lass sie doch einfach krumme TPS-Werte haben!
YoyoNow
hat
Nein dies geht nicht, da wenn du 10.5 TPS haben möchtest du dann aber nur 9.9 hast. Deswegen habe ich da sowas reingemacht nur bei Werten unter 1 TPS funktioniert dies gescheit! Nein dies geht nicht, da wenn du 10.5 TPS haben möchtest du dann aber nur 9.9 hast. Deswegen habe ich da sowas reingemacht nur bei Werten unter 1 TPS funktioniert dies gescheit!
Lixfel
hat
Wenn du 10.5 haben möchtest, dann aber nur 9.9 bekommst, sieht das für mich eher nach einem Bug aus... Ansonsten: Hat man dann halt 9.9 TPS bei gewünschten 10.5 TPS.... Wen juckts :) Wenn du 10.5 haben möchtest, dann aber nur 9.9 bekommst, sieht das für mich eher nach einem Bug aus... Ansonsten: Hat man dann halt 9.9 TPS bei gewünschten 10.5 TPS.... Wen juckts :)
YoyoNow
hat
Das Problem ist weiter unten das Thread.sleep() was nur Millisekunden nimmt und mit den nano Sekunden eher weniger was anfangen würde. Das Problem ist weiter unten das Thread.sleep() was nur Millisekunden nimmt und mit den nano Sekunden eher weniger was anfangen würde.
Lixfel
hat
Juckt doch eigentlich keinen, ob das dann so auf die Kommastelle genau ist. Juckt doch eigentlich keinen, ob das dann so auf die Kommastelle genau ist.
YoyoNow
hat
Also soll ich das einfach rausnehmen? Also soll ich das einfach rausnehmen?
Lixfel
hat
Ja. Ja.
YoyoNow
hat
Hab ich gemacht! Hab ich gemacht!
|
||||
else tpsLimitDouble = (int)tpsLimitDouble;
|
||||
currentTPSLimit = tpsLimitDouble;
|
||||
sendNewTPSLimitMessage();
|
||||
tpsLimiter();
|
||||
} catch (NumberFormatException e) {
|
||||
@ -91,7 +93,7 @@ public class CommandTPSLimiter implements CommandExecutor {
|
||||
}
|
||||
|
||||
Lixfel
hat
Fehlerhaftes Kommata. Fehlerhaftes Kommata.
|
||||
private void sendInvalidArgumentMessage(Player player) {
|
||||
player.sendMessage(BauSystem.PREFIX + "§cNur Zahlen zwischen 1 und 20, und 'default' erlaubt.");
|
||||
player.sendMessage(BauSystem.PREFIX + "§cNur Zahlen zwischen 0.5 und 1 oder 1 und 20, und 'default' erlaubt.");
|
||||
Lixfel
hat
Vollkommend verwirrend für den User, bitte umformulieren. Vollkommend verwirrend für den User, bitte umformulieren.
Lixfel
hat
Was interessiert den User der Umbruch bei 1? Was interessiert den User der Umbruch bei 1?
|
||||
}
|
||||
|
||||
private void tpsLimiter() {
|
||||
@ -102,13 +104,13 @@ public class CommandTPSLimiter implements CommandExecutor {
|
||||
} else {
|
||||
if (tpsLimiter != null) return;
|
||||
Lixfel
hat
ist noch nicht master, wird also noch nicht gemergt. ist noch nicht master, wird also noch nicht gemergt.
YoyoNow
hat
wie meinst du das? Meinst du damit die Sache aus dem SpigotCore? wie meinst du das? Meinst du damit die Sache aus dem SpigotCore?
|
||||
tpsLimiter = Bukkit.getScheduler().runTaskTimer(BauSystem.getPlugin(), () -> {
|
||||
sendTntMetaData();
|
||||
versionDependantCall(() -> TPSLimit_12.sendTntMetaData(world), () -> TPSLimit_15.sendTntMetaData(world));
|
||||
|
||||
createVelocityData();
|
||||
versionDependantCall(() -> TPSLimit_12.createVelocityPacketCache(world), () -> TPSLimit_15.createVelocityPacketCache(world));
|
||||
for (int i = 0; i < (20 / currentTPSLimit); i++) {
|
||||
sleepUntilNextTick();
|
||||
sendTntData();
|
||||
sendVelocityData();
|
||||
versionDependantCall(() -> TPSLimit_12.sendTeleports(world), () -> TPSLimit_15.sendTeleports(world));
|
||||
versionDependantCall(TPSLimit_12::sendVelocityPackets, TPSLimit_15::sendVelocityPackets);
|
||||
}
|
||||
}, 0, 1);
|
||||
}
|
||||
@ -133,47 +135,18 @@ public class CommandTPSLimiter implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
private void createVelocityData() {
|
||||
private void versionDependantCall(Runnable v12, Runnable v15) {
|
||||
Lixfel
hat
Diese Lösung finde ich großartig, evtl. finden wir eine Möglichkeit, dies noch weiter zu generalisieren. Diese Lösung finde ich großartig, evtl. finden wir eine Möglichkeit, dies noch weiter zu generalisieren.
YoyoNow
hat
Man könnte dies noch in den SpigotCore machen, womit du dann sowas wie, versionDependantCall für 2 Versionen hast und halt den gleichen call für das FightSystem mit allen verschiedenen Versionen. Könnte den Code Umfang definitiv kleiner machen. Man könnte dies noch in den SpigotCore machen, womit du dann sowas wie, versionDependantCall für 2 Versionen hast und halt den gleichen call für das FightSystem mit allen verschiedenen Versionen. Könnte den Code Umfang definitiv kleiner machen.
YoyoNow
hat
Ich gucke mal ob ich mir dazu was nettes ausdenken kann. Ich gucke mal ob ich mir dazu was nettes ausdenken kann.
|
||||
switch (Core.getVersion()) {
|
||||
case 15:
|
||||
TPSLimit_15.createVelocityPacketCache(world);
|
||||
case 12:
|
||||
v12.run();
|
||||
break;
|
||||
default:
|
||||
TPSLimit_12.createVelocityPacketCache(world);
|
||||
v15.run();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void sendVelocityData() {
|
||||
switch (Core.getVersion()) {
|
||||
case 15:
|
||||
TPSLimit_15.sendVelocityPackets();
|
||||
break;
|
||||
default:
|
||||
TPSLimit_12.sendVelocityPackets();
|
||||
}
|
||||
}
|
||||
|
||||
private void sendTntMetaData() {
|
||||
switch (Core.getVersion()) {
|
||||
case 15:
|
||||
TPSLimit_15.sendTntMetaData(world);
|
||||
break;
|
||||
default:
|
||||
TPSLimit_12.sendTntMetaData(world);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendTntData() {
|
||||
switch (Core.getVersion()) {
|
||||
case 15:
|
||||
TPSLimit_15.sendTeleports(world);
|
||||
break;
|
||||
default:
|
||||
TPSLimit_12.sendTeleports(world);
|
||||
}
|
||||
}
|
||||
|
||||
public static int getCurrentTPSLimit() {
|
||||
public static double getCurrentTPSLimit() {
|
||||
return currentTPSLimit;
|
||||
}
|
||||
|
||||
|
Hast du das mit 0,5 getestet? Fliegst du dabei nicht vom Bau? Wenn ja, brauchst du das hier mir drunter nicht zu antworten.
Also ja ich habe es getestet für eine längere Zeit und bin nicht vom Bau geflogen.