Skip to content

Commit

Permalink
Fix food effects on forge
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredlll08 committed May 11, 2022
1 parent 7930fcb commit 95fc21d
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,4 @@ public interface AccessFoodProperties {
@Accessor("fastFood")
void crafttweaker$setFastFood(boolean fastFood);

@Accessor("effects")
List<Pair<MobEffectInstance, Float>> crafttweaker$getEffects();

@Mutable
@Accessor("effects")
void crafttweaker$setEffects(List<Pair<MobEffectInstance, Float>> effects);

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.blamejared.crafttweaker.api.annotation.ZenRegister;
import com.blamejared.crafttweaker.mixin.common.access.food.AccessFoodProperties;
import com.blamejared.crafttweaker.platform.Services;
import com.blamejared.crafttweaker_annotations.annotations.Document;
import com.blamejared.crafttweaker_annotations.annotations.NativeTypeRegistration;
import com.mojang.datafixers.util.Pair;
Expand Down Expand Up @@ -34,7 +35,7 @@ public static int getNutrition(FoodProperties internal) {
@ZenCodeType.Setter("nutrition")
public static FoodProperties setNutrition(FoodProperties internal, int nutrition) {

return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setNutrition(nutrition));
return accessibleModify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setNutrition(nutrition));
}

@ZenCodeType.Method
Expand All @@ -48,7 +49,7 @@ public static float getSaturationModifier(FoodProperties internal) {
@ZenCodeType.Setter("saturationModifier")
public static FoodProperties setSaturationModifier(FoodProperties internal, float saturationModifier) {

return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setSaturationModifier(saturationModifier));
return accessibleModify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setSaturationModifier(saturationModifier));
}

@ZenCodeType.Method
Expand All @@ -62,7 +63,7 @@ public static boolean isMeat(FoodProperties internal) {
@ZenCodeType.Setter("isMeat")
public static FoodProperties setIsMeat(FoodProperties internal, boolean isMeat) {

return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setIsMeat(isMeat));
return accessibleModify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setIsMeat(isMeat));
}

@ZenCodeType.Method
Expand All @@ -76,7 +77,7 @@ public static boolean canAlwaysEat(FoodProperties internal) {
@ZenCodeType.Setter("canAlwaysEat")
public static FoodProperties setCanAlwaysEat(FoodProperties internal, boolean canAlwaysEat) {

return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setCanAlwaysEat(canAlwaysEat));
return accessibleModify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setCanAlwaysEat(canAlwaysEat));
}

@ZenCodeType.Method
Expand All @@ -90,7 +91,7 @@ public static boolean isFastFood(FoodProperties internal) {
@ZenCodeType.Setter("isFastFood")
public static FoodProperties setIsFastFood(FoodProperties internal, boolean fastFood) {

return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setFastFood(fastFood));
return accessibleModify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setFastFood(fastFood));
}

@ZenCodeType.Method
Expand All @@ -103,22 +104,27 @@ public static List<Pair<MobEffectInstance, Float>> getEffects(FoodProperties int
@ZenCodeType.Method
public static FoodProperties addEffect(FoodProperties internal, MobEffectInstance effect, float probability) {

return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$getEffects()
.add(Pair.of(effect, probability)));
return modify(internal, properties -> Services.PLATFORM.addFoodPropertiesEffect(properties, effect, probability));
}

@ZenCodeType.Method
public static FoodProperties removeEffect(FoodProperties internal, MobEffectInstance effect) {

return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$getEffects()
.removeIf(pair -> pair.getFirst().equals(effect)));
return modify(internal, properties -> Services.PLATFORM.removeFoodPropertiesEffect(properties, effect));
}

private static FoodProperties modify(FoodProperties properties, Consumer<AccessFoodProperties> propertyMutator) {
private static FoodProperties accessibleModify(FoodProperties properties, Consumer<AccessFoodProperties> propertyMutator) {

FoodProperties copy = AccessFoodProperties.crafttweaker$createFoodProperties(properties.getNutrition(), properties.getSaturationModifier(), properties.isMeat(), properties.canAlwaysEat(), properties.isFastFood(), properties.getEffects());
propertyMutator.accept((AccessFoodProperties) copy);
return copy;
}

private static FoodProperties modify(FoodProperties properties, Consumer<FoodProperties> propertyMutator) {

FoodProperties copy = AccessFoodProperties.crafttweaker$createFoodProperties(properties.getNutrition(), properties.getSaturationModifier(), properties.isMeat(), properties.canAlwaysEat(), properties.isFastFood(), properties.getEffects());
propertyMutator.accept(copy);
return copy;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@
import com.blamejared.crafttweaker.impl.script.ScriptRecipe;
import com.blamejared.crafttweaker.platform.helper.inventory.IInventoryWrapper;
import com.mojang.datafixers.util.Either;
import com.mojang.datafixers.util.Pair;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.npc.VillagerTrades;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;
Expand Down Expand Up @@ -156,4 +159,14 @@ default boolean canItemStacksStack(ItemStack first, ItemStack second) {

CompoundTag getPersistentData(ServerPlayer player);

default void addFoodPropertiesEffect(FoodProperties internal, MobEffectInstance effect, float probability) {

internal.getEffects().add(Pair.of(effect, probability));
}

default void removeFoodPropertiesEffect(FoodProperties internal, MobEffectInstance effect) {

internal.getEffects().removeIf(pair -> pair.getFirst().equals(effect));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;
Expand Down
2 changes: 1 addition & 1 deletion Fabric/src/main/resources/crafttweaker.fabric.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
],
"client": [
"client.access.AccessKeyMapping",
"client.transform.multiplayer.MixinClientPacketListenerFabric"
"client.transform.multiplayer.MixinClientPacketListenerFabric"
],
"server": [
],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.blamejared.crafttweaker.mixin.common.access.food;

import com.mojang.datafixers.util.Pair;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.food.FoodProperties;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.util.List;
import java.util.function.Supplier;

@Mixin(FoodProperties.class)
public interface AccessFoodPropertiesForge {

@Accessor("effects")
List<Pair<Supplier<MobEffectInstance>, Float>> crafttweaker$getEffects();

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,25 @@
import com.blamejared.crafttweaker.impl.loot.ForgeLootModifierMapAdapter;
import com.blamejared.crafttweaker.impl.script.ScriptRecipe;
import com.blamejared.crafttweaker.impl.script.ScriptSerializer;
import com.blamejared.crafttweaker.mixin.common.access.food.AccessFoodPropertiesForge;
import com.blamejared.crafttweaker.mixin.common.access.villager.AccessBasicTrade;
import com.blamejared.crafttweaker.platform.helper.inventory.IItemHandlerWrapper;
import com.blamejared.crafttweaker.platform.services.IPlatformHelper;
import com.google.common.base.Suppliers;
import com.mojang.datafixers.util.Either;
import com.mojang.datafixers.util.Pair;
import net.minecraft.Util;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.npc.VillagerTrades;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;
Expand Down Expand Up @@ -317,4 +321,17 @@ public CompoundTag getPersistentData(ServerPlayer player) {
return player.getPersistentData().getCompound(Player.PERSISTED_NBT_TAG);
}

@Override
public void addFoodPropertiesEffect(FoodProperties internal, MobEffectInstance effect, float probability) {

((AccessFoodPropertiesForge) internal).crafttweaker$getEffects().add(Pair.of(() -> effect, probability));
}

@Override
public void removeFoodPropertiesEffect(FoodProperties internal, MobEffectInstance effect) {

((AccessFoodPropertiesForge) internal).crafttweaker$getEffects()
.removeIf(pair -> pair.getFirst() != null && pair.getFirst().get().equals(effect));
}

}
41 changes: 21 additions & 20 deletions Forge/src/main/resources/crafttweaker.forge.mixins.json
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
{
"required": true,
"minVersion": "0.8",
"package": "com.blamejared.crafttweaker.mixin",
"refmap": "crafttweaker.refmap.json",
"compatibilityLevel": "JAVA_17",
"mixins": [
"common.access.brewing.AccessBrewingRecipeRegistry",
"common.access.brewing.AccessPotionBrewing",
"common.access.registry.AccessRegistryManager",
"common.access.villager.AccessBasicTrade",
"common.transform.item.attribute.MixinItemAttributeModifierEvent",
"common.transform.villager.MixinBasicTrade",
],
"client": [
],
"server": [
],
"injectors": {
"defaultRequire": 1
}
"required": true,
"minVersion": "0.8",
"package": "com.blamejared.crafttweaker.mixin",
"refmap": "crafttweaker.refmap.json",
"compatibilityLevel": "JAVA_17",
"mixins": [
"common.access.food.AccessFoodPropertiesForge",
"common.access.brewing.AccessBrewingRecipeRegistry",
"common.access.brewing.AccessPotionBrewing",
"common.access.registry.AccessRegistryManager",
"common.access.villager.AccessBasicTrade",
"common.transform.item.attribute.MixinItemAttributeModifierEvent",
"common.transform.villager.MixinBasicTrade"
],
"client": [
],
"server": [
],
"injectors": {
"defaultRequire": 1
}
}

0 comments on commit 95fc21d

Please sign in to comment.