fabric inventory stuff

This commit is contained in:
dfsek
2021-02-24 23:46:43 -07:00
parent 4a47815be7
commit 4ca2f0c08d
14 changed files with 153 additions and 53 deletions

View File

@@ -3,15 +3,13 @@ package com.dfsek.terra.api.platform.inventory;
import com.dfsek.terra.api.platform.Handle;
import com.dfsek.terra.api.platform.inventory.item.ItemMeta;
public interface ItemStack extends Handle, Cloneable {
public interface ItemStack extends Handle {
int getAmount();
void setAmount(int i);
Item getType();
ItemStack clone();
ItemMeta getItemMeta();
void setItemMeta(ItemMeta meta);

View File

@@ -58,7 +58,8 @@ public class LootTable {
for(ItemStack stack : loot) {
int attempts = 0;
while(stack.getAmount() != 0 && attempts < 10) {
ItemStack newStack = stack.clone();
ItemStack newStack = stack.getType().newItemStack(stack.getAmount());
newStack.setItemMeta(stack.getItemMeta());
newStack.setAmount(1);
int slot = r.nextInt(i.getSize());
ItemStack slotItem = i.getItem(slot);
@@ -66,7 +67,8 @@ public class LootTable {
i.setItem(slot, newStack);
stack.setAmount(stack.getAmount() - 1);
} else if(slotItem.getType().equals(newStack.getType())) {
ItemStack dep = newStack.clone();
ItemStack dep = newStack.getType().newItemStack(newStack.getAmount());
dep.setItemMeta(newStack.getItemMeta());
dep.setAmount(newStack.getAmount() + slotItem.getAmount());
i.setItem(slot, dep);
stack.setAmount(stack.getAmount() - 1);

View File

@@ -33,9 +33,11 @@ public class DamageFunction implements LootFunction {
*/
@Override
public ItemStack apply(ItemStack original, Random r) {
if(!(original instanceof Damageable)) return original;
if(original == null) return null;
ItemMeta meta = original.getItemMeta();
if(!(meta instanceof Damageable)) return original;
double itemDurability = (r.nextDouble() * (max - min)) + min;
Damageable damage = (Damageable) original.getItemMeta();
Damageable damage = (Damageable) meta;
damage.setDamage((int) (original.getType().getMaxDurability() - (itemDurability / 100) * original.getType().getMaxDurability()));
original.setItemMeta((ItemMeta) damage);
return original;