Added support for AnvilGUI

This commit is contained in:
Auxilor
2020-11-19 09:04:37 +00:00
parent a4e0bd6e3b
commit c88e457667
12 changed files with 155 additions and 7 deletions

View File

@@ -0,0 +1,7 @@
package com.willfp.ecoenchants.nms.API;
import org.bukkit.entity.Player;
public interface OpenInventoryWrapper {
Object getOpenInventory(Player player);
}

View File

@@ -0,0 +1,12 @@
package com.willfp.ecoenchants.v1_15_R1;
import com.willfp.ecoenchants.nms.API.OpenInventoryWrapper;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class OpenInventory implements OpenInventoryWrapper {
@Override
public Object getOpenInventory(Player player) {
return ((CraftPlayer) player).getHandle().activeContainer;
}
}

View File

@@ -0,0 +1,12 @@
package com.willfp.ecoenchants.v1_16_R1;
import com.willfp.ecoenchants.nms.API.OpenInventoryWrapper;
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class OpenInventory implements OpenInventoryWrapper {
@Override
public Object getOpenInventory(Player player) {
return ((CraftPlayer) player).getHandle().activeContainer;
}
}

View File

@@ -0,0 +1,12 @@
package com.willfp.ecoenchants.v1_16_R2;
import com.willfp.ecoenchants.nms.API.OpenInventoryWrapper;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class OpenInventory implements OpenInventoryWrapper {
@Override
public Object getOpenInventory(Player player) {
return ((CraftPlayer) player).getHandle().activeContainer;
}
}

View File

@@ -0,0 +1,12 @@
package com.willfp.ecoenchants.v1_16_R3;
import com.willfp.ecoenchants.nms.API.OpenInventoryWrapper;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class OpenInventory implements OpenInventoryWrapper {
@Override
public Object getOpenInventory(Player player) {
return ((CraftPlayer) player).getHandle().activeContainer;
}
}

View File

