mirror of
https://github.com/songoda/SongodaCore.git
synced 2024-11-30 14:03:23 +01:00
add custom anvil gui text prompt
This commit is contained in:
parent
07348bf5b8
commit
252c17bf60
@ -97,6 +97,7 @@
|
|||||||
<version>1.14.4</version>
|
<version>1.14.4</version>
|
||||||
</dependency-->
|
</dependency-->
|
||||||
<!-- Need to include all NMS modules here -->
|
<!-- Need to include all NMS modules here -->
|
||||||
|
<!-- Note when adding a new module: include the class in NmsManager -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>SongodaCore-NMS-API</artifactId>
|
<artifactId>SongodaCore-NMS-API</artifactId>
|
||||||
|
87
Core/src/main/java/com/songoda/core/gui/AnvilGui.java
Normal file
87
Core/src/main/java/com/songoda/core/gui/AnvilGui.java
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package com.songoda.core.gui;
|
||||||
|
|
||||||
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
|
import com.songoda.core.nms.CoreNMS;
|
||||||
|
import com.songoda.core.nms.CustomAnvil;
|
||||||
|
import com.songoda.core.nms.NmsManager;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Anvil GUI for text prompts
|
||||||
|
*
|
||||||
|
* @since 2019-09-15
|
||||||
|
* @author jascotty2
|
||||||
|
*/
|
||||||
|
public class AnvilGui extends Gui {
|
||||||
|
|
||||||
|
final Player player;
|
||||||
|
CustomAnvil anvil;
|
||||||
|
|
||||||
|
public AnvilGui(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnvilGui(Player player, Gui parent) {
|
||||||
|
super(parent);
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void open() {
|
||||||
|
anvil.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnvilGui setInput(ItemStack item) {
|
||||||
|
return (AnvilGui) this.setItem(0, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getInput() {
|
||||||
|
return this.getItem(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnvilGui setOutput(ItemStack item) {
|
||||||
|
return (AnvilGui) this.setItem(2, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getOutput() {
|
||||||
|
return this.getItem(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInputText() {
|
||||||
|
return anvil != null ? anvil.getRenameText() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
protected Inventory generateInventory(@NotNull GuiManager manager) {
|
||||||
|
this.guiManager = manager;
|
||||||
|
|
||||||
|
createInventory();
|
||||||
|
ItemStack item;
|
||||||
|
if ((item = cellItems.get(0)) != null) {
|
||||||
|
inventory.setItem(0, item);
|
||||||
|
} else if ((item = cellItems.get(1)) != null) {
|
||||||
|
inventory.setItem(1, item);
|
||||||
|
} else if (!acceptsItems) {
|
||||||
|
inventory.setItem(0, GuiUtils.createButtonItem(CompatibleMaterial.PAPER, " ", " "));
|
||||||
|
}
|
||||||
|
if ((item = cellItems.get(2)) != null) {
|
||||||
|
inventory.setItem(2, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createInventory() {
|
||||||
|
CoreNMS nms = NmsManager.getNMS();
|
||||||
|
if (nms != null) {
|
||||||
|
anvil = nms.createAnvil(player, new GuiHolder(guiManager, this));
|
||||||
|
anvil.setCustomTitle(title);
|
||||||
|
anvil.setLevelCost(0);
|
||||||
|
inventory = anvil.getInventory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -78,20 +78,34 @@ public class GuiManager {
|
|||||||
} else if (!initialized) {
|
} else if (!initialized) {
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
if (gui instanceof AnvilGui) {
|
||||||
|
// bukkit throws a fit now if you try to set anvil stuff asyncronously
|
||||||
Gui openInv = openInventories.get(player);
|
Gui openInv = openInventories.get(player);
|
||||||
if (openInv != null) {
|
if (openInv != null) {
|
||||||
openInv.open = false;
|
openInv.open = false;
|
||||||
}
|
}
|
||||||
Inventory inv = gui.getOrCreateInventory(this);
|
gui.getOrCreateInventory(this);
|
||||||
Bukkit.getScheduler().runTask(plugin, () -> {
|
((AnvilGui) gui).open();
|
||||||
player.openInventory(inv);
|
gui.onOpen(this, player);
|
||||||
gui.onOpen(this, player);
|
synchronized (lock) {
|
||||||
synchronized(lock) {
|
openInventories.put(player, gui);
|
||||||
openInventories.put(player, gui);
|
}
|
||||||
|
} else {
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
||||||
|
Gui openInv = openInventories.get(player);
|
||||||
|
if (openInv != null) {
|
||||||
|
openInv.open = false;
|
||||||
}
|
}
|
||||||
|
Inventory inv = gui.getOrCreateInventory(this);
|
||||||
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
|
player.openInventory(inv);
|
||||||
|
gui.onOpen(this, player);
|
||||||
|
synchronized(lock) {
|
||||||
|
openInventories.put(player, gui);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showPopup(Player player, String message) {
|
public void showPopup(Player player, String message) {
|
||||||
@ -195,7 +209,11 @@ public class GuiManager {
|
|||||||
if (openInv.getHolder() != null && openInv.getHolder() instanceof GuiHolder
|
if (openInv.getHolder() != null && openInv.getHolder() instanceof GuiHolder
|
||||||
&& ((GuiHolder) openInv.getHolder()).manager.uuid.equals(manager.uuid)) {
|
&& ((GuiHolder) openInv.getHolder()).manager.uuid.equals(manager.uuid)) {
|
||||||
Gui gui = ((GuiHolder) openInv.getHolder()).getGUI();
|
Gui gui = ((GuiHolder) openInv.getHolder()).getGUI();
|
||||||
if(!gui.open) {
|
if (gui instanceof AnvilGui) {
|
||||||
|
gui.inventory.clear();
|
||||||
|
gui.inventory = null;
|
||||||
|
}
|
||||||
|
if (!gui.open) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Player player = (Player) event.getPlayer();
|
final Player player = (Player) event.getPlayer();
|
||||||
|
@ -31,9 +31,8 @@ class PopupMessage {
|
|||||||
private final NamespacedKey key;
|
private final NamespacedKey key;
|
||||||
private final TextComponent title;
|
private final TextComponent title;
|
||||||
CompatibleMaterial icon;
|
CompatibleMaterial icon;
|
||||||
int iconAmount = 1; // experimental, untested
|
|
||||||
TriggerType trigger = TriggerType.IMPOSSIBLE;
|
TriggerType trigger = TriggerType.IMPOSSIBLE;
|
||||||
FrameType frame = FrameType.GOAL;
|
FrameType frame = FrameType.GOAL; // TASK is the default
|
||||||
BackgroundType background = BackgroundType.ADVENTURE;
|
BackgroundType background = BackgroundType.ADVENTURE;
|
||||||
|
|
||||||
PopupMessage(Plugin source, CompatibleMaterial icon, String title) {
|
PopupMessage(Plugin source, CompatibleMaterial icon, String title) {
|
||||||
@ -58,9 +57,6 @@ class PopupMessage {
|
|||||||
if (this.icon.usesData()) {
|
if (this.icon.usesData()) {
|
||||||
displayIcon.addProperty("data", this.icon.getData());
|
displayIcon.addProperty("data", this.icon.getData());
|
||||||
}
|
}
|
||||||
if (this.iconAmount > 1) {
|
|
||||||
displayIcon.addProperty("amount", this.iconAmount); // not entirely sure if this works
|
|
||||||
}
|
|
||||||
advDisplay.add("icon", displayIcon);
|
advDisplay.add("icon", displayIcon);
|
||||||
}
|
}
|
||||||
advDisplay.add("title", gson.fromJson(ComponentSerializer.toString(this.title), JsonElement.class));
|
advDisplay.add("title", gson.fromJson(ComponentSerializer.toString(this.title), JsonElement.class));
|
||||||
|
@ -11,13 +11,38 @@ public class NmsManager {
|
|||||||
private final static CoreNMS nms = _getNMS();
|
private final static CoreNMS nms = _getNMS();
|
||||||
|
|
||||||
private static CoreNMS _getNMS() {
|
private static CoreNMS _getNMS() {
|
||||||
CoreNMS result = null;
|
// try {
|
||||||
try {
|
// return (CoreNMS) Class.forName("com.songoda.core.nms." + serverPackageVersion + ".NMS").newInstance();
|
||||||
result = (CoreNMS) Class.forName("com.songoda.core.nms." + serverPackageVersion + ".NMS").newInstance();
|
// } catch (Exception ex) {
|
||||||
} catch (Exception ex) {
|
// Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version", ex);
|
||||||
Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version", ex);
|
// }
|
||||||
|
// this block was only added to keep minimizeJar happy
|
||||||
|
switch (serverPackageVersion) {
|
||||||
|
case "v1_8_R1":
|
||||||
|
return new com.songoda.core.nms.v1_8_R1.NMS();
|
||||||
|
case "v1_8_R2":
|
||||||
|
return new com.songoda.core.nms.v1_8_R2.NMS();
|
||||||
|
case "v1_8_R3":
|
||||||
|
return new com.songoda.core.nms.v1_8_R3.NMS();
|
||||||
|
case "v1_9_R1":
|
||||||
|
return new com.songoda.core.nms.v1_9_R1.NMS();
|
||||||
|
case "v1_9_R2":
|
||||||
|
return new com.songoda.core.nms.v1_9_R2.NMS();
|
||||||
|
case "v1_10_R1":
|
||||||
|
return new com.songoda.core.nms.v1_10_R1.NMS();
|
||||||
|
case "v1_11_R1":
|
||||||
|
return new com.songoda.core.nms.v1_11_R1.NMS();
|
||||||
|
case "v1_12_R1":
|
||||||
|
return new com.songoda.core.nms.v1_12_R1.NMS();
|
||||||
|
case "v1_13_R1":
|
||||||
|
return new com.songoda.core.nms.v1_13_R1.NMS();
|
||||||
|
case "v1_13_R2":
|
||||||
|
return new com.songoda.core.nms.v1_13_R2.NMS();
|
||||||
|
case "v1_14_R1":
|
||||||
|
return new com.songoda.core.nms.v1_14_R1.NMS();
|
||||||
}
|
}
|
||||||
return result;
|
Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version: version {0} not found", serverPackageVersion);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CoreNMS getNMS() {
|
public static CoreNMS getNMS() {
|
||||||
|
Loading…
Reference in New Issue
Block a user