- Added armoredelytra.craft.<tier> permissions.
- Removed cursesAllowed option. It is now part of the allowedEnchantments. (Fixed mending not allowed when curses are not allowed). - Fixed glitch where "ghosts" of items remained in the anvil after taking the result out using shift + click.
This commit is contained in:
		
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							@@ -3,7 +3,7 @@
 | 
			
		||||
	<modelVersion>4.0.0</modelVersion>
 | 
			
		||||
	<groupId>nl.pim16aap2</groupId>
 | 
			
		||||
	<artifactId>ArmoredElytra</artifactId>
 | 
			
		||||
	<version>2.3-SNAPSHOT</version>
 | 
			
		||||
	<version>2.4-SNAPSHOT</version>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	<repositories>
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ public class ArmoredElytra extends JavaPlugin implements Listener
 | 
			
		||||
				{
 | 
			
		||||
					ArmoredElytra plugin = getPlugin();
 | 
			
		||||
					Update update        = new Update(278437, plugin);
 | 
			
		||||
					String latestVersion =  update.getLatestVersion();
 | 
			
		||||
					String latestVersion = update.getLatestVersion();
 | 
			
		||||
					
 | 
			
		||||
					if (latestVersion == null)
 | 
			
		||||
						plugin.myLogger(Level.WARNING, "Encountered problem contacting update servers! Please check manually! The error above does not affect the plugin!");
 | 
			
		||||
@@ -132,8 +132,6 @@ public class ArmoredElytra extends JavaPlugin implements Listener
 | 
			
		||||
			myLogger(Level.INFO, ("Allowed enchantments:"));
 | 
			
		||||
			for (String s : config.getStringList("allowedEnchantments"))
 | 
			
		||||
				myLogger(Level.INFO, " - " + s);
 | 
			
		||||
			// Log whether or not curses are allowed.
 | 
			
		||||
			myLogger(Level.INFO, "Curses on armored elytras are " + (config.getBool("allowCurses") ? "" : "not " + "allowed!"));
 | 
			
		||||
		} 
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
@@ -297,6 +295,25 @@ public class ArmoredElytra extends JavaPlugin implements Listener
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean playerHasCraftPerm(Player player, ArmorTier tier)
 | 
			
		||||
	{
 | 
			
		||||
		switch (tier)
 | 
			
		||||
		{
 | 
			
		||||
		case LEATHER:
 | 
			
		||||
			return player.hasPermission("armoredelytra.craft.leather");
 | 
			
		||||
		case GOLD:
 | 
			
		||||
			return player.hasPermission("armoredelytra.craft.gold");
 | 
			
		||||
		case CHAIN:
 | 
			
		||||
			return player.hasPermission("armoredelytra.craft.chain");
 | 
			
		||||
		case IRON:
 | 
			
		||||
			return player.hasPermission("armoredelytra.craft.iron");
 | 
			
		||||
		case DIAMOND:
 | 
			
		||||
			return player.hasPermission("armoredelytra.craft.diamond");
 | 
			
		||||
		default:
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	public void setUpToDate(boolean upToDate)
 | 
			
		||||
 
 | 
			
		||||
@@ -120,7 +120,7 @@ public class CommandHandler implements CommandExecutor
 | 
			
		||||
						plugin.giveArmoredElytraToPlayer(receiver, newElytra);
 | 
			
		||||
					} 
 | 
			
		||||
					else
 | 
			
		||||
						plugin.messagePlayer(player, "You do not have the required permission node to give " + plugin.getArmoredElytrName(armorTier) + " armored elytras.");
 | 
			
		||||
						plugin.messagePlayer(player, "You do not have the required permission node to give " + plugin.getArmoredElytrName(armorTier));
 | 
			
		||||
					return true;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -36,13 +36,9 @@ public class EventHandlers implements Listener
 | 
			
		||||
	private int              LEATHER_TO_FULL;
 | 
			
		||||
	private int                 GOLD_TO_FULL;
 | 
			
		||||
	private int                 IRON_TO_FULL;
 | 
			
		||||
	private boolean            cursesAllowed; 
 | 
			
		||||
	private NBTEditor              nbtEditor;
 | 
			
		||||
	private final ArmoredElytra       plugin;
 | 
			
		||||
	private List<String> allowedEnchantments;
 | 
			
		||||
	private String[]     cursedEnchantments = {	"MENDING"			,
 | 
			
		||||
		    								      	"VANISHING_CURSE" 	,
 | 
			
		||||
                                               	"BINDING_CURSE"		};
 | 
			
		||||
	
 | 
			
		||||
	public EventHandlers(ArmoredElytra plugin, NBTEditor nbtEditor) 
 | 
			
		||||
	{
 | 
			
		||||
@@ -50,7 +46,6 @@ public class EventHandlers implements Listener
 | 
			
		||||
		this.nbtEditor = nbtEditor;
 | 
			
		||||
		
 | 
			
		||||
		// Get the values of the config options.
 | 
			
		||||
		this.cursesAllowed       = plugin.getConfigLoader().getBool("allowCurses");
 | 
			
		||||
		this.allowedEnchantments = plugin.getConfigLoader().getStringList("allowedEnchantments");
 | 
			
		||||
		this.LEATHER_TO_FULL     = plugin.getConfigLoader().getInt("leatherRepair");
 | 
			
		||||
		this.GOLD_TO_FULL        = plugin.getConfigLoader().getInt("goldRepair");
 | 
			
		||||
@@ -76,15 +71,6 @@ public class EventHandlers implements Listener
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Check if the enchantment is a curse.
 | 
			
		||||
	public boolean isCursedEnchantment(Enchantment enchant) 
 | 
			
		||||
	{
 | 
			
		||||
		for (String s : cursedEnchantments)
 | 
			
		||||
			if (Enchantment.getByName(s).equals(enchant))
 | 
			
		||||
				return true;
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Combine 2 maps of enchantments (and remove any invalid ones).
 | 
			
		||||
	public Map<Enchantment, Integer> combineEnchantments(Map<Enchantment, Integer> enchantments0, Map<Enchantment, Integer> enchantments1)
 | 
			
		||||
	{
 | 
			
		||||
@@ -98,11 +84,7 @@ public class EventHandlers implements Listener
 | 
			
		||||
			for (Map.Entry<Enchantment, Integer > entry : enchantments1.entrySet()) 
 | 
			
		||||
			{
 | 
			
		||||
				Integer enchantLevel = enchantments0.get(entry.getKey());
 | 
			
		||||
				// If the enchantment is a curse and if the result does not already have it.
 | 
			
		||||
				if (isCursedEnchantment(entry.getKey()) && !enchantments0.containsKey(entry.getKey())) 
 | 
			
		||||
					combined.put(entry.getKey(), entry.getValue());
 | 
			
		||||
				// If the enchantment is already on the list...
 | 
			
		||||
				else if (enchantLevel != null)
 | 
			
		||||
				if (enchantLevel != null)
 | 
			
		||||
				{
 | 
			
		||||
					if (entry.getValue() == enchantLevel && entry.getValue() < entry.getKey().getMaxLevel()) 
 | 
			
		||||
						enchantLevel = entry.getValue() + 1;
 | 
			
		||||
@@ -189,23 +171,21 @@ public class EventHandlers implements Listener
 | 
			
		||||
		return (short) (newDurability <= 0 ? 0 : newDurability);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Remove any disallowed enchantments / curses in the map.
 | 
			
		||||
	// Remove any disallowed enchantments in the map.
 | 
			
		||||
	public Map<Enchantment, Integer> fixEnchantments(Map<Enchantment, Integer> enchantments) 
 | 
			
		||||
	{
 | 
			
		||||
		Map<Enchantment, Integer> ret = new HashMap<Enchantment, Integer>(enchantments);
 | 
			
		||||
		for (Map.Entry<Enchantment, Integer> entry : enchantments.entrySet())
 | 
			
		||||
			// If it is not an allowed enchantment OR a curse while it's not allowed
 | 
			
		||||
			if (!isAllowedEnchantment(entry.getKey()) || (!cursesAllowed && isCursedEnchantment(entry.getKey())))
 | 
			
		||||
			if (!isAllowedEnchantment(entry.getKey()))
 | 
			
		||||
				ret.remove(entry.getKey());
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Verify there aren't any disallowed enchantments / curses in the map.
 | 
			
		||||
	// Verify there aren't any disallowed enchantments in the map.
 | 
			
		||||
	public boolean verifyEnchantments(Map<Enchantment, Integer> enchantments) 
 | 
			
		||||
	{
 | 
			
		||||
		for (Map.Entry<Enchantment, Integer> entry : enchantments.entrySet())
 | 
			
		||||
			// If it is not an allowed enchantment OR a curse while it's not allowed
 | 
			
		||||
			if (!isAllowedEnchantment(entry.getKey()) || (!cursesAllowed && isCursedEnchantment(entry.getKey())))
 | 
			
		||||
			if (!isAllowedEnchantment(entry.getKey()))
 | 
			
		||||
				return false;
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
@@ -311,7 +291,7 @@ public class EventHandlers implements Listener
 | 
			
		||||
	@EventHandler
 | 
			
		||||
	public void onAnvilInventoryOpen(PrepareAnvilEvent event)
 | 
			
		||||
	{
 | 
			
		||||
		Player p = (Player) event.getView().getPlayer();
 | 
			
		||||
		Player player = (Player) event.getView().getPlayer();
 | 
			
		||||
		
 | 
			
		||||
    		ItemStack itemA  = event.getInventory().getItem(0);
 | 
			
		||||
		ItemStack itemB  = event.getInventory().getItem(1);
 | 
			
		||||
@@ -369,24 +349,28 @@ public class EventHandlers implements Listener
 | 
			
		||||
        			}
 | 
			
		||||
        		case BLOCK:
 | 
			
		||||
        			event.setResult(null);
 | 
			
		||||
				p.updateInventory();
 | 
			
		||||
				player.updateInventory();
 | 
			
		||||
        		case NONE:
 | 
			
		||||
        			return;
 | 
			
		||||
        		}
 | 
			
		||||
        		
 | 
			
		||||
	        	result = new ItemStack(Material.ELYTRA, 1);
 | 
			
		||||
	        	if (enchantments != null)
 | 
			
		||||
	        		result.addUnsafeEnchantments(enchantments);
 | 
			
		||||
	        	result.setDurability(durability);
 | 
			
		||||
	        	result = nbtEditor.addArmorNBTTags(result, newTier, plugin.getConfigLoader().getBool("unbreakable"));
 | 
			
		||||
	        	event.setResult(result);
 | 
			
		||||
	        	if (plugin.playerHasCraftPerm(player, newTier))
 | 
			
		||||
	        	{
 | 
			
		||||
		        	result = new ItemStack(Material.ELYTRA, 1);
 | 
			
		||||
		        	if (enchantments != null)
 | 
			
		||||
		        		result.addUnsafeEnchantments(enchantments);
 | 
			
		||||
		        	result.setDurability(durability);
 | 
			
		||||
		        	
 | 
			
		||||
		        	result = nbtEditor.addArmorNBTTags(result, newTier, plugin.getConfigLoader().getBool("unbreakable"));
 | 
			
		||||
		        	event.setResult(result);
 | 
			
		||||
	        	}
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Check if either itemA or itemB is unoccupied.
 | 
			
		||||
        if ((itemA == null || itemB == null) && nbtEditor.getArmorTier(event.getInventory().getItem(2)) != ArmorTier.NONE) 
 | 
			
		||||
        		// If Item2 is occupied despite itemA or itemB not being occupied. (only for armored elytra)/
 | 
			
		||||
        		event.setResult(null);
 | 
			
		||||
		p.updateInventory();
 | 
			
		||||
		player.updateInventory();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Let the player take items out of the anvil.
 | 
			
		||||
@@ -396,7 +380,7 @@ public class EventHandlers implements Listener
 | 
			
		||||
		if (e.getWhoClicked() instanceof Player) 
 | 
			
		||||
		{
 | 
			
		||||
			// Check if the event was a player who interacted with an anvil.
 | 
			
		||||
			Player p = (Player) e.getWhoClicked();
 | 
			
		||||
			Player player = (Player) e.getWhoClicked();
 | 
			
		||||
			if (e.getView().getType() == InventoryType.ANVIL) 
 | 
			
		||||
			{
 | 
			
		||||
				AnvilInventory anvilInventory;
 | 
			
		||||
@@ -410,7 +394,7 @@ public class EventHandlers implements Listener
 | 
			
		||||
				catch (ClassCastException exception)
 | 
			
		||||
				{
 | 
			
		||||
					// Print warning to console and exit onInventoryClick event (no support for custom inventories as they are usually used for GUI's).
 | 
			
		||||
					plugin.debugMsg(Level.WARNING, "Could not cast inventory to anvilInventory for player " + p.getName() + "! Armored Elytras cannot be crafted!");
 | 
			
		||||
					plugin.debugMsg(Level.WARNING, "Could not cast inventory to anvilInventory for player " + player.getName() + "! Armored Elytras cannot be crafted!");
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
@@ -420,7 +404,7 @@ public class EventHandlers implements Listener
 | 
			
		||||
				{
 | 
			
		||||
					ArmorTier armortier = nbtEditor.getArmorTier(anvilInventory.getItem(2));
 | 
			
		||||
					// If there's an armored elytra in the final slot...
 | 
			
		||||
					if (armortier != ArmorTier.NONE) 
 | 
			
		||||
					if (armortier != ArmorTier.NONE && plugin.playerHasCraftPerm(player, armortier)) 
 | 
			
		||||
					{
 | 
			
		||||
						// Create a new armored elytra and give that one to the player instead of the result.
 | 
			
		||||
						// This is done because after putting item0 in AFTER item1, the first letter of the color code shows up, this gets rid of that problem.
 | 
			
		||||
@@ -429,14 +413,15 @@ public class EventHandlers implements Listener
 | 
			
		||||
						if (e.isShiftClick()) 
 | 
			
		||||
						{
 | 
			
		||||
							// If the player's inventory is full, don't do anything.
 | 
			
		||||
							if (p.getInventory().firstEmpty() == -1)
 | 
			
		||||
							if (player.getInventory().firstEmpty() == -1)
 | 
			
		||||
								return;
 | 
			
		||||
							p.getInventory().addItem(result);
 | 
			
		||||
							player.getInventory().addItem(result);
 | 
			
		||||
						}
 | 
			
		||||
						else 
 | 
			
		||||
							p.setItemOnCursor(result);
 | 
			
		||||
							player.setItemOnCursor(result);
 | 
			
		||||
						// Clean the anvil's inventory after transferring the items.
 | 
			
		||||
						cleanAnvil(anvilInventory);
 | 
			
		||||
						player.updateInventory();
 | 
			
		||||
						return;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,6 @@ public class ConfigLoader
 | 
			
		||||
	private String		ironName;
 | 
			
		||||
	private String		diamondName;
 | 
			
		||||
	private String      	elytraLore;
 | 
			
		||||
	private boolean     	cursesAllowed;
 | 
			
		||||
	private List<String>	allowedEnchantments;
 | 
			
		||||
	private String      	usageDeniedMessage;
 | 
			
		||||
	private String      	elytraReceivedMessage;
 | 
			
		||||
@@ -48,11 +47,9 @@ public class ConfigLoader
 | 
			
		||||
		 "Repair cost for every tier of armored elytra in number of items to repair 100%."};
 | 
			
		||||
    private String[] tierNameComment		  =
 | 
			
		||||
		{"Name for every armored elytra tier."};
 | 
			
		||||
    private String[] cursesComment         = 
 | 
			
		||||
		{"Will curses (vanishing, binding) be transferred when creating armored elytras?"};
 | 
			
		||||
    private String[] enchantmentsComment   = 
 | 
			
		||||
		{"List of enchantments that are allowed to be put on an armored elytra.",
 | 
			
		||||
		 "If you do not want to allow any enchantments, remove them all and add \"NONE\"",
 | 
			
		||||
		 "If you do not want to allow any enchantments at all, remove them all and add \"NONE\"",
 | 
			
		||||
		 "You can find supported enchantments here:",
 | 
			
		||||
		 "https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html",
 | 
			
		||||
		 "Note that only 1 protection enchantment (PROTECTION_FIRE, PROTECTION_ENVIRONMENTAL etc) can be active on an elytra."};
 | 
			
		||||
@@ -128,8 +125,6 @@ public class ConfigLoader
 | 
			
		||||
		elytraReceivedMessage = config.getString ("elytraReceivedMessage" );
 | 
			
		||||
		configOptionsList.add(new ConfigOption   ("elytraReceivedMessage", elytraReceivedMessage, elytraReceivedComment));
 | 
			
		||||
		
 | 
			
		||||
		cursesAllowed         = config.getBoolean   ("allowCurses", true  );
 | 
			
		||||
		configOptionsList.add(new ConfigOption      ("allowCurses", cursesAllowed, cursesComment));
 | 
			
		||||
		allowedEnchantments   = config.getStringList("allowedEnchantments");
 | 
			
		||||
		configOptionsList.add(new ConfigOption      ("allowedEnchantments", allowedEnchantments, enchantmentsComment   ));
 | 
			
		||||
		
 | 
			
		||||
 
 | 
			
		||||
@@ -16,10 +16,6 @@ chain:
 | 
			
		||||
iron: 
 | 
			
		||||
diamond: 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Will curses (vanishing, binding) be transferred when creating armored elytras?
 | 
			
		||||
allowCurses: true
 | 
			
		||||
 | 
			
		||||
# List of enchantments that are allowed to be put on an armored elytra.
 | 
			
		||||
# If you do not want to allow any enchantments, remove them all and add "NONE"
 | 
			
		||||
# You can find supported enchantments here:
 | 
			
		||||
@@ -32,17 +28,19 @@ allowedEnchantments:
 | 
			
		||||
  - PROTECTION_PROJECTILE
 | 
			
		||||
  - PROTECTION_ENVIRONMENTAL
 | 
			
		||||
  - THORNS
 | 
			
		||||
  - BINDING_CURSE
 | 
			
		||||
  - VANISHING_CURSE
 | 
			
		||||
  
 | 
			
		||||
# Message players receive when they lack the required permissions to wear a certain armor tier. "NONE" = no message. 
 | 
			
		||||
# %ARMOR_TIER% is replaced by the name of the armor tier.
 | 
			
		||||
usageDeniedMessage: 'You do not have the required permissions to wear %ARMOR_TIER% armored elytras!'
 | 
			
		||||
usageDeniedMessage: 'You do not have the required permissions to wear %ARMOR_TIER%!'
 | 
			
		||||
 | 
			
		||||
# Message players receive when they are given an armored elytra using commands. "NONE" = no message. 
 | 
			
		||||
# %ARMOR_TIER% is replaced by the name of the armor tier.
 | 
			
		||||
elytraReceivedMessage: '&2A(n) %ARMOR_TIER% armored elytra has been bestowed upon you!'
 | 
			
		||||
elytraReceivedMessage: '&2A(n) %ARMOR_TIER% has been bestowed upon you!'
 | 
			
		||||
 | 
			
		||||
# The name of armored elytras. %ARMOR_TIER% is replaced by the name of the armor tier.
 | 
			
		||||
elytraName: '%ARMOR_TIER% Armored Elytra'
 | 
			
		||||
elytraName: '%ARMOR_TIER%'
 | 
			
		||||
 | 
			
		||||
# The lore of armored elytras. "NONE" = no lore. %ARMOR_TIER% is replaced by the name of the armor tier.
 | 
			
		||||
elytraLore: 'Elytra with %ARMOR_TIER% level protection'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
name: ArmoredElytra
 | 
			
		||||
main: nl.pim16aap2.armoredElytra.ArmoredElytra
 | 
			
		||||
version: 2.3
 | 
			
		||||
version: 2.4
 | 
			
		||||
author: Pim
 | 
			
		||||
commands:
 | 
			
		||||
  ArmoredElytra:
 | 
			
		||||
@@ -17,6 +17,16 @@ permissions:
 | 
			
		||||
    description: Allow the player to wear iron tier armored elytras.
 | 
			
		||||
  armoredelytra.wear.diamond:
 | 
			
		||||
    description: Allow the player to wear diamond tier armored elytras.
 | 
			
		||||
  armoredelytra.craft.leather:
 | 
			
		||||
    description: Allow the player to craft leather tier armored elytras.
 | 
			
		||||
  armoredelytra.craft.gold:
 | 
			
		||||
    description: Allow the player to craft gold tier armored elytras.
 | 
			
		||||
  armoredelytra.craft.chain:
 | 
			
		||||
    description: Allow the player to craft chain tier armored elytras.
 | 
			
		||||
  armoredelytra.craft.iron:
 | 
			
		||||
    description: Allow the player to craft iron tier armored elytras.
 | 
			
		||||
  armoredelytra.craft.diamond:
 | 
			
		||||
    description: Allow the player to craft diamond tier armored elytras.
 | 
			
		||||
  armoredelytra.give.leather:
 | 
			
		||||
    description: Allow the player to spawn in leather tier armored elytras.
 | 
			
		||||
  armoredelytra.give.gold:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user