diff --git a/gradle.properties b/gradle.properties index fe91f90..05801c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,4 +8,4 @@ loader_version=0.16.14 loom_version=1.11-SNAPSHOT fabric_version=0.129.0+1.21.7 -mod_version=0.0.1 +mod_version=0.0.2 diff --git a/src/main/java/eu/e99/playerheads/PlayerHeads.java b/src/main/java/eu/e99/playerheads/PlayerHeads.java index ecfbc55..0bc5295 100644 --- a/src/main/java/eu/e99/playerheads/PlayerHeads.java +++ b/src/main/java/eu/e99/playerheads/PlayerHeads.java @@ -13,6 +13,8 @@ public class PlayerHeads implements ModInitializer { public static final String NAMESPACE = "playerheads"; public static final Logger LOGGER = LoggerFactory.getLogger(NAMESPACE); + public static final String TAG_SHOT_FROM_DISPENSER = "__shot_from_dispenser__"; + public static final LootFunctionType COPY_PLAYER_HEAD = Registry.register( Registries.LOOT_FUNCTION_TYPE, newIdentifier("copy_player_head"), diff --git a/src/main/java/eu/e99/playerheads/mixin/ArrowItemMixin.java b/src/main/java/eu/e99/playerheads/mixin/ArrowItemMixin.java new file mode 100644 index 0000000..e41a19c --- /dev/null +++ b/src/main/java/eu/e99/playerheads/mixin/ArrowItemMixin.java @@ -0,0 +1,23 @@ +package eu.e99.playerheads.mixin; + +import eu.e99.playerheads.PlayerHeads; +import net.minecraft.entity.projectile.ProjectileEntity; +import net.minecraft.item.ArrowItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Position; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ArrowItem.class) +public class ArrowItemMixin { + + @Inject(method = "createEntity", at = @At("RETURN")) + private void playerheads$createEntity(World world, Position pos, ItemStack stack, Direction direction, CallbackInfoReturnable cir) { + ProjectileEntity entity = cir.getReturnValue(); + entity.addCommandTag(PlayerHeads.TAG_SHOT_FROM_DISPENSER); + } +} diff --git a/src/main/resources/data/playerheads/loot_table/player.json b/src/main/resources/data/playerheads/loot_table/player.json index 5848897..9cb12d8 100644 --- a/src/main/resources/data/playerheads/loot_table/player.json +++ b/src/main/resources/data/playerheads/loot_table/player.json @@ -21,7 +21,8 @@ "condition": "minecraft:damage_source_properties", "predicate": { "direct_entity": { - "type": "#minecraft:arrows" + "type": "#minecraft:arrows", + "nbt": "{Tags:[\"__shot_from_dispenser__\"]}" } } }, diff --git a/src/main/resources/playerheads.mixins.json b/src/main/resources/playerheads.mixins.json index 9b1f20a..afbb322 100644 --- a/src/main/resources/playerheads.mixins.json +++ b/src/main/resources/playerheads.mixins.json @@ -3,6 +3,7 @@ "package": "eu.e99.playerheads.mixin", "compatibilityLevel": "JAVA_21", "mixins": [ + "ArrowItemMixin" ], "injectors": { "defaultRequire": 1