Add TNTSimulator.WAND
Add TNTSimulatorListener Add CommandSimulatorTabCompleter Add TNTSimulatorAnvil
Dieser Commit ist enthalten in:
Ursprung
7a8c3f20f1
Commit
1942a2c355
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem;
|
package de.steamwar.bausystem;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.canonsimulator.TNTSimulatorListener;
|
||||||
import de.steamwar.bausystem.commands.*;
|
import de.steamwar.bausystem.commands.*;
|
||||||
import de.steamwar.bausystem.world.*;
|
import de.steamwar.bausystem.world.*;
|
||||||
import de.steamwar.core.CommandRemover;
|
import de.steamwar.core.CommandRemover;
|
||||||
@ -97,12 +98,14 @@ public class BauSystem extends JavaPlugin implements Listener {
|
|||||||
getCommand("detonator").setTabCompleter(new CommandDetonatorTabCompleter());
|
getCommand("detonator").setTabCompleter(new CommandDetonatorTabCompleter());
|
||||||
getCommand("script").setExecutor(new CommandScript());
|
getCommand("script").setExecutor(new CommandScript());
|
||||||
getCommand("simulator").setExecutor(new CommandSimulator());
|
getCommand("simulator").setExecutor(new CommandSimulator());
|
||||||
|
getCommand("simulator").setTabCompleter(new CommandSimulatorTabCompleter());
|
||||||
|
|
||||||
Bukkit.getPluginManager().registerEvents(this, this);
|
Bukkit.getPluginManager().registerEvents(this, this);
|
||||||
Bukkit.getPluginManager().registerEvents(new RegionListener(), this);
|
Bukkit.getPluginManager().registerEvents(new RegionListener(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new ScriptListener(), this);
|
Bukkit.getPluginManager().registerEvents(new ScriptListener(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new BauScoreboard(), this);
|
Bukkit.getPluginManager().registerEvents(new BauScoreboard(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new ClipboardListener(), this);
|
Bukkit.getPluginManager().registerEvents(new ClipboardListener(), this);
|
||||||
|
Bukkit.getPluginManager().registerEvents(new TNTSimulatorListener(), this);
|
||||||
new AFKStopper();
|
new AFKStopper();
|
||||||
|
|
||||||
autoShutdown = Bukkit.getScheduler().runTaskLater(this, Bukkit::shutdown, 1200);
|
autoShutdown = Bukkit.getScheduler().runTaskLater(this, Bukkit::shutdown, 1200);
|
||||||
|
@ -29,6 +29,7 @@ import de.steamwar.inventory.SWListInv;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.util.Consumer;
|
import org.bukkit.util.Consumer;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@ -43,7 +44,9 @@ public class TNTSimulator {
|
|||||||
private static final Vector Z_VECTOR = new Vector(0, 0, 0.0625);
|
private static final Vector Z_VECTOR = new Vector(0, 0, 0.0625);
|
||||||
private static final Vector NZ_VECTOR = new Vector(0, 0, -0.0625);
|
private static final Vector NZ_VECTOR = new Vector(0, 0, -0.0625);
|
||||||
|
|
||||||
private static Map<Player, TNTSimulator> tntSimulatorMap = new HashMap<>();
|
static Map<Player, TNTSimulator> tntSimulatorMap = new HashMap<>();
|
||||||
|
|
||||||
|
public static final ItemStack WAND = new SWItem(Material.TRIPWIRE_HOOK, "§6Kanonen Simulator", Arrays.asList("§eRechts Klick Block §8- §7Füge einen TNT hinzu", "§eRechts Klick Luft §8- §7Öffne den Simulator", "§eLinks Klick §8- §7Starte die Simulation"), false, null).getItemStack();
|
||||||
|
|
||||||
public static void openSimulator(Player player) {
|
public static void openSimulator(Player player) {
|
||||||
if (!tntSimulatorMap.containsKey(player)) {
|
if (!tntSimulatorMap.containsKey(player)) {
|
||||||
@ -61,14 +64,14 @@ public class TNTSimulator {
|
|||||||
lore.add("§eX§8: §7" + tntSpawn.getPosition().getX());
|
lore.add("§eX§8: §7" + tntSpawn.getPosition().getX());
|
||||||
lore.add("§eY§8: §7" + tntSpawn.getPosition().getY());
|
lore.add("§eY§8: §7" + tntSpawn.getPosition().getY());
|
||||||
lore.add("§eZ§8: §7" + tntSpawn.getPosition().getZ());
|
lore.add("§eZ§8: §7" + tntSpawn.getPosition().getZ());
|
||||||
swListEntryList.add(new SWListInv.SWListEntry<>(new SWItem(Material.TNT, "§eTNT", lore, false, null), tntSpawn));
|
swListEntryList.add(new SWListInv.SWListEntry<>(new SWItem(Material.TNT, "§6TNT", lore, false, null), tntSpawn));
|
||||||
});
|
});
|
||||||
swListEntryList.sort(Comparator.comparing(SWListInv.SWListEntry::getObject));
|
swListEntryList.sort(Comparator.comparing(SWListInv.SWListEntry::getObject));
|
||||||
|
|
||||||
SWListInv<TNTSpawn> swListInv = new SWListInv<>(player, "Kanonen Simulator", false, swListEntryList, (clickType, tntSpawn) -> {
|
SWListInv<TNTSpawn> swListInv = new SWListInv<>(player, "Kanonen Simulator", false, swListEntryList, (clickType, tntSpawn) -> {
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
});
|
});
|
||||||
swListInv.setItem(48, new SWItem(Material.BARRIER, "§cLösche alle TNT", clickType -> {
|
swListInv.setItem(51, new SWItem(Material.BARRIER, "§cLösche alle TNT", clickType -> {
|
||||||
tntSimulator.tntSpawns.clear();
|
tntSimulator.tntSpawns.clear();
|
||||||
openSimulator(player);
|
openSimulator(player);
|
||||||
}));
|
}));
|
||||||
@ -86,22 +89,27 @@ public class TNTSimulator {
|
|||||||
tntSimulator.tntSpawns.add(tntSpawn);
|
tntSimulator.tntSpawns.add(tntSpawn);
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swListInv.setItem(50, new SWItem(Material.FLINT_AND_STEEL, "§eSimulation Starten", clickType -> {
|
swListInv.setItem(47, new SWItem(Material.FLINT_AND_STEEL, "§eSimulation Starten", clickType -> {
|
||||||
tntSimulator.start();
|
startSimulation(player);
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
}));
|
}));
|
||||||
swListInv.open();
|
swListInv.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void editTNT(Player player, TNTSpawn tntSpawn) {
|
static void editTNT(Player player, TNTSpawn tntSpawn) {
|
||||||
|
if (!tntSimulatorMap.containsKey(player)) {
|
||||||
|
tntSimulatorMap.put(player, new TNTSimulator());
|
||||||
|
}
|
||||||
|
TNTSimulator tntSimulator = tntSimulatorMap.get(player);
|
||||||
|
|
||||||
SWInventory swInventory = new SWInventory(player, 54, "TNT");
|
SWInventory swInventory = new SWInventory(player, 54, "TNT");
|
||||||
swInventory.setItem(48, new SWItem(Material.REDSTONE_BLOCK, "§cZurück", clickType -> {
|
swInventory.setItem(49, new SWItem(Material.REDSTONE_BLOCK, "§cZurück", clickType -> {
|
||||||
openSimulator(player);
|
openSimulator(player);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Delete icon
|
// Delete icon
|
||||||
swInventory.setItem(50, new SWItem(Material.BARRIER, "§cDelete", clickType -> {
|
swInventory.setItem(53, new SWItem(Material.BARRIER, "§cDelete", clickType -> {
|
||||||
tntSimulatorMap.get(player).tntSpawns.remove(tntSpawn);
|
tntSimulator.tntSpawns.remove(tntSpawn);
|
||||||
openSimulator(player);
|
openSimulator(player);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@ -114,7 +122,7 @@ public class TNTSimulator {
|
|||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(19, new SWItem(Material.TNT, "§eAnzahl §8- §7" + tntSpawn.getCount(), clickType -> {
|
swInventory.setItem(19, new SWItem(Material.TNT, "§eAnzahl §8- §7" + tntSpawn.getCount(), clickType -> {
|
||||||
changeCount(player, count -> {
|
changeCount(player, tntSpawn.getCount(), count -> {
|
||||||
if (count < 1) count = 1;
|
if (count < 1) count = 1;
|
||||||
if (count > 1000) count = 1000;
|
if (count > 1000) count = 1000;
|
||||||
tntSpawn.setCount(count);
|
tntSpawn.setCount(count);
|
||||||
@ -138,7 +146,7 @@ public class TNTSimulator {
|
|||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(20, new SWItem(Material.CLOCK, "§eTick §8- §7" + tntSpawn.getTickOffset(), clickType -> {
|
swInventory.setItem(20, new SWItem(Material.CLOCK, "§eTick §8- §7" + tntSpawn.getTickOffset(), clickType -> {
|
||||||
changeCount(player, tick -> {
|
changeCount(player, tntSpawn.getTickOffset(), tick -> {
|
||||||
if (tick < 0) tick = 0;
|
if (tick < 0) tick = 0;
|
||||||
if (tick > 8000) tick = 8000;
|
if (tick > 8000) tick = 8000;
|
||||||
tntSpawn.setTickOffset(tick);
|
tntSpawn.setTickOffset(tick);
|
||||||
@ -162,7 +170,7 @@ public class TNTSimulator {
|
|||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(21, new SWItem(Material.CLOCK, "§eFuseTicks §8- §7" + tntSpawn.getFuseTicks(), clickType -> {
|
swInventory.setItem(21, new SWItem(Material.CLOCK, "§eFuseTicks §8- §7" + tntSpawn.getFuseTicks(), clickType -> {
|
||||||
changeCount(player, tick -> {
|
changeCount(player, tntSpawn.getFuseTicks(), tick -> {
|
||||||
if (tick < 0) tick = 0;
|
if (tick < 0) tick = 0;
|
||||||
if (tick > 80) tick = 80;
|
if (tick > 80) tick = 80;
|
||||||
tntSpawn.setFuseTicks(tick);
|
tntSpawn.setFuseTicks(tick);
|
||||||
@ -178,15 +186,15 @@ public class TNTSimulator {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Velocity Settings
|
// Velocity Settings
|
||||||
swInventory.setItem(13, new SWItem(tntSpawn.isxVelocity() ? Material.LIME_WOOL : Material.RED_WOOL, "§eVelocity-X §8- §7" + active(tntSpawn.isxVelocity()), clickType -> {
|
swInventory.setItem(13, new SWItem(tntSpawn.isxVelocity() ? Material.LIME_WOOL : Material.RED_WOOL, "§7Start §eVelocity X §8- §7" + active(tntSpawn.isxVelocity()), clickType -> {
|
||||||
tntSpawn.setxVelocity(!tntSpawn.isxVelocity());
|
tntSpawn.setxVelocity(!tntSpawn.isxVelocity());
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(22, new SWItem(tntSpawn.isyVelocity() ? Material.LIME_WOOL : Material.RED_WOOL, "§eVelocity-Y §8- §7" + active(tntSpawn.isyVelocity()), clickType -> {
|
swInventory.setItem(22, new SWItem(tntSpawn.isyVelocity() ? Material.LIME_WOOL : Material.RED_WOOL, "§7Start §eVelocity Y §8- §7" + active(tntSpawn.isyVelocity()), clickType -> {
|
||||||
tntSpawn.setyVelocity(!tntSpawn.isyVelocity());
|
tntSpawn.setyVelocity(!tntSpawn.isyVelocity());
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(31, new SWItem(tntSpawn.iszVelocity() ? Material.LIME_WOOL : Material.RED_WOOL, "§eVelocity-Z §8- §7" + active(tntSpawn.iszVelocity()), clickType -> {
|
swInventory.setItem(31, new SWItem(tntSpawn.iszVelocity() ? Material.LIME_WOOL : Material.RED_WOOL, "§7Start §eVelocity Z §8- §7" + active(tntSpawn.iszVelocity()), clickType -> {
|
||||||
tntSpawn.setzVelocity(!tntSpawn.iszVelocity());
|
tntSpawn.setzVelocity(!tntSpawn.iszVelocity());
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
@ -197,7 +205,7 @@ public class TNTSimulator {
|
|||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(23, new SWItem(Material.PAPER, "§ePosition-X §8- §7" + tntSpawn.getPosition().getX(), clickType -> {
|
swInventory.setItem(23, new SWItem(Material.PAPER, "§ePosition-X §8- §7" + tntSpawn.getPosition().getX(), clickType -> {
|
||||||
changePosition(player, x -> {
|
changePosition(player, tntSpawn.getPosition().getX(), x -> {
|
||||||
tntSpawn.getPosition().setX(clamp(x));
|
tntSpawn.getPosition().setX(clamp(x));
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}, () -> editTNT(player, tntSpawn));
|
}, () -> editTNT(player, tntSpawn));
|
||||||
@ -213,7 +221,7 @@ public class TNTSimulator {
|
|||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(24, new SWItem(Material.PAPER, "§ePosition-Y §8- §7" + tntSpawn.getPosition().getY(), clickType -> {
|
swInventory.setItem(24, new SWItem(Material.PAPER, "§ePosition-Y §8- §7" + tntSpawn.getPosition().getY(), clickType -> {
|
||||||
changePosition(player, y -> {
|
changePosition(player, tntSpawn.getPosition().getY(), y -> {
|
||||||
tntSpawn.getPosition().setY(clamp(y));
|
tntSpawn.getPosition().setY(clamp(y));
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}, () -> editTNT(player, tntSpawn));
|
}, () -> editTNT(player, tntSpawn));
|
||||||
@ -229,7 +237,7 @@ public class TNTSimulator {
|
|||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}));
|
}));
|
||||||
swInventory.setItem(25, new SWItem(Material.PAPER, "§ePosition-Z §8- §7" + tntSpawn.getPosition().getZ(), clickType -> {
|
swInventory.setItem(25, new SWItem(Material.PAPER, "§ePosition-Z §8- §7" + tntSpawn.getPosition().getZ(), clickType -> {
|
||||||
changePosition(player, z -> {
|
changePosition(player, tntSpawn.getPosition().getZ(), z -> {
|
||||||
tntSpawn.getPosition().setZ(clamp(z));
|
tntSpawn.getPosition().setZ(clamp(z));
|
||||||
editTNT(player, tntSpawn);
|
editTNT(player, tntSpawn);
|
||||||
}, () -> editTNT(player, tntSpawn));
|
}, () -> editTNT(player, tntSpawn));
|
||||||
@ -241,12 +249,25 @@ public class TNTSimulator {
|
|||||||
swInventory.open();
|
swInventory.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void startSimulation(Player player) {
|
||||||
|
if (tntSimulatorMap.containsKey(player)) {
|
||||||
|
tntSimulatorMap.get(player).start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void addTNT(Player player, TNTSpawn tntSpawn) {
|
||||||
|
if (!tntSimulatorMap.containsKey(player)) {
|
||||||
|
tntSimulatorMap.put(player, new TNTSimulator());
|
||||||
|
}
|
||||||
|
tntSimulatorMap.get(player).tntSpawns.add(tntSpawn);
|
||||||
|
}
|
||||||
|
|
||||||
private static String active(boolean b) {
|
private static String active(boolean b) {
|
||||||
return b ? "§aan" : "§caus";
|
return b ? "§aan" : "§caus";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void changeCount(Player player, Consumer<Integer> result, Runnable failure) {
|
private static void changeCount(Player player, int defaultValue, Consumer<Integer> result, Runnable failure) {
|
||||||
SWAnvilInv swAnvilInv = new SWAnvilInv(player, "Zahl");
|
TNTSimulatorAnvil swAnvilInv = new TNTSimulatorAnvil(player, "Zahl", defaultValue + "");
|
||||||
swAnvilInv.setItem(Material.PAPER);
|
swAnvilInv.setItem(Material.PAPER);
|
||||||
swAnvilInv.setCallback(s -> {
|
swAnvilInv.setCallback(s -> {
|
||||||
try {
|
try {
|
||||||
@ -258,8 +279,8 @@ public class TNTSimulator {
|
|||||||
swAnvilInv.open();
|
swAnvilInv.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void changePosition(Player player, Consumer<Double> result, Runnable failure) {
|
private static void changePosition(Player player, double defaultValue, Consumer<Double> result, Runnable failure) {
|
||||||
SWAnvilInv swAnvilInv = new SWAnvilInv(player, "Position");
|
TNTSimulatorAnvil swAnvilInv = new TNTSimulatorAnvil(player, "Position", defaultValue + "");
|
||||||
swAnvilInv.setItem(Material.PAPER);
|
swAnvilInv.setItem(Material.PAPER);
|
||||||
swAnvilInv.setCallback(s -> {
|
swAnvilInv.setCallback(s -> {
|
||||||
try {
|
try {
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
* /
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bausystem.canonsimulator;
|
||||||
|
|
||||||
|
import de.steamwar.core.Core;
|
||||||
|
import de.steamwar.inventory.SWItem;
|
||||||
|
import net.wesjd.anvilgui.AnvilGUI;
|
||||||
|
import net.wesjd.anvilgui.AnvilGUI.Response;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class TNTSimulatorAnvil {
|
||||||
|
|
||||||
|
private final AnvilGUI.Builder builder;
|
||||||
|
private final Player player;
|
||||||
|
private Consumer<String> callback;
|
||||||
|
|
||||||
|
public TNTSimulatorAnvil(Player p, String t, String defaultValue) {
|
||||||
|
this.builder = (new AnvilGUI.Builder()).plugin(Core.getInstance()).title(t).text("" + defaultValue).onComplete(this::onResult);
|
||||||
|
this.player = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItem(Material m) {
|
||||||
|
this.builder.itemLeft((new SWItem(m, "").getItemStack()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCallback(Consumer<String> callback) {
|
||||||
|
this.callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void open() {
|
||||||
|
this.builder.open(this.player);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Response onResult(Player player, String s) {
|
||||||
|
this.callback.accept(s);
|
||||||
|
return Response.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
* /
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bausystem.canonsimulator;
|
||||||
|
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
public class TNTSimulatorListener implements Listener {
|
||||||
|
|
||||||
|
private static final Vector HALF = new Vector(0.5, 0.5, 0.5);
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||||
|
if (event.getItem() == null) return;
|
||||||
|
if (!event.getItem().isSimilar(TNTSimulator.WAND)) return;
|
||||||
|
event.setCancelled(true);
|
||||||
|
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_AIR) {
|
||||||
|
TNTSimulator.startSimulation(event.getPlayer());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.getClickedBlock() == null) {
|
||||||
|
TNTSimulator.openSimulator(event.getPlayer());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Vector location = event.getClickedBlock().getLocation().toVector().add(event.getBlockFace().getDirection()).add(HALF);
|
||||||
|
TNTSpawn tntSpawn = new TNTSpawn(location);
|
||||||
|
TNTSimulator.addTNT(event.getPlayer(), tntSpawn);
|
||||||
|
TNTSimulator.editTNT(event.getPlayer(), tntSpawn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
|
TNTSimulator.tntSimulatorMap.remove(event.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -26,8 +26,6 @@ import org.bukkit.World;
|
|||||||
import org.bukkit.entity.TNTPrimed;
|
import org.bukkit.entity.TNTPrimed;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class TNTSpawn implements Comparable<TNTSpawn> {
|
public class TNTSpawn implements Comparable<TNTSpawn> {
|
||||||
|
|
||||||
private static final World WORLD = Bukkit.getWorlds().get(0);
|
private static final World WORLD = Bukkit.getWorlds().get(0);
|
||||||
|
@ -33,8 +33,13 @@ public class CommandSimulator implements CommandExecutor {
|
|||||||
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) {
|
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) {
|
||||||
if(!(commandSender instanceof Player))
|
if(!(commandSender instanceof Player))
|
||||||
return false;
|
return false;
|
||||||
Player p = (Player) commandSender;
|
Player player = (Player) commandSender;
|
||||||
TNTSimulator.openSimulator(p);
|
if (args.length == 1 && args[0].equalsIgnoreCase("wand")) {
|
||||||
|
player.getInventory().setItemInMainHand(TNTSimulator.WAND);
|
||||||
|
player.updateInventory();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
TNTSimulator.openSimulator(player);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
* /
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bausystem.commands;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CommandSimulatorTabCompleter implements TabCompleter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if(!(sender instanceof Player)) return new ArrayList<>();
|
||||||
|
return detonaterTabComplete((Player) sender, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> detonaterTabComplete(Player player, String[] args) {
|
||||||
|
List<String> tabComplete = new ArrayList<>();
|
||||||
|
tabComplete.add("wand");
|
||||||
|
|
||||||
|
if (args.length >= 2) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
return manageList(tabComplete, args, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> manageList(List<String> strings, String[] args, int index) {
|
||||||
|
for (int i = strings.size() - 1; i >= 0; i--) {
|
||||||
|
if (!strings.get(i).startsWith(args[index])) {
|
||||||
|
strings.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strings;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
In neuem Issue referenzieren
Einen Benutzer sperren