Reworked Detonator #95
@ -19,12 +19,18 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.world;
|
package de.steamwar.bausystem.world;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
class AutoLoader_12 {
|
class AutoLoader_12 {
|
||||||
private AutoLoader_12(){}
|
private AutoLoader_12(){}
|
||||||
@ -47,11 +53,25 @@ class AutoLoader_12 {
|
|||||||
block.setData((byte)(block.getData() | 8));
|
block.setData((byte)(block.getData() | 8));
|
||||||
else
|
else
|
||||||
block.setData((byte)(block.getData() & -9));
|
block.setData((byte)(block.getData() & -9));
|
||||||
}else if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE){
|
}else if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE) {
|
||||||
if(active)
|
if (active)
|
||||||
block.setData((byte)1);
|
block.setData((byte) 1);
|
||||||
else
|
else
|
||||||
block.setData((byte)0);
|
block.setData((byte) 0);
|
||||||
|
}else if(material == Material.TRIPWIRE) {
|
||||||
|
if(active) {
|
||||||
|
ArmorStand armorStand = (ArmorStand) Bukkit.getWorlds().get(0).spawnEntity(location, EntityType.ARMOR_STAND);
|
||||||
|
armorStand.setVisible(false);
|
||||||
|
armorStand.setBasePlate(false);
|
||||||
|
armorStand.addScoreboardTag("detonator-" + location.getBlockX() + location.getBlockY() + location.getBlockZ());
|
||||||
|
}else {
|
||||||
|
List<Entity> entityList = Bukkit.getWorlds().get(0).getEntitiesByClasses(ArmorStand.class).stream().filter(entity ->
|
||||||
|
entity.getScoreboardTags().contains("detonator-" + location.getBlockX() + location.getBlockY() + location.getBlockZ()))
|
||||||
|
.limit(1)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if(entityList.isEmpty()) return false;
|
||||||
|
entityList.get(0).remove();
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -60,32 +80,30 @@ class AutoLoader_12 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
static void onPlayerInteract(IAutoLoader loader, PlayerInteractEvent event){
|
static Detoloader onPlayerInteractLoader(PlayerInteractEvent event){
|
||||||
if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
|
Block block = event.getClickedBlock();
|
||||||
Block block = event.getClickedBlock();
|
Material material = block.getType();
|
||||||
Material material = block.getType();
|
if(material == Material.LEVER){
|
||||||
if(material == Material.LEVER){
|
if((block.getData() & 8) == 8) {
|
||||||
if((block.getData() & 8) == 8) {
|
return new Detoloader("Hebel", 0).setActive(false);
|
||||||
new IAutoLoader.RedstoneActivation(loader, block.getLocation(), loader.getLastActivation(), false);
|
}else{
|
||||||
loader.print("§eHebel zurückgesetzt", true);
|
return new Detoloader("Hebel", 0).setActive(true);
|
||||||
}else{
|
|
||||||
new IAutoLoader.RedstoneActivation(loader, block.getLocation(), 1, true);
|
|
||||||
loader.print("§eHebel betätigt", true);
|
|
||||||
}
|
|
||||||
}else if(material == Material.STONE_BUTTON){
|
|
||||||
new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
|
|
||||||
loader.print("§eKnopf betätigt", true);
|
|
||||||
}else if(material == Material.WOOD_BUTTON){
|
|
||||||
new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 30);
|
|
||||||
loader.print("§eKnopf betätigt", true);
|
|
||||||
}
|
|
||||||
}else if(event.getAction() == Action.PHYSICAL){
|
|
||||||
Block block = event.getClickedBlock();
|
|
||||||
Material material = block.getType();
|
|
||||||
if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE){
|
|
||||||
new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
|
|
||||||
loader.print("§eDruckplatte betätigt", true);
|
|
||||||
}
|
}
|
||||||
|
}else if(material == Material.STONE_BUTTON){
|
||||||
|
return new Detoloader("Knopf", Detoloader.STONE_BUTTON);
|
||||||
|
}else if(material == Material.WOOD_BUTTON){
|
||||||
|
return new Detoloader("Knopf", Detoloader.WOODEN_BUTTON);
|
||||||
|
}else if (material == Material.NOTE_BLOCK) {
|
||||||
|
return new Detoloader("Noteblock", Detoloader.NOTE_BLOCK);
|
||||||
|
}else if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE){
|
||||||
|
return new Detoloader("Druckplatte", Detoloader.PRESSURE_PLATE);
|
||||||
|
}else if (material == Material.TRIPWIRE) {
|
||||||
|
return new Detoloader("Tripwire", Detoloader.TRIPWIRE);
|
||||||
}
|
}
|
||||||
|
return new Detoloader("§eUnbekannter Block betätigt (nicht aufgenommen)", -1).setAddBack(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean getLever(Block block) {
|
||||||
|
return (block.getData() & 8) == 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
package de.steamwar.bausystem.world;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.NoteBlock;
|
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.block.CraftNoteBlock;
|
|
||||||
import org.bukkit.material.*;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
public class Detonator_12 {
|
|
||||||
|
|
||||||
public static void handleSwitch(Location location) {
|
|
||||||
Block block = location.getBlock();
|
|
||||||
switch (block.getType()) {
|
|
||||||
case WOOD_BUTTON:
|
|
||||||
handleButton(block, 30);
|
|
||||||
break;
|
|
||||||
case STONE_BUTTON:
|
|
||||||
handleButton(block, 20);
|
|
||||||
break;
|
|
||||||
case LEVER:
|
|
||||||
handleLever(block);
|
|
||||||
break;
|
|
||||||
case NOTE_BLOCK:
|
|
||||||
handleNoteBlock(block);
|
|
||||||
break;
|
|
||||||
case TRIPWIRE:
|
|
||||||
handleTripWire(block);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleButton(Block block, int delay) {
|
|
||||||
Button btnpow = new Button(block.getType(), block.getData());
|
|
||||||
btnpow.setPowered(true);
|
|
||||||
block.setData(btnpow.getData());
|
|
||||||
updateBlock(block);
|
|
||||||
Bukkit.getScheduler().runTaskLater(getPlugin(), () -> {
|
|
||||||
btnpow.setPowered(false);
|
|
||||||
block.setData(btnpow.getData());
|
|
||||||
updateBlock(block);
|
|
||||||
}, delay);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleNoteBlock(Block block) {
|
|
||||||
NoteBlock noteBlock = new CraftNoteBlock(block);
|
|
||||||
if(!noteBlock.getNote().isSharped()) noteBlock.setNote(noteBlock.getNote().sharped());
|
|
||||||
else noteBlock.setNote(noteBlock.getNote().flattened());
|
|
||||||
block.setData(noteBlock.getRawData());
|
|
||||||
updateBlock(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleLever(Block block) {
|
|
||||||
Lever lever = new Lever(block.getType(), block.getData());
|
|
||||||
lever.setPowered(!lever.isPowered());
|
|
||||||
block.setData(lever.getData());
|
|
||||||
updateBlock(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleTripWire(Block block) {
|
|
||||||
Tripwire tripwire = new Tripwire(block.getType().getId(), block.getData());
|
|
||||||
tripwire.setActivated(!tripwire.isActivated());
|
|
||||||
block.setData(tripwire.getData());
|
|
||||||
updateBlock(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void updateBlock(Block block) {
|
|
||||||
block.getState().update(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Plugin getPlugin() {
|
|
||||||
return Bukkit.getPluginManager().getPlugin("BauSystem");
|
|
||||||
}
|
|
||||||
}
|
|
@ -26,7 +26,6 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.block.data.Powerable;
|
import org.bukkit.block.data.Powerable;
|
||||||
import org.bukkit.block.data.type.Switch;
|
import org.bukkit.block.data.type.Switch;
|
||||||
import org.bukkit.event.block.Action;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
class AutoLoader_15 {
|
class AutoLoader_15 {
|
||||||
@ -64,10 +63,12 @@ class AutoLoader_15 {
|
|||||||
relative = block.getRelative(BlockFace.UP);
|
relative = block.getRelative(BlockFace.UP);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
relative = block.getRelative(swtch.getFacing());
|
relative = block.getRelative(swtch.getFacing().getOppositeFace());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
updateBlock(relative);
|
updateBlock(relative);
|
||||||
|
}else if(block.getType() == Material.TRIPWIRE) {
|
||||||
|
updateBlock(block);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -78,37 +79,38 @@ class AutoLoader_15 {
|
|||||||
block.setBlockData(data, true);
|
block.setBlockData(data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void onPlayerInteract(IAutoLoader loader, PlayerInteractEvent event) {
|
static Detoloader onPlayerInteractLoader(PlayerInteractEvent event) {
|
||||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
assert block != null;
|
assert block != null;
|
||||||
BlockData data = block.getBlockData();
|
BlockData data = block.getBlockData();
|
||||||
if (!(data instanceof Powerable))
|
if (!(data instanceof Powerable))
|
||||||
return;
|
return new Detoloader("§eUnbekannter Block betätigt (nicht aufgenommen)", -1).setAddBack(false);
|
||||||
Powerable powerable = (Powerable) data;
|
Powerable powerable = (Powerable) data;
|
||||||
Material material = block.getType();
|
Material material = block.getType();
|
||||||
|
|
||||||
if (material == Material.LEVER) {
|
if (material == Material.LEVER) {
|
||||||
if (powerable.isPowered()) {
|
if (powerable.isPowered()) {
|
||||||
new IAutoLoader.RedstoneActivation(loader, block.getLocation(), loader.getLastActivation(), false);
|
return new Detoloader("Hebel", 0).setActive(false);
|
||||||
loader.print("§eHebel zurückgesetzt", true);
|
|
||||||
} else {
|
} else {
|
||||||
new IAutoLoader.RedstoneActivation(loader, block.getLocation(), 1, true);
|
return new Detoloader("Hebel", 0).setActive(true);
|
||||||
loader.print("§eHebel betätigt", true);
|
|
||||||
}
|
}
|
||||||
} else if (material == Material.STONE_BUTTON) {
|
} else if (material == Material.STONE_BUTTON) {
|
||||||
new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
|
return new Detoloader("Knopf", Detoloader.STONE_BUTTON);
|
||||||
loader.print("§eKnopf betätigt", true);
|
|
||||||
} else if (material.name().contains("PRESSURE_PLATE")){
|
} else if (material.name().contains("PRESSURE_PLATE")){
|
||||||
new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
|
return new Detoloader("Druckplatte", Detoloader.PRESSURE_PLATE);
|
||||||
loader.print("§eDruckplatte betätigt", true);
|
|
||||||
} else if (material.name().contains("BUTTON")) {
|
} else if (material.name().contains("BUTTON")) {
|
||||||
new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 30);
|
return new Detoloader("Knopf", Detoloader.WOODEN_BUTTON);
|
||||||
loader.print("§eKnopf betätigt", true);
|
}else if (material == Material.NOTE_BLOCK) {
|
||||||
|
return new Detoloader("Noteblock", Detoloader.NOTE_BLOCK);
|
||||||
|
}else if (material.name().equals("TRIPWIRE")) {
|
||||||
|
return new Detoloader("Tripwire", Detoloader.TRIPWIRE);
|
||||||
} else {
|
} else {
|
||||||
loader.print("§eUnbekannter Block betätigt (nicht aufgenommen)", false);
|
return new Detoloader("§eUnbekannter Block betätigt (aufgenommen)", 0).setAddBack(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean getLever(Block block) {
|
||||||
|
return ((Powerable)block.getBlockData()).isPowered();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,135 +0,0 @@
|
|||||||
package de.steamwar.bausystem.world;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.BlockFace;
|
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
import org.bukkit.block.data.Openable;
|
|
||||||
import org.bukkit.block.data.Powerable;
|
|
||||||
import org.bukkit.block.data.type.NoteBlock;
|
|
||||||
import org.bukkit.block.data.type.Switch;
|
|
||||||
import org.bukkit.block.data.type.Tripwire;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
public class Detonator_15 {
|
|
||||||
|
|
||||||
public static void handleSwitch(Location location) {
|
|
||||||
Block block = location.getBlock();
|
|
||||||
switch (block.getType()) {
|
|
||||||
case OAK_BUTTON:
|
|
||||||
case BIRCH_BUTTON:
|
|
||||||
case ACACIA_BUTTON:
|
|
||||||
case DARK_OAK_BUTTON:
|
|
||||||
case JUNGLE_BUTTON:
|
|
||||||
case SPRUCE_BUTTON:
|
|
||||||
case LEGACY_WOOD_BUTTON:
|
|
||||||
handleButton(block, 30);
|
|
||||||
break;
|
|
||||||
case STONE_BUTTON:
|
|
||||||
case LEGACY_STONE_BUTTON:
|
|
||||||
handleButton(block, 20);
|
|
||||||
break;
|
|
||||||
case NOTE_BLOCK:
|
|
||||||
case LEGACY_NOTE_BLOCK:
|
|
||||||
handleNoteBlock(block);
|
|
||||||
break;
|
|
||||||
case TRIPWIRE:
|
|
||||||
handleTripWire(block);
|
|
||||||
break;
|
|
||||||
case ACACIA_PRESSURE_PLATE:
|
|
||||||
case BIRCH_PRESSURE_PLATE:
|
|
||||||
case DARK_OAK_PRESSURE_PLATE:
|
|
||||||
case HEAVY_WEIGHTED_PRESSURE_PLATE:
|
|
||||||
case JUNGLE_PRESSURE_PLATE:
|
|
||||||
case LIGHT_WEIGHTED_PRESSURE_PLATE:
|
|
||||||
case OAK_PRESSURE_PLATE:
|
|
||||||
case SPRUCE_PRESSURE_PLATE:
|
|
||||||
case STONE_PRESSURE_PLATE:
|
|
||||||
handlePressurePlate(block);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if(block.getBlockData() instanceof Openable) {
|
|
||||||
Openable openable = (Openable) block.getBlockData();
|
|
||||||
openable.setOpen(!openable.isOpen());
|
|
||||||
block.setBlockData(openable);
|
|
||||||
} else if(block.getBlockData() instanceof Powerable) {
|
|
||||||
Powerable powerable = (Powerable) block.getBlockData();
|
|
||||||
powerable.setPowered(!powerable.isPowered());
|
|
||||||
block.setBlockData(powerable);
|
|
||||||
updateBlockface(block);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleButton(Block block, int delay) {
|
|
||||||
Powerable btnpow = (Powerable) block.getBlockData();
|
|
||||||
btnpow.setPowered(true);
|
|
||||||
block.setBlockData(btnpow);
|
|
||||||
updateBlockface(block);
|
|
||||||
Bukkit.getScheduler().runTaskLater(getPlugin(), () -> {
|
|
||||||
btnpow.setPowered(false);
|
|
||||||
block.setBlockData(btnpow);
|
|
||||||
updateBlockface(block);
|
|
||||||
}, delay);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleNoteBlock(Block block) {
|
|
||||||
NoteBlock noteBlock = (NoteBlock) block.getBlockData();
|
|
||||||
if(!noteBlock.getNote().isSharped()) noteBlock.setNote(noteBlock.getNote().sharped());
|
|
||||||
else noteBlock.setNote(noteBlock.getNote().flattened());
|
|
||||||
block.setBlockData(noteBlock);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleTripWire(Block block) {
|
|
||||||
Tripwire tripwire = (Tripwire) block.getBlockData();
|
|
||||||
if(tripwire.isAttached()) {
|
|
||||||
tripwire.setPowered(!tripwire.isPowered());
|
|
||||||
block.setBlockData(tripwire);
|
|
||||||
updateBlock(block);
|
|
||||||
} else {
|
|
||||||
tripwire.setPowered(!tripwire.isPowered());
|
|
||||||
block.setBlockData(tripwire);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handlePressurePlate(Block block) {
|
|
||||||
Powerable pressureSensor = (Powerable) block.getBlockData();
|
|
||||||
pressureSensor.setPowered(true);
|
|
||||||
block.setBlockData(pressureSensor);
|
|
||||||
updateBlock(block.getRelative(BlockFace.DOWN));
|
|
||||||
Bukkit.getScheduler().runTaskLater(getPlugin(), () -> {
|
|
||||||
pressureSensor.setPowered(false);
|
|
||||||
block.setBlockData(pressureSensor);
|
|
||||||
updateBlock(block.getRelative(BlockFace.DOWN));
|
|
||||||
}, 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void updateBlock(Block block) {
|
|
||||||
BlockData data = block.getBlockData();
|
|
||||||
block.setType(Material.BARRIER, true);
|
|
||||||
block.setBlockData(data, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void updateBlockface(Block block) {
|
|
||||||
Block relativebtn;
|
|
||||||
if (!(block.getBlockData() instanceof Switch)) return;
|
|
||||||
switch (((Switch) block.getBlockData()).getFace()) {
|
|
||||||
case FLOOR:
|
|
||||||
relativebtn = block.getRelative(BlockFace.DOWN);
|
|
||||||
break;
|
|
||||||
case CEILING:
|
|
||||||
relativebtn = block.getRelative(BlockFace.UP);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
relativebtn = block.getRelative(((Switch) block.getBlockData()).getFacing());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
updateBlock(relativebtn);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Plugin getPlugin() {
|
|
||||||
return Bukkit.getPluginManager().getPlugin("BauSystem");
|
|
||||||
}
|
|
||||||
}
|
|
87
BauSystem_API/src/de/steamwar/bausystem/world/Detoloader.java
Normale Datei
87
BauSystem_API/src/de/steamwar/bausystem/world/Detoloader.java
Normale Datei
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
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.world;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
public class Detoloader {
|
||||||
|
|
||||||
|
String message;
|
||||||
|
int activation;
|
||||||
|
boolean active, addBack = true, useActive = false;
|
||||||
|
|
||||||
|
public Detoloader(String message, int activation) {
|
||||||
|
this.message = message;
|
||||||
|
this.activation = activation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBlock() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlock(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getActivation() {
|
||||||
|
return activation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return active;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Detoloader setActive(boolean active) {
|
||||||
|
useActive = true;
|
||||||
|
this.active = active;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAddBack() {
|
||||||
|
return addBack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Detoloader setAddBack(boolean addBack) {
|
||||||
|
this.addBack = addBack;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static class DetonatorActivation {
|
||||||
|
|
||||||
|
int activation = -1;
|
||||||
|
Location location;
|
||||||
|
|
||||||
|
public DetonatorActivation(Location location) {
|
||||||
|
this.location = location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DetonatorActivation(int activation, Location location) {
|
||||||
|
this.activation = activation;
|
||||||
|
this.location = location;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Timings
|
||||||
|
public static final int STONE_BUTTON = 20;
|
||||||
|
public static final int WOODEN_BUTTON = 30;
|
||||||
|
public static final int PRESSURE_PLATE = 20;
|
||||||
|
public static final int NOTE_BLOCK = 20;
|
||||||
|
public static final int TRIPWIRE = 10;
|
||||||
|
}
|
@ -121,7 +121,6 @@ public class BauSystem extends JavaPlugin implements Listener {
|
|||||||
Bukkit.getPluginManager().registerEvents(new RegionListener(), this);
|
Bukkit.getPluginManager().registerEvents(new RegionListener(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new BauScoreboard(), this);
|
Bukkit.getPluginManager().registerEvents(new BauScoreboard(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new TraceListener(), this);
|
Bukkit.getPluginManager().registerEvents(new TraceListener(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new Detonator(), this);
|
|
||||||
Bukkit.getPluginManager().registerEvents(new ClipboardListener(), this);
|
Bukkit.getPluginManager().registerEvents(new ClipboardListener(), this);
|
||||||
new AFKStopper();
|
new AFKStopper();
|
||||||
TNTTracer.init();
|
TNTTracer.init();
|
||||||
|
@ -1,30 +1,39 @@
|
|||||||
|
/*
|
||||||
|
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;
|
package de.steamwar.bausystem.commands;
|
||||||
|
|
||||||
import de.steamwar.bausystem.BauSystem;
|
import de.steamwar.bausystem.BauSystem;
|
||||||
import de.steamwar.bausystem.Permission;
|
import de.steamwar.bausystem.Permission;
|
||||||
import de.steamwar.bausystem.world.Detonator;
|
import de.steamwar.bausystem.world.Detonator;
|
||||||
import de.steamwar.bausystem.world.Welt;
|
import de.steamwar.bausystem.world.Welt;
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
|
||||||
import net.md_5.bungee.api.chat.ClickEvent;
|
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class CommandDetonator implements CommandExecutor {
|
public class CommandDetonator implements CommandExecutor {
|
||||||
|
|
||||||
private void help(Player player) {
|
private void help(Player player) {
|
||||||
player.sendMessage("§8/§edetonator wand §8- §7Legt den Fernzünder ins Inventar");
|
player.sendMessage("§8/§edetonator wand §8- §7Legt den Fernzünder ins Inventar");
|
||||||
player.sendMessage("§8/§edetonator detonate §8- §7Benutzt den Fernzünder");
|
player.sendMessage("§8/§edetonator detonate §8- §7Benutzt den Fernzünder");
|
||||||
player.sendMessage("§8/§edetonator reset §8- §7Löscht alle markierten Positionen");
|
player.sendMessage("§8/§edetonator reset §8- §7Löscht alle markierten Positionen");
|
||||||
player.sendMessage("§8/§edetonator add [X] [Y] [Z] §8- §7Fügt den Block an der Coordinate hinzu");
|
|
||||||
player.sendMessage("§8/§edetonator list §8- §7Zeigt dir alle Punkte an");
|
|
||||||
player.sendMessage("§8/§edetonator tp [Punkt] §8- §7Teleportiert dich zu dem Punkt");
|
|
||||||
player.sendMessage("§7Optionale Parameter mit §8<>§7, Benötigte Parameter mit §8[]");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean permissionCheck(Player player) {
|
private boolean permissionCheck(Player player) {
|
||||||
@ -54,72 +63,17 @@ public class CommandDetonator implements CommandExecutor {
|
|||||||
case "item":
|
case "item":
|
||||||
player.getInventory().setItemInMainHand(Detonator.WAND);
|
player.getInventory().setItemInMainHand(Detonator.WAND);
|
||||||
player.updateInventory();
|
player.updateInventory();
|
||||||
|
Detonator.getDetonator(player);
|
||||||
break;
|
break;
|
||||||
case "delete":
|
case "delete":
|
||||||
case "reset":
|
case "reset":
|
||||||
case "remove":
|
case "remove":
|
||||||
Detonator.INSTANCE.deleteLocations(player);
|
Detonator.deleteDetonator(player);
|
||||||
break;
|
break;
|
||||||
case "detonate":
|
case "detonate":
|
||||||
case "click":
|
case "click":
|
||||||
case "use":
|
case "use":
|
||||||
Detonator.INSTANCE.execute(player);
|
Detonator.getDetonator(player).execute();
|
||||||
break;
|
|
||||||
case "add":
|
|
||||||
case "location":
|
|
||||||
case "loc":
|
|
||||||
if (args.length >= 4) {
|
|
||||||
try {
|
|
||||||
int x = Integer.parseInt(args[1]);
|
|
||||||
int y = Integer.parseInt(args[2]);
|
|
||||||
int z = Integer.parseInt(args[3]);
|
|
||||||
Detonator.INSTANCE.addLocation(player, new Location(player.getWorld(), x, y, z), true);
|
|
||||||
}catch (NumberFormatException e){
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Coordinate an!");
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Coordinate an!");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "list":
|
|
||||||
case "show":
|
|
||||||
if(!Detonator.INSTANCE.containsPlayer(player) ||
|
|
||||||
Detonator.INSTANCE.getLocations(player).isEmpty()) {
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§cDu hast keine Punkte!");
|
|
||||||
}else {
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§7Deine Punkte:");
|
|
||||||
int i = 0;
|
|
||||||
for (Detonator.Loc loc: Detonator.INSTANCE.getLocations(player)) {
|
|
||||||
i++;
|
|
||||||
sendTxtCmd(player, ChatMessageType.SYSTEM, newTxtCmd("§ePunkt " + i + "§8: §7[" + loc.getCords()[0]+ ", " + loc.getCords()[1] +
|
|
||||||
", " + loc.getCords()[2] + "]", "/detonator tp " + i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "tp":
|
|
||||||
case "teleport":
|
|
||||||
if(!Detonator.INSTANCE.containsPlayer(player) ||
|
|
||||||
Detonator.INSTANCE.getLocations(player).isEmpty()) {
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§cDu hast keine Punkte!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(args.length <= 1) {
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§cNicht genug Argumente!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
int i = Integer.parseInt(args[1]);
|
|
||||||
if(Detonator.INSTANCE.getLocations(player).size() <= i || i > 0) {
|
|
||||||
player.teleport(player.getLocation().zero().add(new ArrayList<>(Detonator.INSTANCE.getLocations(player)).get(i-1).getLocation()
|
|
||||||
.add(0.5, 0, 0.5)));
|
|
||||||
TextComponent.fromLegacyText("§aTeleportiert zu Punkt: " + args[1]);
|
|
||||||
}else {
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Punkt ein!");
|
|
||||||
}
|
|
||||||
}catch (NumberFormatException e) {
|
|
||||||
player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Zahl ein!");
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
help(player);
|
help(player);
|
||||||
@ -127,22 +81,4 @@ public class CommandDetonator implements CommandExecutor {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TextComponent newTxtCmd(String txt, String cmd) {
|
|
||||||
TextComponent tc = new TextComponent();
|
|
||||||
tc.setText(txt);
|
|
||||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, cmd));
|
|
||||||
return tc;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendTxtCmd(Player p, ChatMessageType chatMessageType ,TextComponent... tcs) {
|
|
||||||
TextComponent[] var5 = tcs;
|
|
||||||
int var4 = tcs.length;
|
|
||||||
|
|
||||||
for(int var3 = 0; var3 < var4; ++var3) {
|
|
||||||
TextComponent textComponent = var5[var3];
|
|
||||||
p.spigot().sendMessage(chatMessageType, textComponent);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
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;
|
package de.steamwar.bausystem.commands;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -20,10 +39,7 @@ public class CommandDetonatorTabCompleter implements TabCompleter {
|
|||||||
List<String> tabComplete = new ArrayList<>();
|
List<String> tabComplete = new ArrayList<>();
|
||||||
tabComplete.add("wand");
|
tabComplete.add("wand");
|
||||||
tabComplete.add("reset");
|
tabComplete.add("reset");
|
||||||
tabComplete.add("delete");
|
tabComplete.add("detonate");
|
||||||
tabComplete.add("add");
|
|
||||||
tabComplete.add("list");
|
|
||||||
tabComplete.add("tp");
|
|
||||||
|
|
||||||
if (args.length >= 2) {
|
if (args.length >= 2) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
|
@ -28,6 +28,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
@ -155,16 +156,31 @@ public class AutoLoader extends IAutoLoader implements Listener {
|
|||||||
//BlockRedstoneEvent?
|
//BlockRedstoneEvent?
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerInteract(PlayerInteractEvent event){
|
public void onPlayerInteract(PlayerInteractEvent event){
|
||||||
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL)
|
||||||
|
return;
|
||||||
|
|
||||||
if(!setup || !event.getPlayer().equals(player))
|
if(!setup || !event.getPlayer().equals(player))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Detoloader detoloader = null;
|
||||||
switch(Core.getVersion()){
|
switch(Core.getVersion()){
|
||||||
case 15:
|
case 15:
|
||||||
AutoLoader_15.onPlayerInteract(this, event);
|
detoloader = AutoLoader_15.onPlayerInteractLoader(event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
AutoLoader_12.onPlayerInteract(this, event);
|
detoloader = AutoLoader_12.onPlayerInteractLoader(event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if(detoloader == null) return;
|
||||||
|
if(detoloader.useActive)
|
||||||
|
new IAutoLoader.RedstoneActivation(this, event.getClickedBlock().getLocation()
|
||||||
|
, detoloader.getActivation() == 0 ? getLastActivation() : detoloader.getActivation()
|
||||||
|
, detoloader.isActive());
|
||||||
|
else
|
||||||
|
new IAutoLoader.TemporaryActivation(this, event.getClickedBlock().getLocation()
|
||||||
|
, detoloader.getActivation());
|
||||||
|
print(detoloader.addBack ? "§e" + detoloader.getBlock() + " betätigt" :
|
||||||
|
detoloader.getBlock(), detoloader.addBack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -1,17 +1,35 @@
|
|||||||
|
/*
|
||||||
|
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.world;
|
package de.steamwar.bausystem.world;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.BauSystem;
|
||||||
import de.steamwar.core.Core;
|
import de.steamwar.core.Core;
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.inventory.ItemFlag;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
@ -19,95 +37,121 @@ import java.util.*;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Detonator implements Listener {
|
public class Detonator implements Listener {
|
||||||
|
|
||||||
private final Map<Player, Set<Loc>> locs;
|
|
||||||
|
|
||||||
public static Detonator INSTANCE;
|
public static final ItemStack WAND;
|
||||||
public static ItemStack WAND;
|
private static final Map<Player, Detonator> players = new HashMap<>();
|
||||||
|
|
||||||
public Detonator() {
|
private final Set<Detoloader.DetonatorActivation> locs = new HashSet<>();
|
||||||
locs = new HashMap<>();
|
private final Player player;
|
||||||
|
|
||||||
|
|
||||||
|
static {
|
||||||
WAND = new ItemStack(Material.TRIPWIRE_HOOK, 1);
|
WAND = new ItemStack(Material.TRIPWIRE_HOOK, 1);
|
||||||
ItemMeta im = WAND.getItemMeta();
|
ItemMeta im = WAND.getItemMeta();
|
||||||
|
|
||||||
im.setDisplayName("§6Fernzünder");
|
im.setDisplayName("§6Fernzünder");
|
||||||
im.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
|
||||||
|
|
||||||
List<String> lorelist = Arrays.asList("§eLinks Klick §8- §7Setzte einen Punkt zum Aktivieren",
|
List<String> lorelist = Arrays.asList("§eLinks Klick §8- §7Setzte einen Punkt zum Aktivieren",
|
||||||
"§eLinks Klick + Shift §8- §7Füge einen Punkt hinzu", "§eRechts Klick §8- §7Löse alle Punkte aus");
|
"§eLinks Klick + Shift §8- §7Füge einen Punkt hinzu", "§eRechts Klick §8- §7Löse alle Punkte aus");
|
||||||
im.setLore(lorelist);
|
im.setLore(lorelist);
|
||||||
|
|
||||||
WAND.setItemMeta(im);
|
WAND.setItemMeta(im);
|
||||||
INSTANCE = this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addLocation(Player player, Location location, boolean shift) {
|
public static Detonator getDetonator(Player player){
|
||||||
if(!shift) locs.get(player).clear();
|
if(!players.containsKey(player))
|
||||||
locs.get(player).add(new Loc(location.getBlockX(),
|
return new Detonator(player);
|
||||||
location.getBlockY(),
|
return players.get(player);
|
||||||
location.getBlockZ()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteLocations(Player player) {
|
public Detonator(Player player) {
|
||||||
if(locs.containsKey(player)) locs.remove(player);
|
this.player = player;
|
||||||
|
Bukkit.getPluginManager().registerEvents(this, BauSystem.getPlugin());
|
||||||
|
players.put(player, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteLocation(Player player, Location location) {
|
public static void deleteDetonator(Player player) {
|
||||||
if(locs.get(player).stream().filter(loc -> loc.equals(Loc.getFromLocation(location))).count() >= 1)
|
if(players.containsKey(player))
|
||||||
locs.get(player).remove(locs.get(player).stream().filter(loc -> Loc.getFromLocation(location)
|
players.remove(player);
|
||||||
.equals(loc)).limit(1).collect(Collectors.toList()).get(0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Loc> getLocations(Player player) {
|
public void execute() {
|
||||||
return locs.get(player);
|
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§a" + locs.size() + " Punkt(e) ausgelöst!"));
|
||||||
}
|
for (Detoloader.DetonatorActivation activation: getLocations()) {
|
||||||
|
|
||||||
public boolean containsPlayer(Player player) {
|
Boolean powered;
|
||||||
return locs.containsKey(player);
|
if(activation.activation == -1) switch (Core.getVersion()) {
|
||||||
}
|
|
||||||
|
|
||||||
public void execute(Player player) {
|
|
||||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§a" + locs.get(player).size() + " Punkt(e) ausgelöst!"));
|
|
||||||
for (Loc loc: locs.get(player)) {
|
|
||||||
switch(Core.getVersion()){
|
|
||||||
case 15:
|
case 15:
|
||||||
Detonator_15.handleSwitch(loc.getLocation());
|
powered = AutoLoader_15.getLever(activation.location.getBlock());
|
||||||
|
AutoLoader_15.setRedstone(activation.location, !powered);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Detonator_12.handleSwitch(loc.getLocation());
|
powered = AutoLoader_12.getLever(activation.location.getBlock());
|
||||||
|
AutoLoader_12.setRedstone(activation.location, !powered);
|
||||||
|
}else switch (Core.getVersion()) {
|
||||||
|
case 15:
|
||||||
|
AutoLoader_15.setRedstone(activation.location, true);
|
||||||
|
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () ->
|
||||||
|
AutoLoader_15.setRedstone(activation.location, false), activation.activation);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AutoLoader_12.setRedstone(activation.location, true);
|
||||||
|
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () ->
|
||||||
|
AutoLoader_12.setRedstone(activation.location, false), activation.activation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||||
|
if(!event.getPlayer().equals(player))
|
||||||
|
return;
|
||||||
if (event.getItem() == null) return;
|
if (event.getItem() == null) return;
|
||||||
if (event.getItem().isSimilar(WAND)) {
|
if (event.getItem().isSimilar(WAND)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
if(!locs.containsKey(event.getPlayer())) locs.put(event.getPlayer(), new HashSet<>());
|
|
||||||
switch (event.getAction()) {
|
switch (event.getAction()) {
|
||||||
case LEFT_CLICK_BLOCK:
|
case LEFT_CLICK_BLOCK:
|
||||||
Location location = event.getClickedBlock().getLocation();
|
Detoloader detoloader = null;
|
||||||
if (event.getPlayer().isSneaking()){
|
switch(Core.getVersion()){
|
||||||
if(locs.get(event.getPlayer()).stream().filter(loc -> loc.equals(Loc.getFromLocation(location)))
|
case 15:
|
||||||
.count() >= 1) {
|
detoloader = AutoLoader_15.onPlayerInteractLoader(event);
|
||||||
deleteLocation(event.getPlayer(), location);
|
break;
|
||||||
event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent
|
default:
|
||||||
.fromLegacyText("§cPunkt entfernt!"));
|
detoloader = AutoLoader_12.onPlayerInteractLoader(event);
|
||||||
}else {
|
|
||||||
addLocation(event.getPlayer(), location, true);
|
|
||||||
event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent
|
|
||||||
.fromLegacyText("§aPunkt hinzugefügt!"));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
addLocation(event.getPlayer(), location, false);
|
|
||||||
event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent
|
|
||||||
.fromLegacyText("§aPunkt gesetzt!"));
|
|
||||||
}
|
}
|
||||||
break;
|
if(detoloader == null) return;
|
||||||
|
|
||||||
|
if(event.getPlayer().isSneaking()) {
|
||||||
|
if(locs.stream().filter(detonatorActivation -> detonatorActivation.location.equals(event.getClickedBlock().getLocation())).collect(Collectors.toList()).size() == 1) {
|
||||||
|
locs.forEach(detonatorActivation -> {
|
||||||
|
if(detonatorActivation.location.equals(event.getClickedBlock().getLocation())) locs.remove(detonatorActivation);
|
||||||
|
});
|
||||||
|
print(detoloader.addBack ? "§e" + detoloader.getBlock() + " entfernt" :
|
||||||
|
detoloader.getBlock(), detoloader.addBack);
|
||||||
|
}else {
|
||||||
|
if(detoloader.getActivation() == 0) {
|
||||||
|
locs.add(new Detoloader.DetonatorActivation(event.getClickedBlock().getLocation()));
|
||||||
|
}else {
|
||||||
|
locs.add(new Detoloader.DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation()));
|
||||||
|
}
|
||||||
|
print(detoloader.addBack ? "§e" + detoloader.getBlock() + " hinzugefügt" :
|
||||||
|
detoloader.getBlock(), detoloader.addBack);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
locs.clear();
|
||||||
|
if(detoloader.getActivation() == 0) {
|
||||||
|
locs.add(new Detoloader.DetonatorActivation(event.getClickedBlock().getLocation()));
|
||||||
|
}else {
|
||||||
|
locs.add(new Detoloader.DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation()));
|
||||||
|
}
|
||||||
|
print(detoloader.addBack ? "§e" + detoloader.getBlock() + " getsetzt" :
|
||||||
|
detoloader.getBlock(), detoloader.addBack);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case RIGHT_CLICK_AIR:
|
case RIGHT_CLICK_AIR:
|
||||||
case RIGHT_CLICK_BLOCK:
|
case RIGHT_CLICK_BLOCK:
|
||||||
execute(event.getPlayer());
|
execute();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,40 +159,21 @@ public class Detonator implements Listener {
|
|||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
if(locs.containsKey(event.getPlayer())) {
|
deleteDetonator(event.getPlayer());
|
||||||
locs.remove(event.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Loc {
|
Set<Detoloader.DetonatorActivation> getLocations() {
|
||||||
|
return locs;
|
||||||
|
}
|
||||||
|
|
||||||
private final int x;
|
Player getPlayer() {
|
||||||
private final int y;
|
return player;
|
||||||
private final int z;
|
}
|
||||||
|
|
||||||
public Loc(int x, int y, int z) {
|
void print(String message, boolean withSize){
|
||||||
this.x = x;
|
if(withSize)
|
||||||
this.y = y;
|
getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message + " §8" + getLocations().size()));
|
||||||
this.z = z;
|
else
|
||||||
}
|
getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
|
||||||
|
|
||||||
public int[] getCords() {
|
|
||||||
return new int[] {x, y, z};
|
|
||||||
}
|
|
||||||
|
|
||||||
public Location getLocation() {
|
|
||||||
return new Location(Bukkit.getWorlds().get(0), x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Loc getFromLocation(Location location) {
|
|
||||||
return new Loc(location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if(!(o instanceof Loc)) return false;
|
|
||||||
Loc loc = (Loc) o;
|
|
||||||
return loc.getCords()[0] == x && loc.getCords()[1] == y && loc.getCords()[2] == z;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren