Skip to content

Commit e6a20c0

Browse files
authored
Auto-eat blacklist (TerraFirmaGreg-Team#228)
1 parent bda8e6e commit e6a20c0

3 files changed

Lines changed: 34 additions & 4 deletions

File tree

src/main/java/su/terrafirmagreg/core/common/data/TFGTags.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public static final class Items {
3636
public static final TagKey<Item> ColdProtectionEquipment = createItemTag("tfg:cold_protection_equipment");
3737
public static final TagKey<Item> FloatingProtectionEquipment = createItemTag("tfg:floating_protection_equipment");
3838

39+
public static final TagKey<Item> AutoEatBlacklist = createItemTag("tfg:auto_eat_blacklist");
40+
3941
//Block Interaction tags for use in EMI
4042
public static final TagKey<Item> INTERACTIONBRICK = createItemTag("tfg:interaction/brick");
4143
public static final TagKey<Item> INTERACTIONBRICKSTAIR = createItemTag("tfg:interaction/brick_stairs");

src/main/java/su/terrafirmagreg/core/mixins/common/gtceu/QuarkTechSuiteMixin.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,35 @@
77

88
import com.gregtechceu.gtceu.api.capability.IElectricItem;
99
import com.gregtechceu.gtceu.common.item.armor.QuarkTechSuite;
10+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
11+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
1012

13+
import net.dries007.tfc.common.TFCTags;
14+
import net.minecraft.world.entity.LivingEntity;
1115
import net.minecraft.world.entity.player.Player;
16+
import net.minecraft.world.food.FoodProperties;
17+
import net.minecraft.world.item.ItemStack;
1218

13-
// Cancel QuarkTech helmet feeding when player is in PlayerRevive bleeding state
14-
// This prevents food from being consumed without effect
19+
import su.terrafirmagreg.core.common.data.TFGTags;
1520

1621
@Mixin(value = QuarkTechSuite.class, remap = false)
1722
public class QuarkTechSuiteMixin {
1823

24+
// Cancel QuarkTech helmet feeding when player is in PlayerRevive bleeding state
25+
// This prevents food from being consumed without effect
1926
@Inject(method = "supplyFood", at = @At("HEAD"), remap = false, cancellable = true)
2027
private void tfg$preventQuarkFeedingWhenBleeding(IElectricItem item, Player player, CallbackInfoReturnable<Boolean> cir) {
2128
if (player.getPersistentData().getBoolean("playerrevive:bleeding") || player.level().isClientSide) {
2229
cir.setReturnValue(false);
2330
}
2431
}
32+
33+
// Only eat food, don't eat blacklisted food
34+
@WrapOperation(method = "supplyFood", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;getFoodProperties(Lnet/minecraft/world/entity/LivingEntity;)Lnet/minecraft/world/food/FoodProperties;", remap = true), remap = false)
35+
private FoodProperties tfg$checkFoodTag(ItemStack stack, LivingEntity player, Operation<FoodProperties> original) {
36+
if (stack.is(TFCTags.Items.FOODS) || !stack.is(TFGTags.Items.AutoEatBlacklist)) {
37+
return original.call(stack, player);
38+
}
39+
return null;
40+
}
2541
}

src/main/java/su/terrafirmagreg/core/mixins/common/sophisticatedbackpacks/FeedingUpgradeWrapperMixin.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,38 @@
33
import javax.annotation.Nullable;
44

55
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Overwrite;
67
import org.spongepowered.asm.mixin.Pseudo;
78
import org.spongepowered.asm.mixin.injection.At;
89
import org.spongepowered.asm.mixin.injection.Inject;
910
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1011

12+
import net.dries007.tfc.common.TFCTags;
1113
import net.minecraft.core.BlockPos;
1214
import net.minecraft.world.entity.Entity;
15+
import net.minecraft.world.entity.LivingEntity;
1316
import net.minecraft.world.entity.player.Player;
17+
import net.minecraft.world.item.ItemStack;
1418
import net.minecraft.world.level.Level;
1519

16-
// Cancel backpack feeding upgrade tick when player is in PlayerRevive bleeding state
17-
// This prevents food from being consumed without effect
20+
import su.terrafirmagreg.core.common.data.TFGTags;
1821

1922
@Pseudo
2023
@Mixin(targets = "net.p3pp3rf1y.sophisticatedcore.upgrades.feeding.FeedingUpgradeWrapper", remap = false)
2124
public class FeedingUpgradeWrapperMixin {
25+
26+
// Cancel backpack feeding upgrade tick when player is in PlayerRevive bleeding state
27+
// This prevents food from being consumed without effect
2228
@Inject(method = "tick", at = @At("HEAD"), remap = false, cancellable = true)
2329
private void tfg$preventFeedingWhenBleeding(@Nullable Entity entity, Level level, BlockPos pos, CallbackInfo ci) {
2430
if (entity instanceof Player player && player.getPersistentData().getBoolean("playerrevive:bleeding")) {
2531
ci.cancel();
2632
}
2733
}
34+
35+
// Only eat food, don't eat blacklisted food
36+
@Overwrite(remap = false)
37+
private static boolean isEdible(ItemStack stack, LivingEntity player) {
38+
return stack.is(TFCTags.Items.FOODS) && !stack.is(TFGTags.Items.AutoEatBlacklist);
39+
}
2840
}

0 commit comments

Comments
 (0)