SteamWar/BauSystem2.0
Archiviert
12
0

Fix and Add some GUI Stuff and All Region Items

Signed-off-by: Chaoscaot <chaoscaot444@gmail.com>
Dieser Commit ist enthalten in:
Chaoscaot 2021-04-21 14:48:32 +02:00
Ursprung f0fa92f5ca
Commit 4228ea291d
12 geänderte Dateien mit 709 neuen und 8 gelöschten Zeilen

Datei anzeigen

@ -1,7 +1,7 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2020 SteamWar.de-Serverteam
* Copyright (C) 2021 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
@ -31,7 +31,7 @@ public class RegionUtils_15 {
return BlockVector3.at(point.getX(), point.getY(), point.getZ());
}
BlockType mapColor(BlockType original, Color color) {
public BlockType mapColor(BlockType original, Color color) {
switch (color) {
case WHITE:
if (original == BlockTypes.YELLOW_CONCRETE) {

Datei anzeigen

@ -42,10 +42,12 @@ public enum Permission {
target.setWorldEdit(!target.isWorldEdit());
sendMessages(player, target.isWorldEdit(), target, "WorldEdit verwenden");
}),
MEMBER(bauweltMember -> true);
MEMBER(bauweltMember -> true),
OWNER(bauweltMember -> false);
private final Predicate<BauweltMember> permissionPredicate;
private BiConsumer<Player, BauweltMember> permissionChange = (player, bauweltMember) -> {};
private final BiConsumer<Player, BauweltMember> permissionChange = (player, bauweltMember) -> {
};
public boolean hasPermission(Player member) {
if (member.getUniqueId().equals(BauServer.getInstance().getOwner())) {

Datei anzeigen

@ -19,13 +19,19 @@
package de.steamwar.bausystem.features.gui;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.inventory.SWInventory;
import lombok.experimental.UtilityClass;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.HashSet;
import java.util.Set;
import java.util.*;
@UtilityClass
public class BauGUI {
@ -35,6 +41,15 @@ public class BauGUI {
private static final Set<Player> OPEN_INVS = new HashSet<>();
private static boolean updating = false;
private static final ItemStack GUI_ITEM;
static {
GUI_ITEM = new ItemStack(Material.NETHER_STAR);
ItemMeta meta = GUI_ITEM.getItemMeta();
meta.setDisplayName(ColorConfig.HIGHLIGHT + "Bau GUI");
GUI_ITEM.setItemMeta(meta);
}
public static void addItem(GuiItem item) {
ITEMS.add(item);
}
@ -44,12 +59,23 @@ public class BauGUI {
OPEN_INVS.add(p);
}
SWInventory inv = new SWInventory(p, 5 * 9, "Bau GUI");
ITEMS.forEach(item -> inv.setItem(item.getSlot(), item.getItem(p), item::click));
ITEMS.forEach(item -> inv.setItem(item.getSlot(), permissionLore(item.getItem(p), item.permission(), p), clickType -> {
if (item.permission().hasPermission(p)) {
if (item.click(clickType, p)) {
update();
}
} else {
p.closeInventory();
p.sendMessage(BauSystem.PREFIX + ColorConfig.ERROR + "Du hast nicht genug rechte um dies zu tun");
}
}));
inv.addCloseCallback(clickType -> {
if (!updating) {
OPEN_INVS.remove(p);
}
});
inv.open();
System.out.println(Arrays.toString(ITEMS.toArray()));
}
public static void update() {
@ -57,4 +83,36 @@ public class BauGUI {
OPEN_INVS.forEach(BauGUI::openBauGui);
updating = false;
}
public static void giveItem(Player p) {
SWUtils.giveItemToPlayer(p, GUI_ITEM);
}
private static ItemStack permissionLore(ItemStack itemStack, Permission permission, Player p) {
ItemMeta meta = itemStack.getItemMeta();
if (!permission.hasPermission(p)) {
List<String> lore = meta.getLore();
if (lore == null) {
lore = Collections.singletonList(ColorConfig.ERROR + permissionString(permission));
} else {
lore.add(ColorConfig.ERROR + permissionString(permission));
}
meta.setLore(lore);
}
itemStack.setItemMeta(meta);
return itemStack;
}
private static String permissionString(Permission permission) {
switch (permission) {
case OWNER:
return "Das ist nicht deine Bauwelt";
case WORLD:
return "Du darfst hier die Welt nicht einstellen";
case WORLDEDIT:
return "Du darfst hier kein Worldedit benutzen";
default:
return "Du must ein Member der Bauwelt sein";
}
}
}

Datei anzeigen

@ -19,11 +19,25 @@
package de.steamwar.bausystem.features.gui;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.command.SWCommand;
import org.bukkit.entity.Player;
@Linked(LinkageType.COMMAND)
public class BauGUICommand extends SWCommand {
protected BauGUICommand() {
super("gui", "baugui");
}
@Register(help = true)
public void genericHelp(Player p, String... args) {
BauGUI.openBauGui(p);
}
@Register("item")
public void giveItem(Player p) {
BauGUI.giveItem(p);
}
}

Datei anzeigen

@ -0,0 +1,119 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.features.region.items;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.region.Color;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Linked(LinkageType.GUI_ITEM)
public class ColorGuiItem extends GuiItem {
public ColorGuiItem() {
super(2);
}
private static Material mapColor(Color color) {
switch (color) {
case RED:
return Material.RED_CONCRETE;
case CYAN:
return Material.CYAN_CONCRETE;
case BLACK:
return Material.BLACK_CONCRETE;
case BLUE:
return Material.BLUE_CONCRETE;
case BROWN:
return Material.BROWN_CONCRETE;
case GRAY:
return Material.GRAY_CONCRETE;
case GREEN:
return Material.GREEN_CONCRETE;
case LIGHT_BLUE:
return Material.LIGHT_BLUE_CONCRETE;
case LIGHT_GRAY:
return Material.LIGHT_GRAY_CONCRETE;
case LIME:
return Material.LIME_CONCRETE;
case MAGENTA:
return Material.MAGENTA_CONCRETE;
case ORANGE:
return Material.ORANGE_CONCRETE;
case PINK:
return Material.PINK_CONCRETE;
case PURPLE:
return Material.PURPLE_CONCRETE;
case WHITE:
return Material.WHITE_CONCRETE;
default:
return Material.YELLOW_CONCRETE;
}
}
@Override
public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation());
ColorMode mode = region.getPlain(Flag.COLOR, ColorMode.class);
ItemStack itemStack = new ItemStack(mapColor(mode.getColor()));
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "Color: " + ColorConfig.HIGHLIGHT + mode.getChatValue());
itemStack.setItemMeta(meta);
return itemStack;
}
@Override
public boolean click(ClickType click, Player p) {
p.closeInventory();
ColorMode current = Region.getRegion(p.getLocation()).getPlain(Flag.COLOR, ColorMode.class);
List<SWListInv.SWListEntry<ColorMode>> items = new ArrayList<>();
for (ColorMode value : ColorMode.values()) {
items.add(new SWListInv.SWListEntry<>(new SWItem(mapColor(value.getColor()), (byte) 0, value.getChatValue(), Collections.emptyList(), value == current, clickType -> {
}), value));
}
SWListInv<ColorMode> inv = new SWListInv<ColorMode>(p, "Farbe Wählen", items, (clickType, colorMode) -> {
p.closeInventory();
p.performCommand("color " + colorMode.getChatValue());
});
inv.open();
return false;
}
@Override
public Permission permission() {
return Permission.OWNER;
}
}

Datei anzeigen

@ -0,0 +1,71 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.features.region.items;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FireMode;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@Linked(LinkageType.GUI_ITEM)
public class FireGuiItem extends GuiItem {
public FireGuiItem() {
super(3);
}
@Override
public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation());
if (region.getPlain(Flag.FIRE, FireMode.class) == FireMode.ALLOW) {
ItemStack itemStack = new ItemStack(Material.FIRE_CHARGE);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "Feuer: " + ColorConfig.HIGHLIGHT + "Eingeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
} else {
ItemStack itemStack = new ItemStack(Material.FIREWORK_STAR);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "Feuer: " + ColorConfig.HIGHLIGHT + "Eingeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
}
}
@Override
public boolean click(ClickType click, Player p) {
p.performCommand("fire");
return true;
}
@Override
public Permission permission() {
return Permission.WORLD;
}
}

Datei anzeigen

@ -0,0 +1,71 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.features.region.items;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@Linked(LinkageType.GUI_ITEM)
public class FreezeGuiItem extends GuiItem {
public FreezeGuiItem() {
super(1);
}
@Override
public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation());
if (region.getPlain(Flag.FREEZE, FreezeMode.class) == FreezeMode.ACTIVE) {
ItemStack itemStack = new ItemStack(Material.GUNPOWDER);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "Freeze: " + ColorConfig.HIGHLIGHT + "Eingeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
} else {
ItemStack itemStack = new ItemStack(Material.REDSTONE);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "Freeze: " + ColorConfig.HIGHLIGHT + "Ausgeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
}
}
@Override
public boolean click(ClickType click, Player p) {
p.performCommand("freeze");
return true;
}
@Override
public Permission permission() {
return Permission.WORLD;
}
}

