- 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> | 	<modelVersion>4.0.0</modelVersion> | ||||||
| 	<groupId>nl.pim16aap2</groupId> | 	<groupId>nl.pim16aap2</groupId> | ||||||
| 	<artifactId>ArmoredElytra</artifactId> | 	<artifactId>ArmoredElytra</artifactId> | ||||||
| 	<version>2.3-SNAPSHOT</version> | 	<version>2.4-SNAPSHOT</version> | ||||||
|  |  | ||||||
|  |  | ||||||
| 	<repositories> | 	<repositories> | ||||||
|   | |||||||
| @@ -52,7 +52,7 @@ public class ArmoredElytra extends JavaPlugin implements Listener | |||||||
| 				{ | 				{ | ||||||
| 					ArmoredElytra plugin = getPlugin(); | 					ArmoredElytra plugin = getPlugin(); | ||||||
| 					Update update        = new Update(278437, plugin); | 					Update update        = new Update(278437, plugin); | ||||||
| 					String latestVersion =  update.getLatestVersion(); | 					String latestVersion = update.getLatestVersion(); | ||||||
| 					 | 					 | ||||||
| 					if (latestVersion == null) | 					if (latestVersion == null) | ||||||
| 						plugin.myLogger(Level.WARNING, "Encountered problem contacting update servers! Please check manually! The error above does not affect the plugin!"); | 						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:")); | 			myLogger(Level.INFO, ("Allowed enchantments:")); | ||||||
| 			for (String s : config.getStringList("allowedEnchantments")) | 			for (String s : config.getStringList("allowedEnchantments")) | ||||||
| 				myLogger(Level.INFO, " - " + s); | 				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 | 		else | ||||||
| 		{ | 		{ | ||||||
| @@ -297,6 +295,25 @@ public class ArmoredElytra extends JavaPlugin implements Listener | |||||||
| 		} | 		} | ||||||
| 		return ret; | 		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) | 	public void setUpToDate(boolean upToDate) | ||||||
|   | |||||||
| @@ -120,7 +120,7 @@ public class CommandHandler implements CommandExecutor | |||||||
| 						plugin.giveArmoredElytraToPlayer(receiver, newElytra); | 						plugin.giveArmoredElytraToPlayer(receiver, newElytra); | ||||||
| 					}  | 					}  | ||||||
| 					else | 					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; | 					return true; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -36,13 +36,9 @@ public class EventHandlers implements Listener | |||||||
| 	private int              LEATHER_TO_FULL; | 	private int              LEATHER_TO_FULL; | ||||||
| 	private int                 GOLD_TO_FULL; | 	private int                 GOLD_TO_FULL; | ||||||
| 	private int                 IRON_TO_FULL; | 	private int                 IRON_TO_FULL; | ||||||
| 	private boolean            cursesAllowed;  |  | ||||||
| 	private NBTEditor              nbtEditor; | 	private NBTEditor              nbtEditor; | ||||||
| 	private final ArmoredElytra       plugin; | 	private final ArmoredElytra       plugin; | ||||||
| 	private List<String> allowedEnchantments; | 	private List<String> allowedEnchantments; | ||||||
| 	private String[]     cursedEnchantments = {	"MENDING"			, |  | ||||||
| 		    								      	"VANISHING_CURSE" 	, |  | ||||||
|                                                	"BINDING_CURSE"		}; |  | ||||||
| 	 | 	 | ||||||
| 	public EventHandlers(ArmoredElytra plugin, NBTEditor nbtEditor)  | 	public EventHandlers(ArmoredElytra plugin, NBTEditor nbtEditor)  | ||||||
| 	{ | 	{ | ||||||
| @@ -50,7 +46,6 @@ public class EventHandlers implements Listener | |||||||
| 		this.nbtEditor = nbtEditor; | 		this.nbtEditor = nbtEditor; | ||||||
| 		 | 		 | ||||||
| 		// Get the values of the config options. | 		// Get the values of the config options. | ||||||
| 		this.cursesAllowed       = plugin.getConfigLoader().getBool("allowCurses"); |  | ||||||
| 		this.allowedEnchantments = plugin.getConfigLoader().getStringList("allowedEnchantments"); | 		this.allowedEnchantments = plugin.getConfigLoader().getStringList("allowedEnchantments"); | ||||||
| 		this.LEATHER_TO_FULL     = plugin.getConfigLoader().getInt("leatherRepair"); | 		this.LEATHER_TO_FULL     = plugin.getConfigLoader().getInt("leatherRepair"); | ||||||
| 		this.GOLD_TO_FULL        = plugin.getConfigLoader().getInt("goldRepair"); | 		this.GOLD_TO_FULL        = plugin.getConfigLoader().getInt("goldRepair"); | ||||||
| @@ -76,15 +71,6 @@ public class EventHandlers implements Listener | |||||||
| 		return false; | 		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). | 	// Combine 2 maps of enchantments (and remove any invalid ones). | ||||||
| 	public Map<Enchantment, Integer> combineEnchantments(Map<Enchantment, Integer> enchantments0, Map<Enchantment, Integer> enchantments1) | 	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())  | 			for (Map.Entry<Enchantment, Integer > entry : enchantments1.entrySet())  | ||||||
| 			{ | 			{ | ||||||
| 				Integer enchantLevel = enchantments0.get(entry.getKey()); | 				Integer enchantLevel = enchantments0.get(entry.getKey()); | ||||||
| 				// If the enchantment is a curse and if the result does not already have it. | 				if (enchantLevel != null) | ||||||
| 				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 (entry.getValue() == enchantLevel && entry.getValue() < entry.getKey().getMaxLevel())  | 					if (entry.getValue() == enchantLevel && entry.getValue() < entry.getKey().getMaxLevel())  | ||||||
| 						enchantLevel = entry.getValue() + 1; | 						enchantLevel = entry.getValue() + 1; | ||||||
| @@ -189,23 +171,21 @@ public class EventHandlers implements Listener | |||||||
| 		return (short) (newDurability <= 0 ? 0 : newDurability); | 		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)  | 	public Map<Enchantment, Integer> fixEnchantments(Map<Enchantment, Integer> enchantments)  | ||||||
| 	{ | 	{ | ||||||
| 		Map<Enchantment, Integer> ret = new HashMap<Enchantment, Integer>(enchantments); | 		Map<Enchantment, Integer> ret = new HashMap<Enchantment, Integer>(enchantments); | ||||||
| 		for (Map.Entry<Enchantment, Integer> entry : enchantments.entrySet()) | 		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())) | ||||||
| 			if (!isAllowedEnchantment(entry.getKey()) || (!cursesAllowed && isCursedEnchantment(entry.getKey()))) |  | ||||||
| 				ret.remove(entry.getKey()); | 				ret.remove(entry.getKey()); | ||||||
| 		return ret; | 		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)  | 	public boolean verifyEnchantments(Map<Enchantment, Integer> enchantments)  | ||||||
| 	{ | 	{ | ||||||
| 		for (Map.Entry<Enchantment, Integer> entry : enchantments.entrySet()) | 		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())) | ||||||
| 			if (!isAllowedEnchantment(entry.getKey()) || (!cursesAllowed && isCursedEnchantment(entry.getKey()))) |  | ||||||
| 				return false; | 				return false; | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| @@ -311,7 +291,7 @@ public class EventHandlers implements Listener | |||||||
| 	@EventHandler | 	@EventHandler | ||||||
| 	public void onAnvilInventoryOpen(PrepareAnvilEvent event) | 	public void onAnvilInventoryOpen(PrepareAnvilEvent event) | ||||||
| 	{ | 	{ | ||||||
| 		Player p = (Player) event.getView().getPlayer(); | 		Player player = (Player) event.getView().getPlayer(); | ||||||
| 		 | 		 | ||||||
|     		ItemStack itemA  = event.getInventory().getItem(0); |     		ItemStack itemA  = event.getInventory().getItem(0); | ||||||
| 		ItemStack itemB  = event.getInventory().getItem(1); | 		ItemStack itemB  = event.getInventory().getItem(1); | ||||||
| @@ -369,24 +349,28 @@ public class EventHandlers implements Listener | |||||||
|         			} |         			} | ||||||
|         		case BLOCK: |         		case BLOCK: | ||||||
|         			event.setResult(null); |         			event.setResult(null); | ||||||
| 				p.updateInventory(); | 				player.updateInventory(); | ||||||
|         		case NONE: |         		case NONE: | ||||||
|         			return; |         			return; | ||||||
|         		} |         		} | ||||||
|         		 |         		 | ||||||
| 	        	result = new ItemStack(Material.ELYTRA, 1); | 	        	if (plugin.playerHasCraftPerm(player, newTier)) | ||||||
| 	        	if (enchantments != null) | 	        	{ | ||||||
| 	        		result.addUnsafeEnchantments(enchantments); | 		        	result = new ItemStack(Material.ELYTRA, 1); | ||||||
| 	        	result.setDurability(durability); | 		        	if (enchantments != null) | ||||||
| 	        	result = nbtEditor.addArmorNBTTags(result, newTier, plugin.getConfigLoader().getBool("unbreakable")); | 		        		result.addUnsafeEnchantments(enchantments); | ||||||
| 	        	event.setResult(result); | 		        	result.setDurability(durability); | ||||||
|  | 		        	 | ||||||
|  | 		        	result = nbtEditor.addArmorNBTTags(result, newTier, plugin.getConfigLoader().getBool("unbreakable")); | ||||||
|  | 		        	event.setResult(result); | ||||||
|  | 	        	} | ||||||
|         } |         } | ||||||
|          |          | ||||||
|         // Check if either itemA or itemB is unoccupied. |         // Check if either itemA or itemB is unoccupied. | ||||||
|         if ((itemA == null || itemB == null) && nbtEditor.getArmorTier(event.getInventory().getItem(2)) != ArmorTier.NONE)  |         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)/ |         		// If Item2 is occupied despite itemA or itemB not being occupied. (only for armored elytra)/ | ||||||
|         		event.setResult(null); |         		event.setResult(null); | ||||||
| 		p.updateInventory(); | 		player.updateInventory(); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Let the player take items out of the anvil. | 	// Let the player take items out of the anvil. | ||||||
| @@ -396,7 +380,7 @@ public class EventHandlers implements Listener | |||||||
| 		if (e.getWhoClicked() instanceof Player)  | 		if (e.getWhoClicked() instanceof Player)  | ||||||
| 		{ | 		{ | ||||||
| 			// Check if the event was a player who interacted with an anvil. | 			// 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)  | 			if (e.getView().getType() == InventoryType.ANVIL)  | ||||||
| 			{ | 			{ | ||||||
| 				AnvilInventory anvilInventory; | 				AnvilInventory anvilInventory; | ||||||
| @@ -410,7 +394,7 @@ public class EventHandlers implements Listener | |||||||
| 				catch (ClassCastException exception) | 				catch (ClassCastException exception) | ||||||
| 				{ | 				{ | ||||||
| 					// Print warning to console and exit onInventoryClick event (no support for custom inventories as they are usually used for GUI's). | 					// 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; | 					return; | ||||||
| 				} | 				} | ||||||
| 				 | 				 | ||||||
| @@ -420,7 +404,7 @@ public class EventHandlers implements Listener | |||||||
| 				{ | 				{ | ||||||
| 					ArmorTier armortier = nbtEditor.getArmorTier(anvilInventory.getItem(2)); | 					ArmorTier armortier = nbtEditor.getArmorTier(anvilInventory.getItem(2)); | ||||||
| 					// If there's an armored elytra in the final slot... | 					// 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. | 						// 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. | 						// 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 (e.isShiftClick())  | ||||||
| 						{ | 						{ | ||||||
| 							// If the player's inventory is full, don't do anything. | 							// If the player's inventory is full, don't do anything. | ||||||
| 							if (p.getInventory().firstEmpty() == -1) | 							if (player.getInventory().firstEmpty() == -1) | ||||||
| 								return; | 								return; | ||||||
| 							p.getInventory().addItem(result); | 							player.getInventory().addItem(result); | ||||||
| 						} | 						} | ||||||
| 						else  | 						else  | ||||||
| 							p.setItemOnCursor(result); | 							player.setItemOnCursor(result); | ||||||
| 						// Clean the anvil's inventory after transferring the items. | 						// Clean the anvil's inventory after transferring the items. | ||||||
| 						cleanAnvil(anvilInventory); | 						cleanAnvil(anvilInventory); | ||||||
|  | 						player.updateInventory(); | ||||||
| 						return; | 						return; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|   | |||||||
| @@ -27,7 +27,6 @@ public class ConfigLoader | |||||||
| 	private String		ironName; | 	private String		ironName; | ||||||
| 	private String		diamondName; | 	private String		diamondName; | ||||||
| 	private String      	elytraLore; | 	private String      	elytraLore; | ||||||
| 	private boolean     	cursesAllowed; |  | ||||||
| 	private List<String>	allowedEnchantments; | 	private List<String>	allowedEnchantments; | ||||||
| 	private String      	usageDeniedMessage; | 	private String      	usageDeniedMessage; | ||||||
| 	private String      	elytraReceivedMessage; | 	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%."}; | 		 "Repair cost for every tier of armored elytra in number of items to repair 100%."}; | ||||||
|     private String[] tierNameComment		  = |     private String[] tierNameComment		  = | ||||||
| 		{"Name for every armored elytra tier."}; | 		{"Name for every armored elytra tier."}; | ||||||
|     private String[] cursesComment         =  |  | ||||||
| 		{"Will curses (vanishing, binding) be transferred when creating armored elytras?"}; |  | ||||||
|     private String[] enchantmentsComment   =  |     private String[] enchantmentsComment   =  | ||||||
| 		{"List of enchantments that are allowed to be put on an armored elytra.", | 		{"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:", | 		 "You can find supported enchantments here:", | ||||||
| 		 "https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html", | 		 "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."}; | 		 "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" ); | 		elytraReceivedMessage = config.getString ("elytraReceivedMessage" ); | ||||||
| 		configOptionsList.add(new ConfigOption   ("elytraReceivedMessage", elytraReceivedMessage, elytraReceivedComment)); | 		configOptionsList.add(new ConfigOption   ("elytraReceivedMessage", elytraReceivedMessage, elytraReceivedComment)); | ||||||
| 		 | 		 | ||||||
| 		cursesAllowed         = config.getBoolean   ("allowCurses", true  ); |  | ||||||
| 		configOptionsList.add(new ConfigOption      ("allowCurses", cursesAllowed, cursesComment)); |  | ||||||
| 		allowedEnchantments   = config.getStringList("allowedEnchantments"); | 		allowedEnchantments   = config.getStringList("allowedEnchantments"); | ||||||
| 		configOptionsList.add(new ConfigOption      ("allowedEnchantments", allowedEnchantments, enchantmentsComment   )); | 		configOptionsList.add(new ConfigOption      ("allowedEnchantments", allowedEnchantments, enchantmentsComment   )); | ||||||
| 		 | 		 | ||||||
|   | |||||||
| @@ -16,10 +16,6 @@ chain: | |||||||
| iron:  | iron:  | ||||||
| diamond:  | 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. | # 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, remove them all and add "NONE" | ||||||
| # You can find supported enchantments here: | # You can find supported enchantments here: | ||||||
| @@ -32,17 +28,19 @@ allowedEnchantments: | |||||||
|   - PROTECTION_PROJECTILE |   - PROTECTION_PROJECTILE | ||||||
|   - PROTECTION_ENVIRONMENTAL |   - PROTECTION_ENVIRONMENTAL | ||||||
|   - THORNS |   - THORNS | ||||||
|  |   - BINDING_CURSE | ||||||
|  |   - VANISHING_CURSE | ||||||
|    |    | ||||||
| # Message players receive when they lack the required permissions to wear a certain armor tier. "NONE" = no message.  | # 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. | # %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.  | # 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. | # %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. | # 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. | # 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' | elytraLore: 'Elytra with %ARMOR_TIER% level protection' | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| name: ArmoredElytra | name: ArmoredElytra | ||||||
| main: nl.pim16aap2.armoredElytra.ArmoredElytra | main: nl.pim16aap2.armoredElytra.ArmoredElytra | ||||||
| version: 2.3 | version: 2.4 | ||||||
| author: Pim | author: Pim | ||||||
| commands: | commands: | ||||||
|   ArmoredElytra: |   ArmoredElytra: | ||||||
| @@ -17,6 +17,16 @@ permissions: | |||||||
|     description: Allow the player to wear iron tier armored elytras. |     description: Allow the player to wear iron tier armored elytras. | ||||||
|   armoredelytra.wear.diamond: |   armoredelytra.wear.diamond: | ||||||
|     description: Allow the player to wear diamond tier armored elytras. |     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: |   armoredelytra.give.leather: | ||||||
|     description: Allow the player to spawn in leather tier armored elytras. |     description: Allow the player to spawn in leather tier armored elytras. | ||||||
|   armoredelytra.give.gold: |   armoredelytra.give.gold: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 
				 Pim van der Loos
					Pim van der Loos