implement ItemMixin

This commit is contained in:
dfsek
2021-05-02 21:10:48 -07:00
parent 89fdfdfb34
commit 4704b2ebf7
5 changed files with 31 additions and 8 deletions
@@ -18,7 +18,7 @@ public class FabricItemHandle implements ItemHandle {
@Override @Override
public Item createItem(String data) { public Item createItem(String data) {
try { try {
return FabricAdapter.adapt(new ItemStackArgumentType().parse(new StringReader(data)).getItem()); return (Item) new ItemStackArgumentType().parse(new StringReader(data)).getItem();
} catch(CommandSyntaxException e) { } catch(CommandSyntaxException e) {
throw new IllegalArgumentException("Invalid item data \"" + data + "\"", e); throw new IllegalArgumentException("Invalid item data \"" + data + "\"", e);
} }
@@ -25,7 +25,7 @@ public class FabricItemStack implements ItemStack {
@Override @Override
public Item getType() { public Item getType() {
return new FabricItem(delegate.getItem()); return (Item) delegate.getItem();
} }
@Override @Override
@@ -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();
}
}
@@ -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.entity.EntityType;
import com.dfsek.terra.api.platform.inventory.item.Enchantment; import com.dfsek.terra.api.platform.inventory.item.Enchantment;
import com.dfsek.terra.fabric.inventory.FabricEnchantment; 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.inventory.FabricItemStack;
import com.dfsek.terra.fabric.world.block.FabricBlockData; import com.dfsek.terra.fabric.world.block.FabricBlockData;
import com.dfsek.terra.fabric.world.block.FabricBlockType; 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.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.state.property.Properties; import net.minecraft.state.property.Properties;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -99,10 +97,6 @@ public final class FabricAdapter {
return new FabricItemStack(itemStack); 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) { public static Enchantment adapt(net.minecraft.enchantment.Enchantment enchantment) {
return new FabricEnchantment(enchantment); return new FabricEnchantment(enchantment);
} }
@@ -8,6 +8,7 @@
"entity.EntityMixin", "entity.EntityMixin",
"entity.PlayerEntityMixin", "entity.PlayerEntityMixin",
"entity.ServerCommandSourceMixin", "entity.ServerCommandSourceMixin",
"inventory.ItemMixin",
"world.ChunkRegionMixin", "world.ChunkRegionMixin",
"world.ProtoChunkMixin", "world.ProtoChunkMixin",
"world.WorldChunkMixin" "world.WorldChunkMixin"