2024-03-14 05:09:55 +00:00
|
|
|
package pm.c7.scout.mixin;
|
|
|
|
|
|
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
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;
|
|
|
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
|
|
|
import pm.c7.scout.ScoutUtil;
|
2024-03-16 02:01:13 +00:00
|
|
|
import pm.c7.scout.config.ScoutConfig;
|
2024-03-14 05:09:55 +00:00
|
|
|
import pm.c7.scout.item.BaseBagItem;
|
|
|
|
|
|
|
|
import java.util.function.Predicate;
|
|
|
|
|
|
|
|
@Mixin(PlayerEntity.class)
|
|
|
|
public class PlayerEntityMixin {
|
2024-03-16 02:01:13 +00:00
|
|
|
@Inject(method = "getProjectileType", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/item/RangedWeaponItem;getProjectiles()Ljava/util/function/Predicate;"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
|
|
|
|
public void scout$arrowsFromBags(ItemStack stack, CallbackInfoReturnable<ItemStack> cir, Predicate<ItemStack> predicate) {
|
|
|
|
if (ScoutConfig.useArrows) {
|
2024-03-14 05:09:55 +00:00
|
|
|
var self = (PlayerEntity) (Object) this;
|
|
|
|
var leftPouch = ScoutUtil.findBagItem(self, BaseBagItem.BagType.POUCH, false);
|
|
|
|
var rightPouch = ScoutUtil.findBagItem(self, BaseBagItem.BagType.POUCH, true);
|
|
|
|
var satchel = ScoutUtil.findBagItem(self, BaseBagItem.BagType.SATCHEL, false);
|
|
|
|
|
|
|
|
if (!leftPouch.isEmpty()) {
|
|
|
|
BaseBagItem item = (BaseBagItem) leftPouch.getItem();
|
|
|
|
var inv = item.getInventory(leftPouch);
|
|
|
|
|
|
|
|
for(int i = 0; i < inv.size(); ++i) {
|
|
|
|
ItemStack invStack = inv.getStack(i);
|
|
|
|
if (predicate.test(invStack)) {
|
|
|
|
cir.setReturnValue(invStack);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!rightPouch.isEmpty()) {
|
|
|
|
BaseBagItem item = (BaseBagItem) rightPouch.getItem();
|
|
|
|
var inv = item.getInventory(rightPouch);
|
|
|
|
|
|
|
|
for(int i = 0; i < inv.size(); ++i) {
|
|
|
|
ItemStack invStack = inv.getStack(i);
|
|
|
|
if (predicate.test(invStack)) {
|
|
|
|
cir.setReturnValue(invStack);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!satchel.isEmpty()) {
|
|
|
|
BaseBagItem item = (BaseBagItem) satchel.getItem();
|
|
|
|
var inv = item.getInventory(satchel);
|
|
|
|
|
|
|
|
for(int i = 0; i < inv.size(); ++i) {
|
|
|
|
ItemStack invStack = inv.getStack(i);
|
|
|
|
if (predicate.test(invStack)) {
|
|
|
|
cir.setReturnValue(invStack);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|