CannonSimulator #164
@ -17,7 +17,6 @@
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.commands;
|
||||
|
||||
@ -25,6 +24,7 @@ import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.bausystem.Permission;
|
||||
import de.steamwar.bausystem.world.TNTSimulator;
|
||||
import de.steamwar.bausystem.world.Welt;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -58,7 +58,11 @@ public class CommandSimulator implements CommandExecutor {
|
||||
if (args.length == 1) {
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "wand":
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Chaoscaot
hat
vllt. noch ein Default Case mit einer kleinen Help message vllt. noch ein Default Case mit einer kleinen Help message
|
||||
if (player.getInventory().getItemInMainHand().getType() == Material.AIR) {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Kannst du bitte
Kannst du bitte
1. if (player.getInventory().getItemInMainHand().getType() == Material.AIR) {
2. player.getInventory().setItemInMainHand(TNTSimulator.WAND);
3. } else {
4. player.getInventory().addItem(TNTSimulator.WAND);
5. }
* nutzen?
|
||||
player.getInventory().setItemInMainHand(TNTSimulator.WAND);
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Noch der alte ItemGiver Noch der alte ItemGiver
|
||||
} else {
|
||||
player.getInventory().addItem(TNTSimulator.WAND);
|
||||
}
|
||||
player.updateInventory();
|
||||
break;
|
||||
case "start":
|
||||
|
@ -17,7 +17,6 @@
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Chaoscaot
hat
Selbes Slash Selbes Slash
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.commands;
|
||||
|
||||
|
@ -36,6 +36,7 @@ import org.bukkit.util.Consumer;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class TNTSimulator {
|
||||
|
||||
@ -304,20 +305,23 @@ public class TNTSimulator {
|
||||
public void start() {
|
||||
Map<Integer, List<TNTSpawn>> first = new HashMap<>();
|
||||
Map<Integer, List<TNTSpawn>> second = new HashMap<>();
|
||||
AtomicInteger lastTick = new AtomicInteger(0);
|
||||
TNT_SPAWNS.forEach(tntSpawn -> {
|
||||
Map<Integer, List<TNTSpawn>> list = tntSpawn.isComparator() ? second : first;
|
||||
for (int i = 0; i < tntSpawn.getCount(); i++) {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Mann kann auch eine Normal foreach loop nehmen, dann muss man keinen AtomicInteger nutzen. Mann kann auch eine Normal foreach loop nehmen, dann muss man keinen AtomicInteger nutzen.
YoyoNow
hat
Doch weil ich sonst noch die Variable einmal kopieren muss, damit diese effectively final ist für den BukkitTask. Doch weil ich sonst noch die Variable einmal kopieren muss, damit diese effectively final ist für den BukkitTask.
|
||||
list.computeIfAbsent(tntSpawn.getTickOffset(), integer -> new ArrayList<>()).add(tntSpawn);
|
||||
}
|
||||
if (lastTick.get() < tntSpawn.getTickOffset()) {
|
||||
lastTick.set(tntSpawn.getTickOffset());
|
||||
}
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Wie wäre es, wenn man nicht für jeden Tick einen einzelnen Task macht, sondern einen Timer Task, welcher jeden Tick die Spawnt, die für diesen Tick geplant sind? Wie wäre es, wenn man nicht für jeden Tick einen einzelnen Task macht, sondern einen Timer Task, welcher jeden Tick die Spawnt, die für diesen Tick geplant sind?
|
||||
});
|
||||
Set<Integer> ticks = new HashSet<>(first.keySet());
|
||||
ticks.addAll(second.keySet());
|
||||
for (int tick : ticks) {
|
||||
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> {
|
||||
AtomicInteger currentTick = new AtomicInteger(0);
|
||||
Bukkit.getScheduler().runTaskTimer(BauSystem.getPlugin(), () -> {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Der Task muss auch gestoppt werden... Der Task muss auch gestoppt werden...
|
||||
int tick = currentTick.get();
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Bitte ohne (siehe Kommentar zu .start()) Bitte ohne (siehe Kommentar zu .start())
|
||||
spawnRandomList(first.getOrDefault(tick, EMPTY));
|
||||
spawnRandomList(second.getOrDefault(tick, EMPTY));
|
||||
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
|
||||
}, tick + 1L);
|
||||
}
|
||||
currentTick.incrementAndGet();
|
||||
}, 1, 1);
|
||||
}
|
||||
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.
|
||||
|
||||
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
|
||||
private void spawnRandomList(List<TNTSpawn> tntSpawns) {
|
||||
|
Wo kommt das Slash her?