CannonSimulator #164
@ -31,12 +31,4 @@ public class TNTSimulator_12 {
|
||||
return Material.CONCRETE;
|
||||
}
|
||||
|
||||
public static Material repeater() {
|
||||
return Material.DIODE;
|
||||
}
|
||||
|
||||
public static Material comparator() {
|
||||
return Material.REDSTONE_COMPARATOR;
|
||||
}
|
||||
|
||||
}
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
|
||||
|
@ -32,12 +32,4 @@ public class TNTSimulator_15 {
|
||||
return Material.RED_CONCRETE;
|
||||
}
|
||||
|
||||
public static Material repeater() {
|
||||
return Material.REPEATER;
|
||||
}
|
||||
|
||||
public static Material comparator() {
|
||||
return Material.COMPARATOR;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,9 +33,10 @@ import org.bukkit.entity.Player;
|
||||
public class CommandSimulator implements CommandExecutor {
|
||||
|
||||
private void help(Player player) {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Diese Überprüfung findet nur beim Command statt, nicht wenn ein Spieler versucht, einen Simulatoritem zu verwenden.... Diese Überprüfung findet nur beim Command statt, nicht wenn ein Spieler versucht, einen Simulatoritem zu verwenden....
|
||||
player.sendMessage("§8/§esimulator §8- §7Öffnet das Simulations GUI");
|
||||
player.sendMessage("§8/§esimulator §8- §7Öffnet die Simulations GUI");
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Das GUI Das GUI
Chaoscaot
hat
Es ist die Simulation und das GUI aber das Simulation passt net, Am besten noch einen Bindestrich dazwischen machen. Es ist die Simulation und das GUI aber das Simulation passt net, Am besten noch einen Bindestrich dazwischen machen.
|
||||
player.sendMessage("§8/§esimulator start §8- §7Startet die Simulation");
|
||||
player.sendMessage("§8/§esimulator wand §8- §7Legt den Simulatorstab ins Inventar");
|
||||
player.sendMessage("§8/§esimulator wand §8- §7Legt dir den Simulatorstab ins Inventar");
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Der Simulator ist ein System, evt. den Simulatorstab oder etwas ähnliches Der Simulator ist ein System, evt. den Simulatorstab oder etwas ähnliches
Chaoscaot
hat
Der Satz macht keinen Sinn:
Der Satz macht keinen Sinn:
> Legt dir den Simulatorstab ins Inventar
|
||||
player.sendMessage("§8/§esimulator delete §8- §7Lösche alle TNT");
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Löcht Löcht
|
||||
}
|
||||
|
||||
private boolean permissionCheck(Player player) {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Der Simulator ist ja eher eine Regional beschränkte sache, ich würde ihn eher unter WE oder ggf sogar unter build nehmen. Der Simulator ist ja eher eine Regional beschränkte sache, ich würde ihn eher unter WE oder ggf sogar unter build nehmen.
|
||||
@ -68,6 +69,8 @@ public class CommandSimulator implements CommandExecutor {
|
||||
case "start":
|
||||
TNTSimulator.get(player).start();
|
||||
break;
|
||||
case "delete":
|
||||
TNTSimulator.get(player).delete();
|
||||
default:
|
||||
help(player);
|
||||
break;
|
||||
|
@ -271,9 +271,9 @@ public class TNTSimulator {
|
||||
|
||||
private static Material comparatorOrNot(boolean b) {
|
||||
if (b) {
|
||||
return VersionedCallable.call(new VersionedCallable<>(TNTSimulator_12::comparator, 8), new VersionedCallable<>(TNTSimulator_15::comparator, 14));
|
||||
return SWItem.getMaterial("REDSTONE_COMPARATOR");
|
||||
} else {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
getOrDefault? getOrDefault?
|
||||
return VersionedCallable.call(new VersionedCallable<>(TNTSimulator_12::repeater, 8), new VersionedCallable<>(TNTSimulator_15::repeater, 14));
|
||||
return SWItem.getMaterial("DIODE");
|
||||
}
|
||||
}
|
||||
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Kann addTNT nicht einfach einen Vektor nehmen und einen TNTSpawn returnen? Kann addTNT nicht einfach einen Vektor nehmen und einen TNTSpawn returnen?
|
||||
@ -319,25 +319,32 @@ public class TNTSimulator {
|
||||
return (int)(d * 10000) * 0.0001;
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Der Task muss auch gestoppt werden... Der Task muss auch gestoppt werden...
|
||||
}
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Bitte ohne (siehe Kommentar zu .start()) Bitte ohne (siehe Kommentar zu .start())
|
||||
|
||||
public void delete() {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Die runTaskTimer kann eine Consumable von einem BukkitTask nehmen, die könnte man nutzen Die runTaskTimer kann eine Consumable von einem BukkitTask nehmen, die könnte man nutzen
|
||||
TNT_SPAWNS.clear();
|
||||
}
|
||||
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Warum muss die Liste noch mal gemischt werden? Warum muss die Liste noch mal gemischt werden?
YoyoNow
hat
Damit wenn ich rechts und links in der Reihenfolge das spawne nicht immer das ganze nach links wegschießt im trace. Ist also wichtig. weil sonst viele Kanonen einen gewissen Drall haben. Damit wenn ich rechts und links in der Reihenfolge das spawne nicht immer das ganze nach links wegschießt im trace. Ist also wichtig. weil sonst viele Kanonen einen gewissen Drall haben.
|
||||
public void start() {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Anstat deinen Komischen AtomicInteger zu nutzen, könnte man auch eine normal foreach Schleife machen Anstat deinen Komischen AtomicInteger zu nutzen, könnte man auch eine normal foreach Schleife machen
|
||||
Map<Integer, List<TNTSpawn>> first = new HashMap<>();
|
||||
Map<Integer, List<TNTSpawn>> second = new HashMap<>();
|
||||
AtomicInteger lastTick = new AtomicInteger(0);
|
||||
TNT_SPAWNS.forEach(tntSpawn -> {
|
||||
int lastTick = 0;
|
||||
|
||||
for (TNTSpawn tntSpawn : TNT_SPAWNS) {
|
||||
Map<Integer, List<TNTSpawn>> list = tntSpawn.isComparator() ? second : first;
|
||||
for (int i = 0; i < tntSpawn.getCount(); i++) {
|
||||
list.computeIfAbsent(tntSpawn.getTickOffset(), integer -> new ArrayList<>()).add(tntSpawn);
|
||||
}
|
||||
if (lastTick.get() < tntSpawn.getTickOffset()) {
|
||||
lastTick.set(tntSpawn.getTickOffset());
|
||||
if (lastTick < tntSpawn.getTickOffset()) {
|
||||
lastTick = tntSpawn.getTickOffset();
|
||||
}
|
||||
});
|
||||
}
|
||||
int finalLastTick = lastTick;
|
||||
|
||||
AtomicInteger currentTick = new AtomicInteger(0);
|
||||
Bukkit.getScheduler().runTaskTimer(BauSystem.getPlugin(), bukkitTask -> {
|
||||
int tick = currentTick.get();
|
||||
spawnRandomList(first.getOrDefault(tick, EMPTY));
|
||||
spawnRandomList(second.getOrDefault(tick, EMPTY));
|
||||
if (tick > lastTick.get()) bukkitTask.cancel();
|
||||
if (tick > finalLastTick) bukkitTask.cancel();
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Ok, deine Datenmodelle sind mal wieder ein komplettes Chaos. Du brauchst 3 Werte: Delay, wie viel TNT, TNTSpawn, oder? Und warum brauchst du dann dafür eine ominöse List[]?!? Vereinfache doch den code mal. tntSpawn weiß doch selbst, wie häufig er spawnen soll, warum musst du das nochmal woanders speichern? Warum tut TNTSpawn nicht einfach in der Anzahl spawnen, wie benötigt wird? Warum brauchst du die Funktion spawnRandomList, die irgendwie einfach nur in einer komplexen Art und weise alles in den TNTSpawnPairs spawnt? Das ist viel komplexer als nötig. Und wenn du das alles nur wegen der Berechnungsreihenfolge machst: Streamlinen (Eine Liste, in der jeder TNTSpawn so häufig wie sein .count() vorkommt, und dann einfach .shuffle()! Ok, deine Datenmodelle sind mal wieder ein komplettes Chaos. Du brauchst 3 Werte: Delay, wie viel TNT, TNTSpawn, oder? Und warum brauchst du dann dafür eine ominöse List<TNTSpawnPair>[]?!? Vereinfache doch den code mal. tntSpawn weiß doch selbst, wie häufig er spawnen soll, warum musst du das nochmal woanders speichern? Warum tut TNTSpawn nicht einfach in der Anzahl spawnen, wie benötigt wird? Warum brauchst du die Funktion spawnRandomList, die irgendwie einfach nur in einer komplexen Art und weise alles in den TNTSpawnPairs spawnt? Das ist viel komplexer als nötig. Und wenn du das alles nur wegen der Berechnungsreihenfolge machst: Streamlinen (Eine Liste<TNTSpawn>, in der jeder TNTSpawn so häufig wie sein .count() vorkommt, und dann einfach .shuffle()!
|
||||
currentTick.incrementAndGet();
|
||||
}, 1, 1);
|
||||
}
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Sollte ohne gehen (siehe .start()) Sollte ohne gehen (siehe .start())
|
||||
|
Repeater und Comparator können über SWItem.getMaterial() erhalten werden, bitte hier entfernen.