add enchantment to loot tables

This commit is contained in:
dfsek
2021-01-09 02:25:36 -07:00
parent 9a94485c91
commit 67ffd91641
15 changed files with 206 additions and 24 deletions

View File

@@ -3,12 +3,30 @@ package com.dfsek.terra.bukkit.handles;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.platform.handle.ItemHandle;
import com.dfsek.terra.api.platform.inventory.ItemStack;
import com.dfsek.terra.api.platform.inventory.item.Enchantment;
import com.dfsek.terra.bukkit.util.MinecraftUtils;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.block.BukkitMaterialData;
import com.dfsek.terra.bukkit.world.inventory.BukkitItemStack;
import org.bukkit.NamespacedKey;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
public class BukkitItemHandle implements ItemHandle {
@Override
public ItemStack newItemStack(MaterialData material, int amount) {
return new BukkitItemStack(new org.bukkit.inventory.ItemStack(((BukkitMaterialData) material).getHandle(), amount));
}
@Override
public Enchantment getEnchantment(String id) {
return BukkitAdapter.adapt(org.bukkit.enchantments.Enchantment.getByKey(NamespacedKey.minecraft(MinecraftUtils.stripMinecraftNamespace(id))));
}
@Override
public Set<Enchantment> getEnchantments() {
return Arrays.stream(org.bukkit.enchantments.Enchantment.values()).map(BukkitAdapter::adapt).collect(Collectors.toSet());
}
}

View File

@@ -1,16 +0,0 @@
package com.dfsek.terra.bukkit.util;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.bukkit.world.BukkitWorld;
import org.bukkit.Location;
import org.bukkit.util.Vector;
public final class BukkitConversions {
public static Vector3 toTerraVector(Vector bukkit) {
return new Vector3(bukkit.getX(), bukkit.getY(), bukkit.getZ());
}
public static Location toBukkitLocation(com.dfsek.terra.api.math.vector.Location terra) {
return new Location(((BukkitWorld) terra.getWorld()).getHandle(), terra.getX(), terra.getY(), terra.getZ());
}
}

View File

@@ -0,0 +1,8 @@
package com.dfsek.terra.bukkit.util;
public final class MinecraftUtils {
public static String stripMinecraftNamespace(String in) {
if(in.startsWith("minecraft:")) return in.substring("minecraft:".length());
return in;
}
}

View File

@@ -10,9 +10,11 @@ import com.dfsek.terra.api.platform.block.data.Rail;
import com.dfsek.terra.api.platform.block.data.RedstoneWire;
import com.dfsek.terra.api.platform.block.data.Slab;
import com.dfsek.terra.api.platform.block.data.Stairs;
import com.dfsek.terra.api.platform.inventory.item.Enchantment;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.bukkit.BukkitCommandSender;
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitEnchantment;
import org.bukkit.Location;
import org.bukkit.util.Vector;
@@ -338,4 +340,12 @@ public final class BukkitAdapter {
public static org.bukkit.Chunk adapt(Chunk chunk) {
return (org.bukkit.Chunk) chunk.getHandle();
}
public static Enchantment adapt(org.bukkit.enchantments.Enchantment enchantment) {
return new BukkitEnchantment(enchantment);
}
public static org.bukkit.enchantments.Enchantment adapt(Enchantment enchantment) {
return ((BukkitEnchantment) enchantment).getHandle();
}
}

View File

@@ -1,9 +1,15 @@
package com.dfsek.terra.bukkit.world.inventory;
import com.dfsek.terra.api.platform.inventory.item.Enchantment;
import com.dfsek.terra.api.platform.inventory.item.ItemMeta;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitDamageable;
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitEnchantment;
import org.bukkit.inventory.meta.Damageable;
import java.util.HashMap;
import java.util.Map;
public class BukkitItemMeta implements ItemMeta {
private final org.bukkit.inventory.meta.ItemMeta delegate;
@@ -20,4 +26,16 @@ public class BukkitItemMeta implements ItemMeta {
public org.bukkit.inventory.meta.ItemMeta getHandle() {
return delegate;
}
@Override
public Map<Enchantment, Integer> getEnchantments() {
Map<Enchantment, Integer> map = new HashMap<>();
delegate.getEnchants().forEach((enchantment, integer) -> map.put(BukkitAdapter.adapt(enchantment), integer));
return map;
}
@Override
public void addEnchantment(Enchantment enchantment, int level) {
delegate.addEnchant(((BukkitEnchantment) enchantment).getHandle(), level, true);
}
}

View File

@@ -0,0 +1,38 @@
package com.dfsek.terra.bukkit.world.inventory.meta;
import com.dfsek.terra.api.platform.inventory.ItemStack;
import com.dfsek.terra.api.platform.inventory.item.Enchantment;
import com.dfsek.terra.bukkit.world.inventory.BukkitItemStack;
public class BukkitEnchantment implements Enchantment {
private final org.bukkit.enchantments.Enchantment delegate;
public BukkitEnchantment(org.bukkit.enchantments.Enchantment delegate) {
this.delegate = delegate;
}
@Override
public org.bukkit.enchantments.Enchantment getHandle() {
return delegate;
}
@Override
public boolean canEnchantItem(ItemStack itemStack) {
return delegate.canEnchantItem(((BukkitItemStack) itemStack).getHandle());
}
@Override
public String getID() {
return delegate.getKey().toString();
}
@Override
public boolean conflictsWith(Enchantment other) {
return delegate.conflictsWith(((BukkitEnchantment) other).getHandle());
}
@Override
public int getMaxLevel() {
return delegate.getMaxLevel();
}
}