Skip to content

Commit

Permalink
Fix food properties not setting some values. Close #1483
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredlll08 committed May 6, 2022
1 parent eb4585b commit 0b29b63
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 59 deletions.
@@ -0,0 +1,48 @@
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.Mutable;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.gen.Invoker;

import java.util.List;

@Mixin(FoodProperties.class)
public interface AccessFoodProperties {

@Invoker("<init>")
static FoodProperties crafttweaker$createFoodProperties(int nutrition, float saturationModifier, boolean isMeat, boolean canAlwaysEat, boolean fastFood, List<Pair<MobEffectInstance, Float>> effects) {
throw new UnsupportedOperationException();
}

@Mutable
@Accessor("nutrition")
void crafttweaker$setNutrition(int nutrition);

@Mutable
@Accessor("saturationModifier")
void crafttweaker$setSaturationModifier(float saturationModifier);

@Mutable
@Accessor("isMeat")
void crafttweaker$setIsMeat(boolean isMeat);

@Mutable
@Accessor("canAlwaysEat")
void crafttweaker$setCanAlwaysEat(boolean canAlwaysEat);

@Mutable
@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);

}

This file was deleted.

@@ -1,7 +1,7 @@
package com.blamejared.crafttweaker.natives.food;

import com.blamejared.crafttweaker.api.annotation.ZenRegister;
import com.blamejared.crafttweaker.mixin.common.access.food.AccessFoodPropertiesBuilder;
import com.blamejared.crafttweaker.mixin.common.access.food.AccessFoodProperties;
import com.blamejared.crafttweaker_annotations.annotations.Document;
import com.blamejared.crafttweaker_annotations.annotations.NativeTypeRegistration;
import com.mojang.datafixers.util.Pair;
Expand All @@ -10,6 +10,7 @@
import org.openzen.zencode.java.ZenCodeType;

import java.util.List;
import java.util.function.Consumer;

@ZenRegister
@Document("vanilla/api/food/FoodProperties")
Expand All @@ -33,7 +34,7 @@ public static int getNutrition(FoodProperties internal) {
@ZenCodeType.Setter("nutrition")
public static FoodProperties setNutrition(FoodProperties internal, int nutrition) {

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

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

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

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

FoodProperties.Builder builder = getbuilder(internal);
((AccessFoodPropertiesBuilder) builder).crafttweaker$setIsMeat(isMeat);
return builder.build();
return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setIsMeat(isMeat));
}

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

FoodProperties.Builder builder = getbuilder(internal);
((AccessFoodPropertiesBuilder) builder).crafttweaker$setCanAlwaysEat(canAlwaysEat);
return builder.build();
return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setCanAlwaysEat(canAlwaysEat));
}

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

FoodProperties.Builder builder = getbuilder(internal);
((AccessFoodPropertiesBuilder) builder).crafttweaker$setFastFood(fastFood);
return builder.build();
return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$setFastFood(fastFood));
}

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

FoodProperties.Builder builder = getbuilder(internal);
((AccessFoodPropertiesBuilder) builder).crafttweaker$getEffects().add(Pair.of(effect, probability));
return builder.build();
return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$getEffects()
.add(Pair.of(effect, probability)));
}

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

FoodProperties.Builder builder = getbuilder(internal);
((AccessFoodPropertiesBuilder) builder).crafttweaker$getEffects().removeIf(pair -> pair.getFirst().equals(effect));
return builder.build();
return modify(internal, accessFoodProperties -> accessFoodProperties.crafttweaker$getEffects()
.removeIf(pair -> pair.getFirst().equals(effect)));
}

private static FoodProperties.Builder getbuilder(FoodProperties internal) {
private static FoodProperties modify(FoodProperties properties, Consumer<AccessFoodProperties> propertyMutator) {

FoodProperties.Builder builder = new FoodProperties.Builder();
if(internal.isMeat()) {
builder.meat();
}
if(internal.isFastFood()) {
builder.fast();
}
builder.saturationMod(internal.getSaturationModifier());
builder.nutrition(internal.getNutrition());
for(Pair<MobEffectInstance, Float> effect : internal.getEffects()) {
builder.effect(effect.getFirst(), effect.getSecond());
}
return builder;
FoodProperties copy = AccessFoodProperties.crafttweaker$createFoodProperties(properties.getNutrition(), properties.getSaturationModifier(), properties.isMeat(), properties.canAlwaysEat(), properties.isFastFood(), properties.getEffects());
propertyMutator.accept((AccessFoodProperties) copy);
return copy;
}

}
2 changes: 1 addition & 1 deletion Common/src/main/resources/crafttweaker.mixins.json
Expand Up @@ -9,7 +9,7 @@
"common.access.block.AccessBlockBehaviour",
"common.access.block.AccessBlockStateBase",
"common.access.entity.AccessLightningBolt",
"common.access.food.AccessFoodPropertiesBuilder",
"common.access.food.AccessFoodProperties",
"common.access.item.AccessIngredient",
"common.access.item.AccessIngredientTagValue",
"common.access.item.AccessItem",
Expand Down

0 comments on commit 0b29b63

Please sign in to comment.