Better Shears Integration
This commit is contained in:
parent
1195bcf4c3
commit
7f7e4bfa4c
11 changed files with 169 additions and 3 deletions
|
@ -61,6 +61,8 @@ public class TagAPI {
|
|||
public final static Tag.Named<Item> ITEM_HAMMERS = makeCommonItemTag("hammers");
|
||||
public static final Tag.Named<Item> ITEM_SAPLINGS = makeCommonItemTag("saplings");
|
||||
public static final Tag.Named<Item> ITEM_LEAVES = makeCommonItemTag("leaves");
|
||||
public static final Tag.Named<Item> ITEM_SHEARS = getMCItemTag("shears");
|
||||
public static final Tag.Named<Item> ITEM_COMMON_SHEARS = makeCommonItemTag("shears");
|
||||
|
||||
|
||||
/**
|
||||
|
@ -131,6 +133,18 @@ public class TagAPI {
|
|||
return tag == null ? (Named<Block>) TagRegistry.block(id) : (Named<Block>) tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or create Minecraft {@link Item} {@link Tag.Named}.
|
||||
*
|
||||
* @param name - {@link String} tag name.
|
||||
* @return {@link Item} {@link Tag.Named}.
|
||||
*/
|
||||
public static Tag.Named<Item> getMCItemTag(String name) {
|
||||
ResourceLocation id = new ResourceLocation(name);
|
||||
Tag<Item> tag = ItemTags.getAllTags().getTag(id);
|
||||
return tag == null ? (Named<Item>) TagRegistry.item(id) : (Named<Item>) tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds {@link Block} to NETHER_GROUND and GEN_TERRAIN tags to process it properly in terrain generators and block logic.
|
||||
*
|
||||
|
|
21
src/main/java/ru/bclib/items/tool/BaseShearsItem.java
Normal file
21
src/main/java/ru/bclib/items/tool/BaseShearsItem.java
Normal file
|
@ -0,0 +1,21 @@
|
|||
package ru.bclib.items.tool;
|
||||
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.ShearsItem;
|
||||
import ru.bclib.api.TagAPI;
|
||||
|
||||
public class BaseShearsItem extends ShearsItem {
|
||||
public BaseShearsItem(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
public static boolean isShear(ItemStack itemStack, Item item){
|
||||
if (item == Items.SHEARS){
|
||||
return itemStack.is(item) | itemStack.is(TagAPI.ITEM_COMMON_SHEARS) || itemStack.is(TagAPI.ITEM_SHEARS);
|
||||
} else {
|
||||
return itemStack.is(item);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package ru.bclib.mixin.common.shears;
|
||||
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.BeehiveBlock;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
|
||||
@Mixin(BeehiveBlock.class)
|
||||
public class BeehiveBlockMixin {
|
||||
@Redirect(method="use", at=@At(value="INVOKE", target="Lnet/minecraft/world/item/ItemStack;is(Lnet/minecraft/world/item/Item;)Z"))
|
||||
public boolean bn_useProxy(ItemStack itemStack, Item item){
|
||||
return BaseShearsItem.isShear(itemStack, item);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package ru.bclib.mixin.common.shears;
|
||||
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.enchantment.DiggingEnchantment;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
|
||||
@Mixin(DiggingEnchantment.class)
|
||||
public class DiggingEnchantmentMixin {
|
||||
@Redirect(method="canEnchant", at=@At(value="INVOKE", target="Lnet/minecraft/world/item/ItemStack;is(Lnet/minecraft/world/item/Item;)Z"))
|
||||
public boolean bn_mobInteractProxy(ItemStack itemStack, Item item){
|
||||
return BaseShearsItem.isShear(itemStack, item);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package ru.bclib.mixin.common.shears;
|
||||
|
||||
import net.minecraft.world.entity.animal.MushroomCow;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
|
||||
@Mixin(MushroomCow.class)
|
||||
public class MushroomCowMixin {
|
||||
@Redirect(method="mobInteract", at=@At(value="INVOKE", target="Lnet/minecraft/world/item/ItemStack;is(Lnet/minecraft/world/item/Item;)Z"))
|
||||
public boolean bn_mobInteractProxy(ItemStack itemStack, Item item){
|
||||
return BaseShearsItem.isShear(itemStack, item);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package ru.bclib.mixin.common.shears;
|
||||
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.PumpkinBlock;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
|
||||
@Mixin(PumpkinBlock.class)
|
||||
public abstract class PumpkinBlockMixin {
|
||||
@Redirect(method="use", at=@At(value="INVOKE", target="Lnet/minecraft/world/item/ItemStack;is(Lnet/minecraft/world/item/Item;)Z"))
|
||||
public boolean bn_useProxy(ItemStack itemStack, Item item){
|
||||
return BaseShearsItem.isShear(itemStack, item);
|
||||
}
|
||||
}
|
17
src/main/java/ru/bclib/mixin/common/shears/SheepMixin.java
Normal file
17
src/main/java/ru/bclib/mixin/common/shears/SheepMixin.java
Normal file
|
@ -0,0 +1,17 @@
|
|||
package ru.bclib.mixin.common.shears;
|
||||
|
||||
import net.minecraft.world.entity.animal.Sheep;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
|
||||
@Mixin(Sheep.class)
|
||||
public class SheepMixin {
|
||||
@Redirect(method="mobInteract", at=@At(value="INVOKE", target="Lnet/minecraft/world/item/ItemStack;is(Lnet/minecraft/world/item/Item;)Z"))
|
||||
public boolean bn_mobInteractProxy(ItemStack itemStack, Item item){
|
||||
return BaseShearsItem.isShear(itemStack, item);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package ru.bclib.mixin.common.shears;
|
||||
|
||||
import net.minecraft.world.entity.animal.SnowGolem;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
|
||||
@Mixin(SnowGolem.class)
|
||||
public class SnowGolemMixin {
|
||||
@Redirect(method="mobInteract", at=@At(value="INVOKE", target="Lnet/minecraft/world/item/ItemStack;is(Lnet/minecraft/world/item/Item;)Z"))
|
||||
public boolean bn_mobInteractProxy(ItemStack itemStack, Item item){
|
||||
return BaseShearsItem.isShear(itemStack, item);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package ru.bclib.mixin.common.shears;
|
||||
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.TripWireBlock;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
|
||||
@Mixin(TripWireBlock.class)
|
||||
public class TripWireBlockMixi {
|
||||
@Redirect(method="playerWillDestroy", at=@At(value="INVOKE", target="Lnet/minecraft/world/item/ItemStack;is(Lnet/minecraft/world/item/Item;)Z"))
|
||||
public boolean bn_useProxy(ItemStack itemStack, Item item){
|
||||
return BaseShearsItem.isShear(itemStack, item);
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
|||
import net.minecraft.core.BlockSource;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
|
||||
import net.minecraft.core.dispenser.ShearsDispenseItemBehavior;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.tags.Tag;
|
||||
|
@ -18,11 +19,11 @@ import net.minecraft.world.item.ItemStack;
|
|||
import net.minecraft.world.item.ShovelItem;
|
||||
import net.minecraft.world.item.SpawnEggItem;
|
||||
import net.minecraft.world.item.SwordItem;
|
||||
import net.minecraft.world.item.TieredItem;
|
||||
import net.minecraft.world.level.block.DispenserBlock;
|
||||
import ru.bclib.api.TagAPI;
|
||||
import ru.bclib.items.BaseDiscItem;
|
||||
import ru.bclib.items.BaseDrinkItem;
|
||||
import ru.bclib.items.tool.BaseShearsItem;
|
||||
import ru.bclib.items.BaseSpawnEggItem;
|
||||
import ru.bclib.items.ModelProviderItem;
|
||||
import ru.bclib.items.tool.BaseAxeItem;
|
||||
|
@ -49,7 +50,7 @@ public abstract class ItemRegistry extends BaseRegistry<Item> {
|
|||
return item;
|
||||
}
|
||||
|
||||
public TieredItem registerTool(String name, TieredItem item) {
|
||||
public Item registerTool(String name, Item item) {
|
||||
ResourceLocation id = createModId(name);
|
||||
registerItem(id, item, BaseRegistry.getModItems(id.getNamespace()));
|
||||
|
||||
|
@ -68,6 +69,10 @@ public abstract class ItemRegistry extends BaseRegistry<Item> {
|
|||
else if (item instanceof BaseHoeItem) {
|
||||
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.HOES, item);
|
||||
}
|
||||
else if (item instanceof BaseShearsItem) {
|
||||
TagAPI.addTags(item, (Tag.Named<Item>) FabricToolTags.SHEARS, TagAPI.ITEM_SHEARS, TagAPI.ITEM_COMMON_SHEARS);
|
||||
DispenserBlock.registerBehavior(item.asItem(), new ShearsDispenseItemBehavior());
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,14 @@
|
|||
"AnvilMenuMixin",
|
||||
"TagLoaderMixin",
|
||||
"BiomeMixin",
|
||||
"MainMixin"
|
||||
"MainMixin",
|
||||
"shears.BeehiveBlockMixin",
|
||||
"shears.DiggingEnchantmentMixin",
|
||||
"shears.MushroomCowMixin",
|
||||
"shears.PumpkinBlockMixin",
|
||||
"shears.SheepMixin",
|
||||
"shears.SnowGolemMixin",
|
||||
"shears.TripWireBlockMixi"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue