Implementing AnvilGUI + optional CustomItems in SWListInv + Refactoring #78
@ -1,32 +0,0 @@
|
||||
/*
|
||||
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.inventory;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryCustom;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
class SWInventory_10 {
|
||||
private SWInventory_10(){}
|
||||
|
||||
static Inventory get(Player player, int size, String title){
|
||||
return new CraftInventoryCustom(player, size, title);
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
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.inventory;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryCustom;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
class SWInventory_12 {
|
||||
private SWInventory_12(){}
|
||||
|
||||
static Inventory get(Player player, int size, String title){
|
||||
return new CraftInventoryCustom(player, size, title);
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
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.inventory;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryCustom;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
class SWInventory_14 {
|
||||
private SWInventory_14() {}
|
||||
|
||||
static Inventory get(Player player, int size, String title){
|
||||
return new CraftInventoryCustom(player, size, title);
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
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.inventory;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
class SWInventory_15 {
|
||||
private SWInventory_15() {}
|
||||
|
||||
static Inventory get(Player player, int size, String title){
|
||||
return new CraftInventoryCustom(player, size, title);
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
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.inventory;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCustom;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
class SWInventory_8 {
|
||||
private SWInventory_8(){}
|
||||
|
||||
static Inventory get(Player player, int size, String title){
|
||||
return new CraftInventoryCustom(player, size, title);
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
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.inventory;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryCustom;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
class SWInventory_9 {
|
||||
private SWInventory_9(){}
|
||||
|
||||
static Inventory get(Player player, int size, String title){
|
||||
return new CraftInventoryCustom(player, size, title);
|
||||
}
|
||||
}
|
@ -14,6 +14,13 @@
|
||||
<main.basedir>${project.basedir}/..</main.basedir>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>codemc-snapshots</id>
|
||||
<url>https://repo.codemc.io/repository/maven-snapshots/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<artifactId>SpigotCore_Main</artifactId>
|
||||
<version>2.0</version>
|
||||
<packaging>jar</packaging>
|
||||
@ -69,6 +76,12 @@
|
||||
<scope>system</scope>
|
||||
<systemPath>${main.basedir}/lib/ProtocolLib.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.wesjd</groupId>
|
||||
<artifactId>anvilgui</artifactId>
|
||||
<version>1.4.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_API</artifactId>
|
||||
|
84
SpigotCore_Main/src/de/steamwar/inventory/SWAnvilInv.java
Normale Datei
84
SpigotCore_Main/src/de/steamwar/inventory/SWAnvilInv.java
Normale Datei
@ -0,0 +1,84 @@
|
||||
/*
|
||||
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.inventory;
|
||||
|
||||
import de.steamwar.core.Core;
|
||||
import net.wesjd.anvilgui.AnvilGUI;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SWAnvilInv {
|
||||
|
||||
private final AnvilGUI.Builder builder;
|
||||
private final Player player;
|
||||
|
||||
private Response callback;
|
||||
|
||||
public SWAnvilInv(Player p, String t){
|
||||
builder = new AnvilGUI.Builder().plugin(Core.getInstance()).title(t).text("»").onComplete(this::onResult);
|
||||
player = p;
|
||||
}
|
||||
|
||||
public void setItem(Material m){
|
||||
setItem(m, new ArrayList<>(), false);
|
||||
}
|
||||
|
||||
public void setItem(Material m, byte meta){
|
||||
setItem(m, meta, new ArrayList<>(), false);
|
||||
}
|
||||
|
||||
public void setItem(Material m, List<String> lore, boolean e){
|
||||
setItem(m, (byte)0, lore, e);
|
||||
}
|
||||
|
||||
public void setItem(Material m, byte meta, List<String> lore, boolean e){
|
||||
builder.itemLeft(new SWItem(m, meta, "»", lore, e, null).getItemStack());
|
||||
}
|
||||
|
||||
public void setCallback(Response callback){
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
public void addCloseCallback(Runnable callback){
|
||||
builder.onClose(p -> callback.run());
|
||||
}
|
||||
|
||||
public void open(){
|
||||
builder.open(player);
|
||||
}
|
||||
|
||||
private AnvilGUI.Response onResult(Player player, String s) {
|
||||
if(s.startsWith("»"))
|
||||
s = s.substring(1);
|
||||
callback.onResult(s);
|
||||
return AnvilGUI.Response.close();
|
||||
}
|
||||
|
||||
public void onClose(Player player) {
|
||||
player.sendMessage("Closing");
|
||||
|
||||
}
|
||||
|
||||
public static interface Response{
|
||||
Chaoscaot
hat
Warum muss man hier was Eigenes machen, kann man nicht irgendwie einen Consumer o.Ä. nutzen? Warum muss man hier was Eigenes machen, kann man nicht irgendwie einen Consumer o.Ä. nutzen?
|
||||
void onResult(String s);
|
||||
}
|
||||
}
|
@ -36,32 +36,14 @@ import java.util.Map;
|
||||
|
||||
public class SWInventory implements Listener {
|
||||
|
||||
Player player;
|
||||
private Map<Integer, InvCallback> callbacks;
|
||||
Inventory inventory;
|
||||
final Player player;
|
||||
private final Map<Integer, InvCallback> callbacks = new HashMap<>();
|
||||
final Inventory inventory;
|
||||
|
||||
|
||||
public SWInventory(Player p, int size, String t){
|
||||
callbacks = new HashMap<>();
|
||||
player = p;
|
||||
switch(Core.getVersion()){
|
||||
case 8:
|
||||
inventory = SWInventory_8.get(p, size, t);
|
||||
break;
|
||||
case 9:
|
||||
inventory = SWInventory_9.get(p, size, t);
|
||||
break;
|
||||
case 10:
|
||||
inventory = SWInventory_10.get(p, size, t);
|
||||
break;
|
||||
case 14:
|
||||
inventory = SWInventory_14.get(p, size, t);
|
||||
break;
|
||||
case 15:
|
||||
inventory = SWInventory_15.get(p, size, t);
|
||||
break;
|
||||
default:
|
||||
inventory = SWInventory_12.get(p, size, t);
|
||||
}
|
||||
inventory = Bukkit.createInventory(p, size, t);
|
||||
}
|
||||
|
||||
public SWInventory(Player p, int size, String t, Map<Integer, SWItem> items){
|
||||
@ -106,7 +88,7 @@ public class SWInventory implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent e){
|
||||
private void onInventoryClick(InventoryClickEvent e){
|
||||
if(!player.equals(e.getWhoClicked()))
|
||||
return;
|
||||
|
||||
@ -116,7 +98,7 @@ public class SWInventory implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClose(InventoryCloseEvent e){
|
||||
private void onInventoryClose(InventoryCloseEvent e){
|
||||
if(!player.equals(e.getPlayer()))
|
||||
return;
|
||||
|
||||
|
@ -103,10 +103,18 @@ public class SWItem {
|
||||
this(material, (byte)0, name, new ArrayList<>(), false, null);
|
||||
}
|
||||
|
||||
public SWItem(Material material, String name, InvCallback c){
|
||||
this(material, (byte)0, name, new ArrayList<>(), false, c);
|
||||
}
|
||||
|
||||
public SWItem(Material material, byte meta, String name){
|
||||
this(material, meta, name, new ArrayList<>(), false, null);
|
||||
}
|
||||
|
||||
public SWItem(Material material, byte meta, String name, InvCallback c){
|
||||
this(material, meta, name, new ArrayList<>(), false, c);
|
||||
}
|
||||
|
||||
public SWItem(Material material, String name, List<String> lore, boolean enchanted, InvCallback c) {
|
||||
this(material, (byte)0, name, lore, enchanted, c);
|
||||
}
|
||||
|
@ -30,21 +30,29 @@ import java.util.*;
|
||||
|
||||
public class SWListInv<T> extends SWInventory {
|
||||
|
||||
private final List<SWListEntry<T>> elements;
|
||||
|
||||
private final Map<Integer, SWItem> customItems = new HashMap<>();
|
||||
private ListCallback<T> callback;
|
||||
private List<SWListEntry<T>> elements;
|
||||
private int page;
|
||||
private boolean opened = false;
|
||||
|
||||
public SWListInv(Player p, String t, List<SWListEntry<T>> l, ListCallback<T> c){
|
||||
super(p, (l.size()>45) ? 54 : (l.size() + 9-l.size()%9), t);
|
||||
this(p, t, true, l, c);
|
||||
}
|
||||
|
||||
public SWListInv(Player p, String t, boolean dynamicSize, List<SWListEntry<T>> l, ListCallback<T> c){
|
||||
super(p, dynamicSize ? dynamicSize(l.size()) : 54, t);
|
||||
callback = c;
|
||||
elements = l;
|
||||
page = 0;
|
||||
setCallback(-999, (ClickType click) -> player.closeInventory());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(){
|
||||
opened = true;
|
||||
inventory.clear();
|
||||
setCallback(-999, (ClickType click) -> player.closeInventory());
|
||||
if(elements.size() > 54){
|
||||
if(page != 0)
|
||||
setItem(45, SWItem.getDye(10), (byte)10, "§eSeite zurück", (ClickType click) -> {
|
||||
@ -75,17 +83,23 @@ public class SWListInv<T> extends SWInventory {
|
||||
setCallback(ipage, (ClickType click) -> callback.clicked(click, elements.get(pos).getObject()));
|
||||
i++;
|
||||
}
|
||||
|
||||
for(Map.Entry<Integer, SWItem> customItem : customItems.entrySet())
|
||||
setItem(customItem.getKey(), customItem.getValue());
|
||||
super.open();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItem(int pos, SWItem item){
|
||||
super.setItem(pos, item);
|
||||
if(!opened)
|
||||
customItems.put(pos, item);
|
||||
}
|
||||
|
||||
public void setCallback(ListCallback<T> c){
|
||||
callback = c;
|
||||
}
|
||||
|
||||
public interface ListCallback<T>{
|
||||
void clicked(ClickType click, T element);
|
||||
}
|
||||
|
||||
public static List<SWListEntry<UUID>> createPlayerList(UUID without){
|
||||
List<SWListEntry<UUID>> onlinePlayers = new ArrayList<>();
|
||||
for(Player player : Bukkit.getOnlinePlayers()){
|
||||
@ -118,6 +132,14 @@ public class SWListInv<T> extends SWInventory {
|
||||
return schemList;
|
||||
}
|
||||
|
||||
private static int dynamicSize(int size){
|
||||
return (size>45) ? 54 : (size + 9-size%9);
|
||||
}
|
||||
|
||||
public interface ListCallback<T>{
|
||||
void clicked(ClickType click, T element);
|
||||
}
|
||||
|
||||
public static class SWListEntry<T>{
|
||||
final SWItem item;
|
||||
final T object;
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Debug Message?