Datei anzeigen

@ -0,0 +1,71 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.features.region.items;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@Linked(LinkageType.GUI_ITEM)
public class ProtectGuiItem extends GuiItem {
public ProtectGuiItem() {
super(4);
}
@Override
public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation());
if (region.getPlain(Flag.PROTECT, ProtectMode.class) == ProtectMode.ACTIVE) {
ItemStack itemStack = new ItemStack(Material.OBSIDIAN);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "Protect: " + ColorConfig.HIGHLIGHT + "Eingeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
} else {
ItemStack itemStack = new ItemStack(Material.STONE);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "Protect: " + ColorConfig.HIGHLIGHT + "Eingeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
}
}
@Override
public boolean click(ClickType click, Player p) {
p.performCommand("protect");
return true;
}
@Override
public Permission permission() {
return Permission.WORLDEDIT;
}
}

Datei anzeigen

@ -0,0 +1,88 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.features.region.items;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import de.steamwar.sql.Schematic;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Linked(LinkageType.GUI_ITEM)
public class ResetGuiItem extends GuiItem {
public ResetGuiItem() {
super(6);
}
@Override
public ItemStack getItem(Player player) {
ItemStack itemStack = new ItemStack(Material.END_STONE);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.HIGHLIGHT + "Reset");
itemStack.setItemMeta(meta);
return itemStack;
}
@Override
public boolean click(ClickType click, Player p) {
if (click == ClickType.LEFT) {
p.closeInventory();
p.performCommand("reset");
} else {
List<SWListInv.SWListEntry<Schematic>> schemList = new ArrayList<>();
for (Schematic schem : Schematic.getSchemsAccessibleByUser(p.getUniqueId())) {
Material m;
if (schem.getItem().isEmpty())
m = SWItem.getMaterial("CAULDRON_ITEM");
else
m = SWItem.getMaterial(schem.getItem());
SWItem item = new SWItem(m, "§e" + schem.getSchemName(), Collections.singletonList("§7" + schem.getSchemType().name()), !schem.getSchemType().writeable(), clickType -> {
});
schemList.add(new SWListInv.SWListEntry<>(item, schem));
}
SWListInv<Schematic> inv = new SWListInv<>(p, "Reset Prototypen wählen", schemList, (clickType, schematic) -> {
p.closeInventory();
p.performCommand("reset " + schematic.getSchemName());
});
p.closeInventory();
inv.open();
}
return false;
}
@Override
public Permission permission() {
return Permission.WORLDEDIT;
}
}

Datei anzeigen

@ -0,0 +1,88 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.features.region.items;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import de.steamwar.sql.Schematic;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Linked(LinkageType.GUI_ITEM)
public class TestblockGuiItem extends GuiItem {
public TestblockGuiItem() {
super(5);
}
@Override
public ItemStack getItem(Player player) {
ItemStack itemStack = new ItemStack(Material.END_STONE);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.HIGHLIGHT + "Testblock");
itemStack.setItemMeta(meta);
return itemStack;
}
@Override
public boolean click(ClickType click, Player p) {
if (click == ClickType.LEFT) {
p.closeInventory();
p.performCommand("testblock");
} else {
p.closeInventory();
List<SWListInv.SWListEntry<Schematic>> schemList = new ArrayList<>();
for (Schematic schem : Schematic.getSchemsAccessibleByUser(p.getUniqueId())) {
Material m;
if (schem.getItem().isEmpty())
m = SWItem.getMaterial("CAULDRON_ITEM");
else
m = SWItem.getMaterial(schem.getItem());
SWItem item = new SWItem(m, "§e" + schem.getSchemName(), Collections.singletonList("§7" + schem.getSchemType().name()), !schem.getSchemType().writeable(), clickType -> {
});
schemList.add(new SWListInv.SWListEntry<>(item, schem));
}
SWListInv<Schematic> inv = new SWListInv<>(p, "Testblock wählen", schemList, (clickType, schematic) -> {
p.closeInventory();
p.performCommand("testblock " + schematic.getSchemName());
});
inv.open();
}
return false;
}
@Override
public Permission permission() {
return Permission.WORLDEDIT;
}
}

Datei anzeigen

@ -0,0 +1,108 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.features.region.items;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.linkage.GuiItem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.TNTMode;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@Linked(LinkageType.GUI_ITEM)
public class TntGuiItem extends GuiItem {
public TntGuiItem() {
super(0);
}
@Override
public ItemStack getItem(Player player) {
switch (Region.getRegion(player.getLocation()).getPlain(Flag.TNT, TNTMode.class)) {
case DENY: {
ItemStack itemStack = new ItemStack(Material.MINECART);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "TNT: " + ColorConfig.HIGHLIGHT + "Ausgeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
}
case ONLY_TB: {
ItemStack itemStack = new ItemStack(Material.TNT_MINECART);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "TNT: " + ColorConfig.HIGHLIGHT + "nur Testblock");
itemStack.setItemMeta(meta);
return itemStack;
}
default: {
ItemStack itemStack = new ItemStack(Material.TNT);
ItemMeta meta = itemStack.getItemMeta();
meta.setDisplayName(ColorConfig.BASE + "TNT: " + ColorConfig.HIGHLIGHT + "Eingeschaltet");
itemStack.setItemMeta(meta);
return itemStack;
}
}
}
@Override
public boolean click(ClickType click, Player p) {
if (click == ClickType.LEFT) {
p.performCommand("tnt");
return true;
} else {
p.closeInventory();
SWInventory selector = new SWInventory(p, 9, "Tnt Modus");
selector.setItem(1, new SWItem(Material.TNT, ColorConfig.HIGHLIGHT + "Einschalten", clickType -> updateTntMode(TNTMode.ALLOW, p)));
if (!Region.getRegion(p.getLocation()).isGlobal())
selector.setItem(4, new SWItem(Material.TNT_MINECART, ColorConfig.HIGHLIGHT + "nur Testblock", clickType -> updateTntMode(TNTMode.ONLY_TB, p)));
selector.setItem(7, new SWItem(Material.MINECART, ColorConfig.HIGHLIGHT + "Ausschalten", clickType -> updateTntMode(TNTMode.DENY, p)));
selector.open();
return false;
}
}
private void updateTntMode(TNTMode mode, Player p) {
p.closeInventory();
switch (mode) {
case ONLY_TB:
p.performCommand("tnt tb");
break;
case ALLOW:
p.performCommand("tnt on");
break;
default:
p.performCommand("tnt off");
break;
}
}
@Override
public Permission permission() {
return Permission.WORLD;
}
}

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem.linkage;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.gui.BauGUI;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -34,9 +35,19 @@ public abstract class GuiItem {
public abstract ItemStack getItem(Player player);
public abstract boolean click(ClickType click);
public abstract boolean click(ClickType click, Player p);
public void update() {
BauGUI.update();
}
public abstract Permission permission();
@Override
public String toString() {
return "GuiItem{" +
"slot=" + slot +
"class=" + this.getClass().getName() +
'}';
}
}