SteamWar/BauSystem
Archiviert
13
0

Add /tpslimit Command #113

Manuell gemergt
YoyoNow hat 13 Commits von TPSLimiter nach master 2020-11-16 14:32:47 +01:00 zusammengeführt
6 geänderte Dateien mit 138 neuen und 2 gelöschten Zeilen
Nur Änderungen aus Commit eeef18d504 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -98,6 +98,8 @@ public class BauSystem extends JavaPlugin implements Listener {
getCommand("trace").setExecutor(new CommandTrace());
getCommand("trace").setTabCompleter(new CommandTraceTabCompleter());
getCommand("tpslimit").setExecutor(new CommandTPSLimiter());
getCommand("tpslimit").setTabCompleter(new CommandTPSLimiterTabComplete());
getCommand("nightvision").setExecutor(new CommandNV());
getCommand("reset").setExecutor(new CommandReset());
getCommand("speed").setExecutor(new CommandSpeed());

Datei anzeigen

@ -0,0 +1,100 @@
package de.steamwar.bausystem.commands;
Veraltet
Review

Fehlender AGPL-Header

Fehlender AGPL-Header
import de.steamwar.bausystem.BauSystem;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
public class CommandTPSLimiter implements CommandExecutor {
private static int currentTPSLimit = 20;
private static World world = Bukkit.getWorlds().get(0);
private long lastTime = System.currentTimeMillis();
private long currentTime = System.currentTimeMillis();
public CommandTPSLimiter() {
Bukkit.getScheduler().runTaskTimer(BauSystem.getPlugin(), () -> {
Veraltet
Review

Finde ich nicht so ganz elegant, dass das die ganze Zeit mitläuft. Besser wäre, sich ggf. den Task zu merken und ihn dann zu Stoppen/zu starten.

Finde ich nicht so ganz elegant, dass das die ganze Zeit mitläuft. Besser wäre, sich ggf. den Task zu merken und ihn dann zu Stoppen/zu starten.
Veraltet
Review

Wenn ich den Task cancel() dann würde natürlich der server kurzzeitig schneller als 20 tps laufen. Nur damit das klar ist.

Wenn ich den Task cancel() dann würde natürlich der server kurzzeitig schneller als 20 tps laufen. Nur damit das klar ist.
lastTime = currentTime;
currentTime = System.currentTimeMillis();
Veraltet
Review

Millis dürfte für diesen Zweck zu ungenau sein, besser wären Nanosekunden

Millis dürfte für diesen Zweck zu ungenau sein, besser wären Nanosekunden
Veraltet
Review

Nutzung von versionsspezifischen Teilen in versionsübergreifendem Codeteil

Nutzung von versionsspezifischen Teilen in versionsübergreifendem Codeteil
long timeDelta = currentTime - lastTime;
long neededDelta = 1000 / currentTPSLimit;
if (neededDelta - timeDelta < 1) {
return;
}
try {
Thread.sleep(neededDelta - timeDelta);
currentTime = System.currentTimeMillis();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}, 0, 1);
Bukkit.getScheduler().runTaskTimer(BauSystem.getPlugin(), () -> {
if (currentTPSLimit == 20) {
return;
}
world.getEntities().stream().filter(entity -> entity instanceof TNTPrimed).forEach(entity -> {
Location location = entity.getLocation();
world.spawnParticle(Particle.BARRIER, location.getX(), location.getY() + 0.49, location.getZ(), 1);
Veraltet
Review

Besser wäre ein aussenden von Velocity 0-Paketen, das hier dürfte den Server stark belasten.

Besser wäre ein aussenden von Velocity 0-Paketen, das hier dürfte den Server stark belasten.
Veraltet
Review

Wie soll ich das genau umsetzten?

Wie soll ich das genau umsetzten?
Veraltet
Review

Auch verschwindet das TNT nach 4 Sekunden (Clientseitig) sodass man es nicht mehr sieht!

Auch verschwindet das TNT nach 4 Sekunden (Clientseitig) sodass man es nicht mehr sieht!
});
}, 0, 1);
}
Veraltet
Review

Ist der überhaupt noch nötig?

Ist der überhaupt noch nötig?
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
return false;
} else if (args.length == 0) {
sender.sendMessage(BauSystem.PREFIX + "Jetziges TPS limit: " + currentTPSLimit);
sender.sendMessage(BauSystem.PREFIX + "Ändere das TPS limit mit: §8/§etpslimit §8[§7TPS§8|§edefault§8]");
return false;
}
Player player = (Player) sender;
String tpsLimit = args[0];
if (tpsLimit.equals("default")) {
currentTPSLimit = 20;
sendNewTPSLimitMessage(player);
return false;
}
try {
int tpsLimitInt = Integer.parseInt(tpsLimit);
if (tpsLimitInt < 1 || tpsLimitInt > 20) {
sendInvalidArgumentMessage(player);
return false;
}
currentTPSLimit = tpsLimitInt;
sendNewTPSLimitMessage(player);
} catch (NumberFormatException e) {
sendInvalidArgumentMessage(player);
}
return false;
}
private void sendNewTPSLimitMessage(Player player) {
player.sendMessage(BauSystem.PREFIX + "TPS limit auf " + currentTPSLimit + " gesetzt.");
Bukkit.getOnlinePlayers().forEach(p -> p.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§eTPS limit auf " + currentTPSLimit + " gesetzt.")));
Veraltet
Review

player bekommt eine doppelte Nachricht, ich denke, die Nachricht in der ActionBar reicht aus.

player bekommt eine doppelte Nachricht, ich denke, die Nachricht in der ActionBar reicht aus.
}
private void sendInvalidArgumentMessage(Player player) {
player.sendMessage(BauSystem.PREFIX + "Nur Zahlen zwischen 1 und 20, und 'default' erlaubt.");
Veraltet
Review

§c

§c
}
public static int getCurrentTPSLimit() {
return currentTPSLimit;
}
}

Datei anzeigen

@ -0,0 +1,29 @@
package de.steamwar.bausystem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CommandTPSLimiterTabComplete implements TabCompleter {
private List<String> arguments = Arrays.asList("default", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20");
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
if (args.length != 1) {
return new ArrayList<>();
}
List<String> validArguments = new ArrayList<>(arguments.size());
for (String s : arguments) {
if (s.startsWith(args[0])) {
validArguments.add(s);
}
}
return validArguments;
}
}

Datei anzeigen

@ -20,7 +20,6 @@
package de.steamwar.bausystem.commands;
import de.steamwar.bausystem.tracer.recorder.RecordManager;
import de.steamwar.core.Core;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;

Datei anzeigen

@ -21,6 +21,7 @@ package de.steamwar.bausystem.world;
import de.steamwar.bausystem.commands.CommandFreeze;
import de.steamwar.bausystem.commands.CommandTNT;
import de.steamwar.bausystem.commands.CommandTPSLimiter;
import de.steamwar.bausystem.tracer.TraceManager;
import de.steamwar.bausystem.tracer.recorder.RecordManager;
import de.steamwar.bausystem.tracer.recorder.TNTRecorder;
@ -72,7 +73,11 @@ public class BauScoreboard implements Listener {
}
strings.add("§4");
strings.add("§eTPS§8: §7" + TPSWatcher.getTPS());
if (CommandTPSLimiter.getCurrentTPSLimit() == 20) {
strings.add("§eTPS§8: §7" + TPSWatcher.getTPS());
} else {
strings.add("§eTPS§8: §7" + TPSWatcher.getTPS() + " §eLimit§8: §7" + CommandTPSLimiter.getCurrentTPSLimit());
Veraltet
Review

Limit ist ein wenig lang (max. 15 Zeichen meines wissens nach). Besser wäre ggf. einfach TPS: 15.4/16

Limit ist ein wenig lang (max. 15 Zeichen meines wissens nach). Besser wäre ggf. einfach TPS: 15.4/16
}
int i = strings.size();
HashMap<String, Integer> result = new HashMap<>();

Datei anzeigen

@ -11,6 +11,7 @@ commands:
tnt:
fire:
trace:
tpslimit:
testblock:
aliases: tb
reset: