Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
6455cd2182
12 changed files with 182 additions and 6 deletions
|
@ -61,6 +61,8 @@ public class TagAPI {
|
||||||
public final static Tag.Named<Item> ITEM_HAMMERS = makeCommonItemTag("hammers");
|
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_SAPLINGS = makeCommonItemTag("saplings");
|
||||||
public static final Tag.Named<Item> ITEM_LEAVES = makeCommonItemTag("leaves");
|
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;
|
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.
|
* Adds {@link Block} to NETHER_GROUND and GEN_TERRAIN tags to process it properly in terrain generators and block logic.
|
||||||
*
|
*
|
||||||
|
|
|
@ -9,6 +9,7 @@ import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.world.item.enchantment.Enchantments;
|
import net.minecraft.world.item.enchantment.Enchantments;
|
||||||
|
import net.minecraft.world.level.ItemLike;
|
||||||
import net.minecraft.world.level.block.OreBlock;
|
import net.minecraft.world.level.block.OreBlock;
|
||||||
import net.minecraft.world.level.block.SoundType;
|
import net.minecraft.world.level.block.SoundType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
@ -28,11 +29,16 @@ public class BaseOreBlock extends OreBlock implements BlockModelProvider {
|
||||||
private final int maxCount;
|
private final int maxCount;
|
||||||
|
|
||||||
public BaseOreBlock(Item drop, int minCount, int maxCount, int experience) {
|
public BaseOreBlock(Item drop, int minCount, int maxCount, int experience) {
|
||||||
super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND)
|
this(drop, minCount, maxCount, experience, FabricBlockSettings.of(Material.STONE, MaterialColor.SAND)
|
||||||
.hardness(3F)
|
.hardness(3F)
|
||||||
.resistance(9F)
|
.resistance(9F)
|
||||||
.requiresCorrectToolForDrops()
|
.requiresCorrectToolForDrops()
|
||||||
.sound(SoundType.STONE), UniformInt.of(1, experience));
|
.sound(SoundType.STONE));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public BaseOreBlock(Item drop, int minCount, int maxCount, int experience, Properties properties) {
|
||||||
|
super(properties, UniformInt.of(experience>0?1:0, experience));
|
||||||
this.dropItem = drop;
|
this.dropItem = drop;
|
||||||
this.minCount = minCount;
|
this.minCount = minCount;
|
||||||
this.maxCount = maxCount;
|
this.maxCount = maxCount;
|
||||||
|
@ -41,10 +47,14 @@ public class BaseOreBlock extends OreBlock implements BlockModelProvider {
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
|
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
|
||||||
|
return getDroppedItems(this, dropItem, maxCount, minCount, state, builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<ItemStack> getDroppedItems(ItemLike block, Item dropItem, int maxCount, int minCount, BlockState state, LootContext.Builder builder) {
|
||||||
ItemStack tool = builder.getParameter(LootContextParams.TOOL);
|
ItemStack tool = builder.getParameter(LootContextParams.TOOL);
|
||||||
if (tool != null && tool.isCorrectToolForDrops(state)) {
|
if (tool != null && tool.isCorrectToolForDrops(state)) {
|
||||||
if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) {
|
if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) {
|
||||||
return Collections.singletonList(new ItemStack(this));
|
return Collections.singletonList(new ItemStack(block));
|
||||||
}
|
}
|
||||||
int count;
|
int count;
|
||||||
int enchantment = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_FORTUNE, tool);
|
int enchantment = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_FORTUNE, tool);
|
||||||
|
|
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.BlockSource;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
|
import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
|
||||||
|
import net.minecraft.core.dispenser.ShearsDispenseItemBehavior;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.tags.Tag;
|
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.ShovelItem;
|
||||||
import net.minecraft.world.item.SpawnEggItem;
|
import net.minecraft.world.item.SpawnEggItem;
|
||||||
import net.minecraft.world.item.SwordItem;
|
import net.minecraft.world.item.SwordItem;
|
||||||
import net.minecraft.world.item.TieredItem;
|
|
||||||
import net.minecraft.world.level.block.DispenserBlock;
|
import net.minecraft.world.level.block.DispenserBlock;
|
||||||
import ru.bclib.api.TagAPI;
|
import ru.bclib.api.TagAPI;
|
||||||
import ru.bclib.items.BaseDiscItem;
|
import ru.bclib.items.BaseDiscItem;
|
||||||
import ru.bclib.items.BaseDrinkItem;
|
import ru.bclib.items.BaseDrinkItem;
|
||||||
|
import ru.bclib.items.tool.BaseShearsItem;
|
||||||
import ru.bclib.items.BaseSpawnEggItem;
|
import ru.bclib.items.BaseSpawnEggItem;
|
||||||
import ru.bclib.items.ModelProviderItem;
|
import ru.bclib.items.ModelProviderItem;
|
||||||
import ru.bclib.items.tool.BaseAxeItem;
|
import ru.bclib.items.tool.BaseAxeItem;
|
||||||
|
@ -49,7 +50,7 @@ public abstract class ItemRegistry extends BaseRegistry<Item> {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TieredItem registerTool(String name, TieredItem item) {
|
public Item registerTool(String name, Item item) {
|
||||||
ResourceLocation id = createModId(name);
|
ResourceLocation id = createModId(name);
|
||||||
registerItem(id, item, BaseRegistry.getModItems(id.getNamespace()));
|
registerItem(id, item, BaseRegistry.getModItems(id.getNamespace()));
|
||||||
|
|
||||||
|
@ -68,6 +69,10 @@ public abstract class ItemRegistry extends BaseRegistry<Item> {
|
||||||
else if (item instanceof BaseHoeItem) {
|
else if (item instanceof BaseHoeItem) {
|
||||||
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.HOES, item);
|
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;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,14 @@
|
||||||
"AnvilMenuMixin",
|
"AnvilMenuMixin",
|
||||||
"TagLoaderMixin",
|
"TagLoaderMixin",
|
||||||
"BiomeMixin",
|
"BiomeMixin",
|
||||||
"MainMixin"
|
"MainMixin",
|
||||||
|
"shears.BeehiveBlockMixin",
|
||||||
|
"shears.DiggingEnchantmentMixin",
|
||||||
|
"shears.MushroomCowMixin",
|
||||||
|
"shears.PumpkinBlockMixin",
|
||||||
|
"shears.SheepMixin",
|
||||||
|
"shears.SnowGolemMixin",
|
||||||
|
"shears.TripWireBlockMixi"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue