Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6da9f0fd8e | ||
611ed4c04d |
@@ -4,7 +4,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = 'com.kasetoatz'
|
group = 'com.kasetoatz'
|
||||||
version = '1.0'
|
version = '1.3'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@@ -1,9 +1,55 @@
|
|||||||
package com.kasetoatz.superBow;
|
package com.kasetoatz.superBow;
|
||||||
|
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class Multiplier {
|
public class Multiplier {
|
||||||
public int item;
|
public int item;
|
||||||
public int book;
|
public int book;
|
||||||
|
|
||||||
|
public static final Map<Enchantment, Multiplier> multipliers = Map.ofEntries(
|
||||||
|
Map.entry(Enchantment.PROTECTION, new Multiplier(1, 1)),
|
||||||
|
Map.entry(Enchantment.FIRE_PROTECTION, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.FEATHER_FALLING, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.BLAST_PROTECTION, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.PROJECTILE_PROTECTION, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.THORNS, new Multiplier(8, 4)),
|
||||||
|
Map.entry(Enchantment.RESPIRATION, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.DEPTH_STRIDER, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.AQUA_AFFINITY, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.SHARPNESS, new Multiplier(1, 1)),
|
||||||
|
Map.entry(Enchantment.SMITE, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.BANE_OF_ARTHROPODS, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.KNOCKBACK, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.FIRE_ASPECT, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.LOOTING, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.EFFICIENCY, new Multiplier(1, 1)),
|
||||||
|
Map.entry(Enchantment.SILK_TOUCH, new Multiplier(8, 4)),
|
||||||
|
Map.entry(Enchantment.UNBREAKING, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.FORTUNE, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.POWER, new Multiplier(1, 1)),
|
||||||
|
Map.entry(Enchantment.PUNCH, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.FLAME, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.INFINITY, new Multiplier(8, 4)),
|
||||||
|
Map.entry(Enchantment.LUCK_OF_THE_SEA, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.LURE, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.FROST_WALKER, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.MENDING, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.IMPALING, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.RIPTIDE, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.LOYALTY, new Multiplier(1, 1)),
|
||||||
|
Map.entry(Enchantment.CHANNELING, new Multiplier(8, 4)),
|
||||||
|
Map.entry(Enchantment.MULTISHOT, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.PIERCING, new Multiplier(1, 1)),
|
||||||
|
Map.entry(Enchantment.QUICK_CHARGE, new Multiplier(2, 1)),
|
||||||
|
Map.entry(Enchantment.SWEEPING_EDGE, new Multiplier(4, 2)),
|
||||||
|
Map.entry(Enchantment.SWIFT_SNEAK, new Multiplier(8, 4)),
|
||||||
|
Map.entry(Enchantment.SOUL_SPEED, new Multiplier(8, 4)),
|
||||||
|
Map.entry(Enchantment.BINDING_CURSE, new Multiplier(8, 4)),
|
||||||
|
Map.entry(Enchantment.VANISHING_CURSE, new Multiplier(8, 4))
|
||||||
|
);
|
||||||
|
|
||||||
public Multiplier(int item, int book)
|
public Multiplier(int item, int book)
|
||||||
{
|
{
|
||||||
this.item = item;
|
this.item = item;
|
||||||
|
@@ -14,8 +14,11 @@ import org.bukkit.inventory.meta.Repairable;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
import static com.kasetoatz.superBow.Multiplier.multipliers;
|
||||||
|
|
||||||
public final class SuperBow extends JavaPlugin implements Listener
|
public final class SuperBow extends JavaPlugin implements Listener
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -26,52 +29,32 @@ public final class SuperBow extends JavaPlugin implements Listener
|
|||||||
|
|
||||||
public Map<Enchantment, Integer> getEnchants(ItemStack item)
|
public Map<Enchantment, Integer> getEnchants(ItemStack item)
|
||||||
{
|
{
|
||||||
Map<Enchantment, Integer> enchants = Map.of();
|
if (item.getItemMeta() instanceof EnchantmentStorageMeta meta)
|
||||||
if (item.getType() == Material.ENCHANTED_BOOK)
|
|
||||||
{
|
{
|
||||||
EnchantmentStorageMeta meta = (EnchantmentStorageMeta) item.getItemMeta();
|
return meta.getStoredEnchants();
|
||||||
if (meta != null)
|
|
||||||
{
|
|
||||||
enchants = meta.getStoredEnchants();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
return item.getEnchantments();
|
||||||
{
|
|
||||||
enchants = item.getEnchantments();
|
|
||||||
}
|
|
||||||
return enchants;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPenalty(ItemStack item)
|
public int getPenalty(ItemStack item)
|
||||||
{
|
{
|
||||||
if (item.getType() == Material.BOW)
|
if (item.getItemMeta() instanceof Repairable meta)
|
||||||
{
|
{
|
||||||
Repairable meta = (Repairable)item.getItemMeta();
|
return (int)Math.pow(2, meta.getRepairCost()) - 1;
|
||||||
if (meta != null)
|
|
||||||
{
|
|
||||||
return (int)Math.pow(2, meta.getRepairCost()) - 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int calculateCost(ItemStack target, ItemStack sacrifice, boolean renamed, boolean repair)
|
public int calculateCost(ItemStack target, ItemStack sacrifice, boolean renamed, boolean repair)
|
||||||
{
|
{
|
||||||
Map<Enchantment, Multiplier> multipliers = Map.of(
|
|
||||||
Enchantment.UNBREAKING, new Multiplier(2, 1),
|
|
||||||
Enchantment.POWER, new Multiplier(1, 1),
|
|
||||||
Enchantment.PUNCH, new Multiplier(4, 2),
|
|
||||||
Enchantment.FLAME, new Multiplier(4, 2),
|
|
||||||
Enchantment.INFINITY, new Multiplier(8, 4),
|
|
||||||
Enchantment.MENDING, new Multiplier(4, 2)
|
|
||||||
);
|
|
||||||
AtomicInteger cost = new AtomicInteger();
|
AtomicInteger cost = new AtomicInteger();
|
||||||
getEnchants(sacrifice).forEach((enchant, level) -> {
|
getEnchants(sacrifice).forEach((enchant, level) -> {
|
||||||
if (!enchant.canEnchantItem(new ItemStack(Material.BOW)))
|
if (!isValidEnchant(target, enchant))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean conflict = getEnchants(target).keySet().stream().anyMatch(e -> (enchant == Enchantment.MENDING && e == Enchantment.INFINITY) || (enchant == Enchantment.INFINITY && e == Enchantment.MENDING) || enchant.conflictsWith(e));
|
boolean conflict = getEnchants(target).keySet().stream().anyMatch(e -> !((enchant == Enchantment.MENDING && e == Enchantment.INFINITY) || (enchant == Enchantment.INFINITY && e == Enchantment.MENDING)) && enchant.conflictsWith(e));
|
||||||
if (conflict)
|
if (conflict)
|
||||||
{
|
{
|
||||||
cost.getAndIncrement();
|
cost.getAndIncrement();
|
||||||
@@ -83,6 +66,7 @@ public final class SuperBow extends JavaPlugin implements Listener
|
|||||||
{
|
{
|
||||||
multiplier = multipliers.get(enchant).book;
|
multiplier = multipliers.get(enchant).book;
|
||||||
}
|
}
|
||||||
|
Enchantment test = Enchantment.PROTECTION;
|
||||||
int targetLevel = getEnchants(target).getOrDefault(enchant, 0);
|
int targetLevel = getEnchants(target).getOrDefault(enchant, 0);
|
||||||
if (targetLevel == level)
|
if (targetLevel == level)
|
||||||
{
|
{
|
||||||
@@ -106,6 +90,11 @@ public final class SuperBow extends JavaPlugin implements Listener
|
|||||||
return cost.get();
|
return cost.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isValidEnchant(ItemStack item, Enchantment enchant)
|
||||||
|
{
|
||||||
|
return enchant.canEnchantItem(new ItemStack(item.getType())) || item.getType() == Material.ENCHANTED_BOOK;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onAnvilPrepare(PrepareAnvilEvent event)
|
public void onAnvilPrepare(PrepareAnvilEvent event)
|
||||||
{
|
{
|
||||||
@@ -113,7 +102,7 @@ public final class SuperBow extends JavaPlugin implements Listener
|
|||||||
ItemStack left = inv.getItem(0);
|
ItemStack left = inv.getItem(0);
|
||||||
ItemStack right = inv.getItem(1);
|
ItemStack right = inv.getItem(1);
|
||||||
|
|
||||||
if (left == null || right == null || left.getType() != Material.BOW)
|
if (left == null || right == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -125,7 +114,24 @@ public final class SuperBow extends JavaPlugin implements Listener
|
|||||||
{
|
{
|
||||||
ItemStack result = left.clone();
|
ItemStack result = left.clone();
|
||||||
boolean repair = false;
|
boolean repair = false;
|
||||||
result.addUnsafeEnchantments(getEnchants(right));
|
getEnchants(right).forEach((enchant, level) -> {
|
||||||
|
if (isValidEnchant(left, enchant))
|
||||||
|
{
|
||||||
|
if (Objects.equals(getEnchants(left).getOrDefault(enchant, -1), level))
|
||||||
|
{
|
||||||
|
level = Math.min(enchant.getMaxLevel(), level + 1);
|
||||||
|
}
|
||||||
|
if (result.getItemMeta() instanceof EnchantmentStorageMeta meta)
|
||||||
|
{
|
||||||
|
meta.addStoredEnchant(enchant, level, true);
|
||||||
|
result.setItemMeta(meta);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.addUnsafeEnchantment(enchant, level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
if (right.getType() == Material.BOW)
|
if (right.getType() == Material.BOW)
|
||||||
{
|
{
|
||||||
int maxDamage = result.getType().getMaxDurability();
|
int maxDamage = result.getType().getMaxDurability();
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
name: SuperBow
|
name: SuperBow
|
||||||
version: '1.1'
|
version: '1.3'
|
||||||
main: com.kasetoatz.superBow.SuperBow
|
main: com.kasetoatz.superBow.SuperBow
|
||||||
api-version: '1.21'
|
api-version: '1.21'
|
||||||
|
Reference in New Issue
Block a user