diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemHandle.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemHandle.java index ef77d9928..713cb0125 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemHandle.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemHandle.java @@ -18,7 +18,7 @@ public class FabricItemHandle implements ItemHandle { @Override public Item createItem(String data) { try { - return FabricAdapter.adapt(new ItemStackArgumentType().parse(new StringReader(data)).getItem()); + return (Item) new ItemStackArgumentType().parse(new StringReader(data)).getItem(); } catch(CommandSyntaxException e) { throw new IllegalArgumentException("Invalid item data \"" + data + "\"", e); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemStack.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemStack.java index 19d33b524..f38edca67 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemStack.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/FabricItemStack.java @@ -25,7 +25,7 @@ public class FabricItemStack implements ItemStack { @Override public Item getType() { - return new FabricItem(delegate.getItem()); + return (Item) delegate.getItem(); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/inventory/ItemMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/inventory/ItemMixin.java new file mode 100644 index 000000000..c38909f0d --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/inventory/ItemMixin.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.fabric.mixin.inventory; + +import com.dfsek.terra.api.platform.inventory.ItemStack; +import com.dfsek.terra.fabric.inventory.FabricItemStack; +import net.minecraft.item.Item; +import org.spongepowered.asm.mixin.Implements; +import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(Item.class) +@Implements(@Interface(iface = com.dfsek.terra.api.platform.inventory.Item.class, prefix = "vw$")) +public abstract class ItemMixin { + @Shadow + public abstract int getMaxDamage(); + + public Object vw$getHandle() { + return this; + } + + public ItemStack vw$newItemStack(int amount) { + return new FabricItemStack(new net.minecraft.item.ItemStack((Item) (Object) this, amount)); + } + + public double vw$getMaxDurability() { + return getMaxDamage(); + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java index eb73af5a7..e5e186f51 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java @@ -6,7 +6,6 @@ import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.api.platform.inventory.item.Enchantment; import com.dfsek.terra.fabric.inventory.FabricEnchantment; -import com.dfsek.terra.fabric.inventory.FabricItem; import com.dfsek.terra.fabric.inventory.FabricItemStack; import com.dfsek.terra.fabric.world.block.FabricBlockData; import com.dfsek.terra.fabric.world.block.FabricBlockType; @@ -22,7 +21,6 @@ import com.dfsek.terra.fabric.world.handles.world.FabricWorldHandle; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; @@ -99,10 +97,6 @@ public final class FabricAdapter { return new FabricItemStack(itemStack); } - public static com.dfsek.terra.api.platform.inventory.Item adapt(Item item) { - return new FabricItem(item); - } - public static Enchantment adapt(net.minecraft.enchantment.Enchantment enchantment) { return new FabricEnchantment(enchantment); } diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 150299d72..577accb57 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -8,6 +8,7 @@ "entity.EntityMixin", "entity.PlayerEntityMixin", "entity.ServerCommandSourceMixin", + "inventory.ItemMixin", "world.ChunkRegionMixin", "world.ProtoChunkMixin", "world.WorldChunkMixin"