@@ -28,6 +28,7 @@ dependencies {
compileOnly 'com.destroystokyo.paper:paper-api:1.16.3-R0.1-SNAPSHOT'
compileOnly 'com.gmail.nossr50.mcMMO:mcMMO:2.1.157'
compileOnly 'me.clip:placeholderapi:2.10.9'
compileOnly 'com.github.WesJD.AnvilGUI:anvilgui:master-SNAPSHOT'
}
shadowJar {

View File

@@ -2,6 +2,7 @@ package com.willfp.ecoenchants.enchantments.support.merging.anvil;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.integrations.anvilgui.AnvilGUIManager;
import com.willfp.ecoenchants.nms.RepairCost;
import com.willfp.ecoenchants.util.NumberUtils;
import com.willfp.ecoenchants.util.tuplets.Pair;
@@ -34,9 +35,7 @@ public class AnvilListeners implements Listener {
if(event.getViewers().isEmpty()) return; // Prevent ArrayIndexOutOfBoundsException when using AnvilGUI
Player player = (Player) event.getViewers().get(0);
if(player.getOpenInventory().getTitle().toLowerCase().contains("quest")) return; // Fix for QuestsGUI
if(event.getView().getTitle().toLowerCase().contains("quest")) return; // Maybe this will fix it?
if(event.getView().getTitle().toLowerCase().contains("contents")) return; // Fix for ticketGui
if(AnvilGUIManager.hasAnvilGUIOpen(player)) return;
Pair<ItemStack, Integer> newOut = AnvilMerge.doMerge(left, right, out, name, player);

View File

@@ -0,0 +1,7 @@
package com.willfp.ecoenchants.integrations.anvilgui;
import com.willfp.ecoenchants.integrations.Integration;
public interface AnvilGUIIntegration extends Integration {
boolean isInstance(Object object);
}

View File

@@ -0,0 +1,21 @@
package com.willfp.ecoenchants.integrations.anvilgui;
import com.willfp.ecoenchants.nms.OpenInventory;
import org.bukkit.entity.Player;
import java.util.HashSet;
import java.util.Set;
public class AnvilGUIManager {
private static final Set<AnvilGUIIntegration> integrations = new HashSet<>();
public static void registerIntegration(AnvilGUIIntegration integration) {
integrations.add(integration);
}
public static boolean hasAnvilGUIOpen(Player player) {
if(integrations.isEmpty())
return false;
return integrations.stream().anyMatch(integration -> integration.isInstance(OpenInventory.getOpenInventory(player)));
}
}

View File

@@ -0,0 +1,21 @@
package com.willfp.ecoenchants.integrations.anvilgui.plugins;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.integrations.anvilgui.AnvilGUIIntegration;
public class AnvilGUIImpl implements AnvilGUIIntegration {
@Override
public boolean isInstance(Object object) {
try {
return object.getClass().equals(Class.forName("net.wesjd.anvilgui.version.Wrapper" + EcoEnchantsPlugin.NMS_VERSION.substring(1) + "$AnvilContainer"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}
}
@Override
public String getPluginName() {
return "AnvilGUI";
}
}

View File

@@ -40,6 +40,8 @@ import com.willfp.ecoenchants.integrations.antigrief.plugins.AntigriefKingdoms;
import com.willfp.ecoenchants.integrations.antigrief.plugins.AntigriefLands;
import com.willfp.ecoenchants.integrations.antigrief.plugins.AntigriefTowny;
import com.willfp.ecoenchants.integrations.antigrief.plugins.AntigriefWorldGuard;
import com.willfp.ecoenchants.integrations.anvilgui.AnvilGUIManager;
import com.willfp.ecoenchants.integrations.anvilgui.plugins.AnvilGUIImpl;
import com.willfp.ecoenchants.integrations.essentials.EssentialsManager;
import com.willfp.ecoenchants.integrations.essentials.plugins.IntegrationEssentials;
import com.willfp.ecoenchants.integrations.mcmmo.McmmoManager;
@@ -48,10 +50,8 @@ import com.willfp.ecoenchants.integrations.placeholder.PlaceholderManager;
import com.willfp.ecoenchants.integrations.placeholder.plugins.PlaceholderIntegrationPAPI;
import com.willfp.ecoenchants.listeners.ArrowListeners;
import com.willfp.ecoenchants.listeners.PlayerJoinListener;
import com.willfp.ecoenchants.nms.BlockBreak;
import com.willfp.ecoenchants.nms.Cooldown;
import com.willfp.ecoenchants.nms.RepairCost;
import com.willfp.ecoenchants.nms.TridentStack;
import com.willfp.ecoenchants.nms.*;
import com.willfp.ecoenchants.util.ClassUtils;
import com.willfp.ecoenchants.util.Logger;
import com.willfp.ecoenchants.util.StringUtils;
import com.willfp.ecoenchants.util.UpdateChecker;
@@ -142,6 +142,14 @@ public class Loader {
Logger.error("&cAborting...");
Bukkit.getPluginManager().disablePlugin(EcoEnchantsPlugin.getInstance());
}
if(OpenInventory.init()) {
Logger.info("Open Inventory: &aSUCCESS");
} else {
Logger.info("Open Inventory: &cFAILURE");
Logger.error("&cAborting...");
Bukkit.getPluginManager().disablePlugin(EcoEnchantsPlugin.getInstance());
}
Logger.info("");
@@ -437,6 +445,13 @@ public class Loader {
Logger.info("mcMMO: &9DISABLED");
}
if(ClassUtils.exists("net.wesjd.anvilgui.AnvilGUI")) {
AnvilGUIManager.registerIntegration(new AnvilGUIImpl());
Logger.info("AnvilGUI: &aENABLED");
} else {
Logger.info("AnvilGUI: &9DISABLED");
}
/*
Check for paper

View File

@@ -0,0 +1,29 @@
package com.willfp.ecoenchants.nms;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.nms.API.BlockBreakWrapper;
import com.willfp.ecoenchants.nms.API.OpenInventoryWrapper;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
public class OpenInventory {
private static OpenInventoryWrapper openInventoryWrapper;
public static boolean init() {
try {
final Class<?> class2 = Class.forName("com.willfp.ecoenchants." + EcoEnchantsPlugin.NMS_VERSION + ".OpenInventory");
if (OpenInventoryWrapper.class.isAssignableFrom(class2)) {
openInventoryWrapper = (OpenInventoryWrapper) class2.getConstructor().newInstance();
}
} catch (Exception e) {
e.printStackTrace();
openInventoryWrapper = null;
}
return openInventoryWrapper != null;
}
public static Object getOpenInventory(Player player) {
assert openInventoryWrapper != null;
return openInventoryWrapper.getOpenInventory(player);
}
}