Skip to content

Commit

Permalink
Fix enchant system
Browse files Browse the repository at this point in the history
  • Loading branch information
Dueris committed Jan 2, 2024
1 parent cf06b5b commit 4f0822f
Showing 1 changed file with 85 additions and 3 deletions.
88 changes: 85 additions & 3 deletions src/main/java/me/dueris/genesismc/enchantments/Anvil.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
import net.kyori.adventure.text.TextComponent;
import net.md_5.bungee.api.chat.BaseComponent;

import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.commands.EnchantCommand;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.enchantment.EnchantmentCategory;
import org.bukkit.Bukkit;
Expand All @@ -15,6 +18,7 @@
import org.bukkit.NamespacedKey;
import org.bukkit.craftbukkit.v1_20_R3.CraftRegistry;
import org.bukkit.craftbukkit.v1_20_R3.enchantments.CraftEnchantment;
import org.bukkit.craftbukkit.v1_20_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_20_R3.inventory.CraftItemStack;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -43,6 +47,66 @@ public class Anvil implements Listener {
conflictenchantments.add(Enchantment.PROTECTION_PROJECTILE);
}

@EventHandler
public void onAnvil(PrepareAnvilEvent e) {
boolean conflicts = false;
boolean anyNull = true;
if(e.getInventory().getFirstItem() != null && e.getInventory().getSecondItem() != null){
if(this.containsWaterProt(e.getInventory().getFirstItem()) || this.containsWaterProt(e.getInventory().getSecondItem())){
Enchantment waterProt = CraftEnchantment.minecraftToBukkit(eimpl);

for(Enchantment possConf : e.getInventory().getFirstItem().getEnchantments().keySet()){
if(!conflicts){
if(!this.isCompatibleWith(((CraftEnchantment)possConf).getHandle())){
conflicts = true;
e.setResult(null);
}
}
}
for(Enchantment possConf : e.getInventory().getSecondItem().getEnchantments().keySet()){
if(!conflicts){
if(!this.isCompatibleWith(((CraftEnchantment)possConf).getHandle())){
conflicts = true;
e.setResult(null);
}
}
}
}
}
if(!conflicts && e.getInventory().getFirstItem() != null && e.getInventory().getSecondItem() != null){
// begin anvil calculations. no conflicts and the result != null
if(this.containsWaterProt(e.getInventory().getFirstItem()) || this.containsWaterProt(e.getInventory().getSecondItem())){
boolean firstContains = this.containsWaterProt(e.getInventory().getFirstItem());
boolean secondContains = this.containsWaterProt(e.getInventory().getSecondItem());
if(firstContains && secondContains){
int firstlvl = e.getInventory().getFirstItem().getItemMeta().getCustomModelData();
int secondlvl = e.getInventory().getSecondItem().getItemMeta().getCustomModelData();
int finl = 1;
if(firstlvl > secondlvl){
finl = firstlvl;
} else if(firstlvl < secondlvl){
finl = secondlvl;
} else if(firstlvl == secondlvl){
finl = firstlvl + 1;
}
ItemStack itemStack = new ItemStack(e.getInventory().getFirstItem());
setWaterProtCustomEnchantLevel(finl, itemStack);
e.setResult(itemStack);
} else if(firstContains && !secondContains){
int firstlvl = e.getInventory().getFirstItem().getItemMeta().getCustomModelData();
ItemStack itemStack = new ItemStack(e.getInventory().getFirstItem());
setWaterProtCustomEnchantLevel(firstlvl, itemStack);
e.setResult(itemStack);
} else if(!firstContains && secondContains){
int secondlvl = e.getInventory().getSecondItem().getItemMeta().getCustomModelData();
ItemStack itemStack = new ItemStack(e.getInventory().getFirstItem());
setWaterProtCustomEnchantLevel(secondlvl, itemStack);
e.setResult(itemStack);
}
}
}
}

private boolean isCompatibleWith(net.minecraft.world.item.enchantment.Enchantment other){
for(org.bukkit.enchantments.Enchantment enchant : Anvil.conflictenchantments){
CraftEnchantment enchantt = (CraftEnchantment) enchant;
Expand Down Expand Up @@ -72,9 +136,27 @@ public static void setWaterProtCustomEnchantLevel(int lvl, ItemStack item) {

meta.lore(lore); // Set the modified lore back to the item meta
item.setItemMeta(meta);

net.minecraft.world.item.ItemStack stack = CraftItemStack.asNMSCopy(item);
stack.enchant(eimpl, lvl);

net.minecraft.world.item.ItemStack stack = CraftItemStack.unwrap(item);
stack.enchant(BuiltInRegistries.ENCHANTMENT.get(new ResourceLocation("origins", "water_protection")), lvl);
}

public boolean containsWaterProt(ItemStack item){
boolean hasModelData = false;
boolean hasCorrectLore = false;
if(item.getItemMeta().hasCustomModelData()){
if(item.getItemMeta().getCustomModelData() == 1 || item.getItemMeta().getCustomModelData() == 2 || item.getItemMeta().getCustomModelData() == 3 || item.getItemMeta().getCustomModelData() == 4){
hasModelData = true;
}
}
if(item.getItemMeta().lore() != null){
for(Component lore : item.getItemMeta().lore()){
if(lore.asComponent().toString().contains("Water Protection")){
hasCorrectLore = true;
}
}
}
return hasCorrectLore && hasModelData;
}

private static String numberToRomanNum(int lvl){
Expand Down

0 comments on commit 4f0822f

Please sign in to comment.