Add smithing table AE creation
This commit is contained in:
parent
b8fdec0ed5
commit
0e4be02056
src/main/java/nl/pim16aap2/armoredElytra
@ -5,6 +5,7 @@ import nl.pim16aap2.armoredElytra.handlers.CommandHandler;
|
||||
import nl.pim16aap2.armoredElytra.handlers.EventHandlers;
|
||||
import nl.pim16aap2.armoredElytra.handlers.FlyDurabilityHandler;
|
||||
import nl.pim16aap2.armoredElytra.handlers.LoginHandler;
|
||||
import nl.pim16aap2.armoredElytra.handlers.SmithingTableHandler;
|
||||
import nl.pim16aap2.armoredElytra.handlers.Uninstaller;
|
||||
import nl.pim16aap2.armoredElytra.nbtEditor.INBTEditor;
|
||||
import nl.pim16aap2.armoredElytra.nbtEditor.NBTEditor;
|
||||
@ -22,7 +23,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.Map;
|
||||
@ -84,12 +84,12 @@ public class ArmoredElytra extends JavaPlugin implements Listener
|
||||
myLogger(Level.INFO,
|
||||
"Stats disabled, not loading stats :(... Please consider enabling it! I am a simple man, seeing higher user numbers helps me stay motivated!");
|
||||
|
||||
if (config.craftingInSmithingTable())
|
||||
throw new NotImplementedException();
|
||||
else
|
||||
{
|
||||
Bukkit.getPluginManager().registerEvents(new AnvilHandler(this, !config.uninstallMode()), this);
|
||||
}
|
||||
final Listener creationListener = config.craftingInSmithingTable() ?
|
||||
new SmithingTableHandler(this, !config.uninstallMode()) :
|
||||
new AnvilHandler(this, !config.uninstallMode());
|
||||
Bukkit.getPluginManager().registerEvents(creationListener, this);
|
||||
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(new EventHandlers(this), this);
|
||||
getCommand("ArmoredElytra").setExecutor(new CommandHandler(this));
|
||||
|
||||
@ -135,6 +135,11 @@ public class ArmoredElytra extends JavaPlugin implements Listener
|
||||
return parts.length > 0 && parts[0].equals("758abbe");
|
||||
}
|
||||
|
||||
public MinecraftVersion getMinecraftVersion()
|
||||
{
|
||||
return minecraftVersion;
|
||||
}
|
||||
|
||||
public Messages getMyMessages()
|
||||
{
|
||||
return messages;
|
||||
|
@ -18,51 +18,11 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class AnvilHandler implements Listener
|
||||
public class AnvilHandler extends ArmoredElytraHandler implements Listener
|
||||
{
|
||||
private final ArmoredElytra plugin;
|
||||
|
||||
private final boolean creationEnabled;
|
||||
|
||||
public AnvilHandler(final ArmoredElytra plugin, final boolean creationEnabled)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
this.creationEnabled = creationEnabled;
|
||||
}
|
||||
|
||||
private void cleanAnvilInventory(AnvilInventory anvilInventory)
|
||||
{
|
||||
if (anvilInventory.getItem(0) != null)
|
||||
anvilInventory.getItem(0).setAmount(0);
|
||||
if (anvilInventory.getItem(1) != null)
|
||||
anvilInventory.getItem(1).setAmount(anvilInventory.getItem(1).getAmount() - 1);
|
||||
if (anvilInventory.getItem(2) != null)
|
||||
anvilInventory.getItem(2).setAmount(0);
|
||||
}
|
||||
|
||||
// Repair an Armored Elytra
|
||||
private short repairItem(short curDur, ItemStack repairItem)
|
||||
{
|
||||
// Get the multiplier for the repair items.
|
||||
double mult = 0.01;
|
||||
if (repairItem.getType().equals(Material.LEATHER))
|
||||
mult *= (100.0f / plugin.getConfigLoader().LEATHER_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(Material.GOLD_INGOT))
|
||||
mult *= (100.0f / plugin.getConfigLoader().GOLD_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(Material.IRON_INGOT))
|
||||
mult *= (100.0f / plugin.getConfigLoader().IRON_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(Material.DIAMOND))
|
||||
mult *= (100.0f / plugin.getConfigLoader().DIAMONDS_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(XMaterial.NETHERITE_INGOT.parseMaterial()))
|
||||
mult *= (100.0f / plugin.getConfigLoader().NETHERITE_TO_FULL());
|
||||
|
||||
int maxDurability = Material.ELYTRA.getMaxDurability();
|
||||
int newDurability = (int) (curDur - (maxDurability * mult));
|
||||
return (short) (newDurability <= 0 ? 0 : newDurability);
|
||||
super(plugin, creationEnabled);
|
||||
}
|
||||
|
||||
// Valid inputs:
|
||||
|
@ -0,0 +1,60 @@
|
||||
package nl.pim16aap2.armoredElytra.handlers;
|
||||
|
||||
import nl.pim16aap2.armoredElytra.ArmoredElytra;
|
||||
import nl.pim16aap2.armoredElytra.util.XMaterial;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.AnvilInventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
/**
|
||||
* Base class for the anvil / smithing table handlers.
|
||||
*
|
||||
* @author Pim
|
||||
*/
|
||||
abstract class ArmoredElytraHandler
|
||||
{
|
||||
protected final ArmoredElytra plugin;
|
||||
|
||||
protected final boolean creationEnabled;
|
||||
|
||||
public ArmoredElytraHandler(final ArmoredElytra plugin, final boolean creationEnabled)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
this.creationEnabled = creationEnabled;
|
||||
}
|
||||
|
||||
protected void cleanAnvilInventory(AnvilInventory anvilInventory)
|
||||
{
|
||||
if (anvilInventory.getItem(0) != null)
|
||||
anvilInventory.getItem(0).setAmount(0);
|
||||
if (anvilInventory.getItem(1) != null)
|
||||
anvilInventory.getItem(1).setAmount(anvilInventory.getItem(1).getAmount() - 1);
|
||||
if (anvilInventory.getItem(2) != null)
|
||||
anvilInventory.getItem(2).setAmount(0);
|
||||
}
|
||||
|
||||
// Repair an Armored Elytra
|
||||
protected short repairItem(short curDur, ItemStack repairItem)
|
||||
{
|
||||
// Get the multiplier for the repair items.
|
||||
double mult = 0.01;
|
||||
if (repairItem.getType().equals(Material.LEATHER))
|
||||
mult *= (100.0f / plugin.getConfigLoader().LEATHER_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(Material.GOLD_INGOT))
|
||||
mult *= (100.0f / plugin.getConfigLoader().GOLD_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(Material.IRON_INGOT))
|
||||
mult *= (100.0f / plugin.getConfigLoader().IRON_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(Material.DIAMOND))
|
||||
mult *= (100.0f / plugin.getConfigLoader().DIAMONDS_TO_FULL());
|
||||
|
||||
else if (repairItem.getType().equals(XMaterial.NETHERITE_INGOT.parseMaterial()))
|
||||
mult *= (100.0f / plugin.getConfigLoader().NETHERITE_TO_FULL());
|
||||
|
||||
int maxDurability = Material.ELYTRA.getMaxDurability();
|
||||
int newDurability = (int) (curDur - (maxDurability * mult));
|
||||
return (short) (newDurability <= 0 ? 0 : newDurability);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package nl.pim16aap2.armoredElytra.handlers;
|
||||
|
||||
import nl.pim16aap2.armoredElytra.ArmoredElytra;
|
||||
import nl.pim16aap2.armoredElytra.enchantment.EnchantmentManager;
|
||||
import nl.pim16aap2.armoredElytra.util.ArmorTier;
|
||||
import nl.pim16aap2.armoredElytra.util.Util;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.PrepareSmithingEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.SmithingInventory;
|
||||
|
||||
public class SmithingTableHandler extends ArmoredElytraHandler implements Listener
|
||||
{
|
||||
public SmithingTableHandler(final ArmoredElytra plugin, final boolean creationEnabled)
|
||||
{
|
||||
super(plugin, creationEnabled);
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onSmithingTableUsage(final PrepareSmithingEvent event)
|
||||
{
|
||||
final SmithingInventory inventory = event.getInventory();
|
||||
final ItemStack[] contents = inventory.getContents();
|
||||
|
||||
final ItemStack itemStackA = contents[0];
|
||||
final ItemStack itemStackB = contents[1];
|
||||
|
||||
if (itemStackA == null || itemStackB == null ||
|
||||
itemStackA.getType() != Material.ELYTRA || !Util.isChestPlate(itemStackB))
|
||||
return;
|
||||
|
||||
final ArmorTier newTier = Util.armorToTier(itemStackB.getType());
|
||||
final EnchantmentManager enchantments = new EnchantmentManager(itemStackA);
|
||||
final Player player = (Player) event.getView().getPlayer();
|
||||
|
||||
final ItemStack result;
|
||||
if (plugin.playerHasCraftPerm(player, newTier))
|
||||
{
|
||||
result = ArmoredElytra.getInstance().getNbtEditor()
|
||||
.addArmorNBTTags(new ItemStack(Material.ELYTRA, 1), newTier,
|
||||
plugin.getConfigLoader().unbreakable());
|
||||
enchantments.apply(result);
|
||||
event.setResult(result);
|
||||
}
|
||||
}
|
||||
}
|
@ -133,8 +133,15 @@ public class ConfigLoader
|
||||
DIAMONDS_TO_FULL = addNewConfigOption(config, "diamondsRepair", 3, null);
|
||||
NETHERITE_TO_FULL = addNewConfigOption(config, "netheriteIngotsRepair", 3, null);
|
||||
|
||||
// craftingInSmithingTable = addNewConfigOption(config, "craftingInSmithingTable", true, craftingInSmithingTableComment);
|
||||
craftingInSmithingTable = false;
|
||||
final boolean smithingTableAllowed = plugin.getMinecraftVersion().isNewerThan(MinecraftVersion.v1_15);
|
||||
craftingInSmithingTable = addNewConfigOption(config, "craftingInSmithingTable", smithingTableAllowed,
|
||||
craftingInSmithingTableComment);
|
||||
if (craftingInSmithingTable && !smithingTableAllowed)
|
||||
{
|
||||
Bukkit.getLogger().log(Level.WARNING, "You tried to enable crafting in smithing tables, " +
|
||||
"but this is only supported on 1.16+! Reverting to disabled.");
|
||||
craftingInSmithingTable = false;
|
||||
}
|
||||
|
||||
defaultAllowedEnchantments = addNewConfigOption(config, "allowedEnchantments", defaultAllowedEnchantments,
|
||||
enchantmentsComment);
|
||||
@ -202,7 +209,7 @@ public class ConfigLoader
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean allowStats()
|
||||
{
|
||||
return allowStats;
|
||||
|
@ -62,6 +62,11 @@ public class Util
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static boolean isChestPlate(ItemStack itemStack)
|
||||
{
|
||||
return isChestPlate(itemStack.getType());
|
||||
}
|
||||
|
||||
// Check if mat is a chest plate.
|
||||
public static boolean isChestPlate(Material mat)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user