mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
feat: implement platform enchantments
This commit is contained in:
parent
6279638363
commit
1d8a208d10
@ -0,0 +1,51 @@
|
|||||||
|
package com.dfsek.terra.minestom.item;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.inventory.ItemStack;
|
||||||
|
import com.dfsek.terra.api.inventory.item.Enchantment;
|
||||||
|
|
||||||
|
import net.minestom.server.MinecraftServer;
|
||||||
|
import net.minestom.server.item.Material;
|
||||||
|
import net.minestom.server.utils.NamespaceID;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
||||||
|
public class MinestomEnchantment implements Enchantment {
|
||||||
|
private final net.minestom.server.item.enchant.Enchantment delegate;
|
||||||
|
private final String id;
|
||||||
|
|
||||||
|
public MinestomEnchantment(net.minestom.server.item.enchant.Enchantment delegate) {
|
||||||
|
this.delegate = delegate;
|
||||||
|
id = Objects.requireNonNull(delegate.registry()).raw();
|
||||||
|
}
|
||||||
|
|
||||||
|
public MinestomEnchantment(String id) {
|
||||||
|
this.delegate = MinecraftServer.getEnchantmentRegistry().get(NamespaceID.from(id));
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canEnchantItem(ItemStack itemStack) {
|
||||||
|
return delegate.supportedItems().contains((Material) itemStack.getType().getHandle());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean conflictsWith(Enchantment other) {
|
||||||
|
return delegate.exclusiveSet().contains(NamespaceID.from(((MinestomEnchantment) other).id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getID() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxLevel() {
|
||||||
|
return delegate.maxLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public net.minestom.server.item.enchant.Enchantment getHandle() {
|
||||||
|
return delegate;
|
||||||
|
}
|
||||||
|
}
|
@ -4,22 +4,30 @@ import com.dfsek.terra.api.handle.ItemHandle;
|
|||||||
import com.dfsek.terra.api.inventory.Item;
|
import com.dfsek.terra.api.inventory.Item;
|
||||||
import com.dfsek.terra.api.inventory.item.Enchantment;
|
import com.dfsek.terra.api.inventory.item.Enchantment;
|
||||||
|
|
||||||
|
import net.minestom.server.MinecraftServer;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
public class MinestomItemHandle implements ItemHandle {
|
public class MinestomItemHandle implements ItemHandle {
|
||||||
@Override
|
@Override
|
||||||
public Item createItem(String data) {
|
public Item createItem(String data) {
|
||||||
return null;
|
return new MinestomMaterial(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Enchantment getEnchantment(String id) {
|
public Enchantment getEnchantment(String id) {
|
||||||
return null;
|
return new MinestomEnchantment(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<Enchantment> getEnchantments() {
|
public Set<Enchantment> getEnchantments() {
|
||||||
return Set.of();
|
return MinecraftServer
|
||||||
|
.getEnchantmentRegistry()
|
||||||
|
.values()
|
||||||
|
.stream()
|
||||||
|
.map(MinestomEnchantment::new)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.dfsek.terra.minestom.item;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.inventory.item.Enchantment;
|
||||||
|
import com.dfsek.terra.api.inventory.item.ItemMeta;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
public class MinestomItemMeta implements ItemMeta {
|
||||||
|
private final HashMap<Enchantment, Integer> enchantments;
|
||||||
|
|
||||||
|
public MinestomItemMeta(HashMap<Enchantment, Integer> enchantments) {
|
||||||
|
this.enchantments = enchantments;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addEnchantment(Enchantment enchantment, int level) {
|
||||||
|
enchantments.put(enchantment, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Enchantment, Integer> getEnchantments() {
|
||||||
|
return enchantments;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getHandle() {
|
||||||
|
return enchantments;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
package com.dfsek.terra.minestom.item;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.inventory.Item;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.inventory.item.Enchantment;
|
||||||
|
import com.dfsek.terra.api.inventory.item.ItemMeta;
|
||||||
|
|
||||||
|
import net.minestom.server.MinecraftServer;
|
||||||
|
import net.minestom.server.item.ItemComponent;
|
||||||
|
import net.minestom.server.item.ItemStack;
|
||||||
|
import net.minestom.server.item.component.EnchantmentList;
|
||||||
|
import net.minestom.server.registry.DynamicRegistry;
|
||||||
|
import net.minestom.server.registry.DynamicRegistry.Key;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
||||||
|
public class MinestomItemStack implements com.dfsek.terra.api.inventory.ItemStack {
|
||||||
|
private ItemStack base;
|
||||||
|
|
||||||
|
public MinestomItemStack(net.minestom.server.item.@NotNull ItemStack base) {
|
||||||
|
this.base = base;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getHandle() {
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAmount() {
|
||||||
|
return base.amount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAmount(int i) {
|
||||||
|
base = base.withAmount(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item getType() {
|
||||||
|
return new MinestomMaterial(base.material());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemMeta getItemMeta() {
|
||||||
|
HashMap<Enchantment, Integer> enchantments = new HashMap<>();
|
||||||
|
EnchantmentList enchantmentList = base.get(ItemComponent.ENCHANTMENTS);
|
||||||
|
if(enchantmentList != null) {
|
||||||
|
enchantmentList.enchantments().forEach((enchantmentKey, integer) -> {
|
||||||
|
enchantments.put(new MinestomEnchantment(
|
||||||
|
Objects.requireNonNull(MinecraftServer.getEnchantmentRegistry().get(enchantmentKey))),
|
||||||
|
integer
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new MinestomItemMeta(enchantments);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setItemMeta(ItemMeta meta) {
|
||||||
|
HashMap<Key<net.minestom.server.item.enchant.Enchantment>, Integer> enchantments = new HashMap<>();
|
||||||
|
DynamicRegistry<net.minestom.server.item.enchant.Enchantment> registry = MinecraftServer.getEnchantmentRegistry();
|
||||||
|
meta
|
||||||
|
.getEnchantments()
|
||||||
|
.forEach((key, value) -> {
|
||||||
|
MinestomEnchantment enchantment = (MinestomEnchantment) key;
|
||||||
|
enchantments.put(registry.getKey(enchantment.getHandle()), value);
|
||||||
|
});
|
||||||
|
|
||||||
|
EnchantmentList list = new EnchantmentList(enchantments);
|
||||||
|
base = base.with(ItemComponent.ENCHANTMENTS, list);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package com.dfsek.terra.minestom.item;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.inventory.Item;
|
||||||
|
import com.dfsek.terra.api.inventory.ItemStack;
|
||||||
|
|
||||||
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
|
|
||||||
|
public class MinestomMaterial implements Item {
|
||||||
|
private final Material delegate;
|
||||||
|
|
||||||
|
public MinestomMaterial(Material delegate) {
|
||||||
|
this.delegate = delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MinestomMaterial(String id) {
|
||||||
|
this.delegate = Material.fromNamespaceId(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack newItemStack(int amount) {
|
||||||
|
return new MinestomItemStack(
|
||||||
|
net.minestom.server.item.ItemStack
|
||||||
|
.builder(delegate)
|
||||||
|
.amount(amount)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getMaxDurability() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Material getHandle() {
|
||||||
|
return delegate;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user