Skip to content

Commit 6753312

Browse files
committed
Optimized food modification and tooltip config
Added compat for AppleSkin
1 parent 3ef848e commit 6753312

21 files changed

+230
-130
lines changed

Diff for: build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,10 @@ dependencies {
106106
implementation fg.deobf(group: 'top.theillusivec4.caelus', name: 'caelus-forge', version: "${project.caelus_version}")
107107
implementation fg.deobf("curse.maven:origins-474438:${project.origins_version}")
108108
//Compat Dependencies
109+
implementation fileTree(dir: 'libs', include: '*.jar')
109110
implementation fg.deobf("curse.maven:apotheosis-313970:${project.apotheosis_version}")
110111
implementation fg.deobf("curse.maven:farmers-delight-398521:${project.farmers_delight_version}")
111-
implementation fileTree(dir: 'libs', include: '*.jar')
112+
implementation fg.deobf("curse.maven:appleskin-248787:${project.appleskin_version}")
112113

113114
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
114115
}

Diff for: gradle.properties

+4-3
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ org.gradle.daemon=false
1212
# Mod Properties
1313
maven_group=limonblaze.originsclasses
1414
archives_base_name=origins-classes-forge
15-
mod_version=1.1.4.2
15+
mod_version=1.1.5
1616
mod_id=origins_classes
1717
mod_author=LimonBlaze
1818
mc_requirements=[1.18.2,1.19)
19-
forge_requirements=[40.0.47,)
19+
forge_requirements=[40.1.14,)
2020
origins_requirements=[1.18.2-1.4.1,)
2121

2222
# Dependencies
@@ -25,4 +25,5 @@ org.gradle.daemon=false
2525

2626
# Compat Dependencies
2727
apotheosis_version=3781524
28-
farmers_delight_version=3784851
28+
farmers_delight_version=3784851
29+
appleskin_version=3686482

Diff for: src/main/java/limonblaze/originsclasses/OriginsClasses.java

+3
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
import limonblaze.originsclasses.common.registry.OriginsClassesAttributes;
77
import limonblaze.originsclasses.common.registry.OriginsClassesConditions;
88
import limonblaze.originsclasses.common.registry.OriginsClassesPowers;
9+
import limonblaze.originsclasses.util.ClientConfig;
910
import net.minecraft.resources.ResourceLocation;
1011
import net.minecraft.world.entity.EntityType;
1112
import net.minecraftforge.event.entity.EntityAttributeModificationEvent;
1213
import net.minecraftforge.eventbus.api.IEventBus;
1314
import net.minecraftforge.fml.ModLoadingContext;
1415
import net.minecraftforge.fml.common.Mod;
16+
import net.minecraftforge.fml.config.ModConfig;
1517
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
1618
import org.apache.logging.log4j.LogManager;
1719
import org.apache.logging.log4j.Logger;
@@ -23,6 +25,7 @@ public class OriginsClasses {
2325
public static final Logger LOGGER = LogManager.getLogger();
2426

2527
public OriginsClasses() {
28+
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ClientConfig.SPEC);
2629
IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus();
2730
OriginsClassesAttributes.ATTRIBUTES.register(modBus);
2831
OriginsClassesActions.ENTITY_ACTIONS.register(modBus);

Diff for: src/main/java/limonblaze/originsclasses/common/OriginsClassesCommon.java

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import limonblaze.originsclasses.OriginsClasses;
44
import limonblaze.originsclasses.common.network.S2CMultiMining;
55
import limonblaze.originsclasses.common.network.S2CInfiniteTrader;
6+
import limonblaze.originsclasses.compat.AppleSkinCompat;
7+
import net.minecraftforge.common.MinecraftForge;
8+
import net.minecraftforge.fml.ModList;
69
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
710
import net.minecraftforge.network.NetworkDirection;
811
import net.minecraftforge.network.NetworkRegistry;
@@ -19,6 +22,9 @@ public class OriginsClassesCommon {
1922

2023
public static void setup(final FMLCommonSetupEvent event) {
2124
event.enqueueWork(OriginsClassesCommon::initNetwork);
25+
if(ModList.get().isLoaded("appleskin")) {
26+
MinecraftForge.EVENT_BUS.register(AppleSkinCompat.class);
27+
}
2228
}
2329

2430
private static void initNetwork() {

Diff for: src/main/java/limonblaze/originsclasses/common/apoli/configuration/ModifyCraftedFoodConfiguration.java

+15-14
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,26 @@
33
import com.mojang.serialization.Codec;
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
55
import io.github.edwinmindcraft.apoli.api.IDynamicFeatureConfiguration;
6-
import io.github.edwinmindcraft.apoli.api.configuration.ListConfiguration;
7-
import io.github.edwinmindcraft.apoli.api.power.configuration.*;
6+
import io.github.edwinmindcraft.apoli.api.configuration.PowerReference;
7+
import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredItemCondition;
8+
import io.github.edwinmindcraft.calio.api.network.CalioCodecHelper;
9+
import limonblaze.originsclasses.common.event.ModifyCraftResultEvent;
10+
import limonblaze.originsclasses.util.OriginsClassesDataTypes;
811
import net.minecraft.core.Holder;
9-
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
1012

11-
public record ModifyCraftedFoodConfiguration(ListConfiguration<AttributeModifier> foodModifiers,
12-
ListConfiguration<AttributeModifier> saturationModifiers,
13-
Holder<ConfiguredItemCondition<?, ?>> itemCondition,
14-
Holder<ConfiguredEntityCondition<?, ?>> entityCondition) implements IDynamicFeatureConfiguration {
13+
import java.util.EnumSet;
14+
15+
public record ModifyCraftedFoodConfiguration(PowerReference modifyFoodPower,
16+
EnumSet<ModifyCraftResultEvent.CraftingResultType> craftingResultTypes,
17+
Holder<ConfiguredItemCondition<?, ?>>itemCondition) implements IDynamicFeatureConfiguration {
1518

1619
public static final Codec<ModifyCraftedFoodConfiguration> CODEC = RecordCodecBuilder.create(instance -> instance.group(
17-
ListConfiguration.modifierCodec("food_modifier")
18-
.forGetter(ModifyCraftedFoodConfiguration::foodModifiers),
19-
ListConfiguration.modifierCodec("saturation_modifier")
20-
.forGetter(ModifyCraftedFoodConfiguration::saturationModifiers),
20+
PowerReference.mapCodec("modify_food_power")
21+
.forGetter(ModifyCraftedFoodConfiguration::modifyFoodPower),
22+
CalioCodecHelper.optionalField(OriginsClassesDataTypes.CRAFTING_RESULT_TYPE_SET, "crafting_result_type", EnumSet.allOf(ModifyCraftResultEvent.CraftingResultType.class))
23+
.forGetter(ModifyCraftedFoodConfiguration::craftingResultTypes),
2124
ConfiguredItemCondition.optional("item_condition")
22-
.forGetter(ModifyCraftedFoodConfiguration::itemCondition),
23-
ConfiguredEntityCondition.optional("entity_condition")
24-
.forGetter(ModifyCraftedFoodConfiguration::entityCondition)
25+
.forGetter(ModifyCraftedFoodConfiguration::itemCondition)
2526
).apply(instance, ModifyCraftedFoodConfiguration::new));
2627

2728
}
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,35 @@
11
package limonblaze.originsclasses.common.apoli.power;
22

33
import io.github.edwinmindcraft.apoli.api.component.IPowerContainer;
4-
import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredEntityCondition;
54
import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredItemCondition;
65
import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredPower;
76
import io.github.edwinmindcraft.apoli.api.power.factory.PowerFactory;
87
import limonblaze.originsclasses.common.apoli.configuration.ModifyCraftedFoodConfiguration;
8+
import limonblaze.originsclasses.common.event.ModifyCraftResultEvent;
99
import limonblaze.originsclasses.common.registry.OriginsClassesPowers;
1010
import limonblaze.originsclasses.util.NbtUtils;
11-
import net.minecraft.nbt.CompoundTag;
1211
import net.minecraft.nbt.ListTag;
13-
import net.minecraft.nbt.Tag;
14-
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
12+
import net.minecraft.nbt.StringTag;
1513
import net.minecraft.world.entity.player.Player;
1614
import net.minecraft.world.item.ItemStack;
17-
18-
import java.util.List;
15+
import net.minecraft.world.level.Level;
1916

2017
public class ModifyCraftedFoodPower extends PowerFactory<ModifyCraftedFoodConfiguration> {
2118

2219
public ModifyCraftedFoodPower() {
2320
super(ModifyCraftedFoodConfiguration.CODEC);
2421
}
2522

26-
public static void modifyCrafted(Player player, ItemStack stack) {
27-
List<ModifyCraftedFoodConfiguration> configs = IPowerContainer.getPowers(player, OriginsClassesPowers.MODIFY_CRAFTED_FOOD.get())
28-
.stream()
29-
.filter(cp -> check(cp, player, stack))
30-
.map(ConfiguredPower::getConfiguration)
31-
.toList();
32-
ListTag foodModifierTag = new ListTag();
33-
configs.stream()
34-
.flatMap(config -> config.foodModifiers().getContent().stream())
35-
.forEach(modifier -> foodModifierTag.add(modifier.save()));
36-
ListTag saturationModifierTag = new ListTag();
37-
configs.stream()
38-
.flatMap(config -> config.saturationModifiers().getContent().stream())
39-
.forEach(modifier -> saturationModifierTag.add(modifier.save()));
40-
CompoundTag originsClassesTag = stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES);
41-
if(!foodModifierTag.isEmpty()) originsClassesTag.put(NbtUtils.FOOD_MODIFIERS, foodModifierTag);
42-
if(!saturationModifierTag.isEmpty()) originsClassesTag.put(NbtUtils.SATURATION_MODIFIERS, saturationModifierTag);
43-
}
44-
45-
public static boolean check(ConfiguredPower<ModifyCraftedFoodConfiguration, ModifyCraftedFoodPower> cp, Player player, ItemStack stack) {
46-
return ConfiguredItemCondition.check(cp.getConfiguration().itemCondition(), player.level, stack) &&
47-
ConfiguredEntityCondition.check(cp.getConfiguration().entityCondition(), player);
23+
public static boolean check(ConfiguredPower<ModifyCraftedFoodConfiguration, ModifyCraftedFoodPower> cp, Level level, ItemStack stack, ModifyCraftResultEvent.CraftingResultType type) {
24+
return cp.getConfiguration().craftingResultTypes().contains(type) && ConfiguredItemCondition.check(cp.getConfiguration().itemCondition(), level, stack);
4825
}
4926

50-
public static List<AttributeModifier> getModifiers(ItemStack stack, String key) {
51-
return NbtUtils.getOriginsClassesData(stack, key, Tag.TAG_COMPOUND)
52-
.stream()
53-
.map(tag -> (CompoundTag)tag)
54-
.map(AttributeModifier::load)
55-
.toList();
27+
public static void modify(Player player, ItemStack stack, ModifyCraftResultEvent.CraftingResultType type) {
28+
ListTag tag = new ListTag();
29+
IPowerContainer.getPowers(player, OriginsClassesPowers.MODIFY_CRAFTED_FOOD.get()).stream()
30+
.filter(cp -> check(cp, player.level, stack, type))
31+
.forEach(cp -> tag.add(StringTag.valueOf(cp.getConfiguration().modifyFoodPower().power().toString())));
32+
if(!tag.isEmpty()) stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES).put(NbtUtils.MODIFY_FOOD_POWERS, tag);
5633
}
5734

5835
}

Diff for: src/main/java/limonblaze/originsclasses/common/event/ModifyCraftResultEvent.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,24 @@
66

77
public class ModifyCraftResultEvent extends PlayerEvent {
88
private final ItemStack crafted;
9+
private final CraftingResultType type;
910

10-
public ModifyCraftResultEvent(Player player, ItemStack crafted) {
11+
public ModifyCraftResultEvent(Player player, ItemStack crafted, CraftingResultType type) {
1112
super(player);
1213
this.crafted = crafted;
14+
this.type = type;
1315
}
1416

1517
public ItemStack getCrafted() {
1618
return crafted;
1719
}
1820

21+
public CraftingResultType getType() {
22+
return this.type;
23+
}
24+
25+
public enum CraftingResultType {
26+
CRAFTING, SMELTING, COOKING_POT, SKILLET
27+
}
28+
1929
}

Diff for: src/main/java/limonblaze/originsclasses/common/event/PowerEventHandler.java

+27-15
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.github.edwinmindcraft.apoli.api.component.IPowerContainer;
44
import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredBiEntityCondition;
5+
import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredPower;
6+
import io.github.edwinmindcraft.apoli.common.power.ModifyFoodPower;
57
import limonblaze.originsclasses.common.OriginsClassesCommon;
68
import limonblaze.originsclasses.common.apoli.power.ActionOnTamePower;
79
import limonblaze.originsclasses.common.apoli.power.ModifyCraftedFoodPower;
@@ -24,6 +26,7 @@
2426
import net.minecraft.world.entity.AgeableMob;
2527
import net.minecraft.world.entity.LivingEntity;
2628
import net.minecraft.world.entity.OwnableEntity;
29+
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
2730
import net.minecraft.world.entity.player.Player;
2831
import net.minecraft.world.entity.projectile.AbstractArrow;
2932
import net.minecraft.world.item.ItemStack;
@@ -48,6 +51,7 @@
4851
import net.minecraftforge.fml.common.Mod;
4952
import net.minecraftforge.network.PacketDistributor;
5053

54+
import java.util.ArrayList;
5155
import java.util.List;
5256
import java.util.Objects;
5357

@@ -167,26 +171,34 @@ public static void onFoodCrafted(ModifyCraftResultEvent event) {
167171
Player player = event.getPlayer();
168172
ItemStack stack = event.getCrafted();
169173
if(stack.getFoodProperties(player) != null) {
170-
ModifyCraftedFoodPower.modifyCrafted(player, stack);
174+
ModifyCraftedFoodPower.modify(player, stack, event.getType());
171175
}
172176
}
173177

174178
@SubscribeEvent
175179
public static void onTooltip(ItemTooltipEvent event) {
176-
if(event.getFlags().isAdvanced()) {
177-
ItemStack stack = event.getItemStack();
178-
List<Component> tooltip = event.getToolTip();
179-
if(stack.getFoodProperties(event.getPlayer()) != null) {
180-
ModifyCraftedFoodPower.getModifiers(stack, NbtUtils.FOOD_MODIFIERS)
181-
.forEach(modifier -> tooltip.add(ItemUtils.modifierTooltip(modifier, FOOD_TRANSLATION_KEY)));
182-
ModifyCraftedFoodPower.getModifiers(stack, NbtUtils.SATURATION_MODIFIERS)
183-
.forEach(modifier -> tooltip.add(ItemUtils.modifierTooltip(modifier, SATURATION_MODIFIER_TRANSLATION_KEY)));
184-
}
185-
if((stack.getItem() instanceof PotionItem || stack.getItem() instanceof TippedArrowItem) &&
186-
PotionUtils.hasPotionBonus(stack)
187-
) {
188-
tooltip.add(new TranslatableComponent(POTION_BONUS_TRANSLATION_KEY).withStyle(ChatFormatting.BLUE));
189-
}
180+
Player player = event.getPlayer();
181+
ItemStack stack = event.getItemStack();
182+
List<Component> tooltip = event.getToolTip();
183+
if(ClientConfig.CONFIG.showModifyFoodTooltip.get() &&
184+
stack.getFoodProperties(player) != null)
185+
{
186+
List<AttributeModifier> foodModifiers = new ArrayList<>();
187+
List<AttributeModifier> saturationModifiers = new ArrayList<>();
188+
ModifyFoodPower.getValidPowers(player, stack).stream()
189+
.map(ConfiguredPower::getConfiguration)
190+
.forEach(config -> {
191+
foodModifiers.addAll(config.foodModifiers().entries());
192+
saturationModifiers.addAll(config.saturationModifiers().entries());
193+
});
194+
foodModifiers.forEach(mod -> tooltip.add(ItemUtils.modifierTooltip(mod, FOOD_TRANSLATION_KEY)));
195+
saturationModifiers.forEach(mod -> tooltip.add(ItemUtils.modifierTooltip(mod, SATURATION_MODIFIER_TRANSLATION_KEY)));
196+
}
197+
if(ClientConfig.CONFIG.showPotionBonusTooltip.get() &&
198+
(stack.getItem() instanceof PotionItem || stack.getItem() instanceof TippedArrowItem) &&
199+
PotionUtils.hasPotionBonus(stack))
200+
{
201+
tooltip.add(new TranslatableComponent(POTION_BONUS_TRANSLATION_KEY).withStyle(ChatFormatting.BLUE));
190202
}
191203
}
192204

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package limonblaze.originsclasses.compat;
2+
3+
import io.github.edwinmindcraft.apoli.common.power.ModifyFoodPower;
4+
import io.github.edwinmindcraft.apoli.common.power.configuration.ModifyFoodConfiguration;
5+
import net.minecraft.world.entity.player.Player;
6+
import net.minecraft.world.item.ItemStack;
7+
import net.minecraftforge.eventbus.api.SubscribeEvent;
8+
import squeek.appleskin.api.event.FoodValuesEvent;
9+
import squeek.appleskin.api.food.FoodValues;
10+
11+
public class AppleSkinCompat {
12+
13+
@SubscribeEvent
14+
public static void onAppleSkinFoodValueEvent(FoodValuesEvent event) {
15+
Player player = event.player;
16+
ItemStack stack = event.itemStack;
17+
int hunger = (int) ModifyFoodPower.apply(
18+
ModifyFoodPower.getValidPowers(player, stack),
19+
player.level,
20+
stack,
21+
event.modifiedFoodValues.hunger,
22+
ModifyFoodConfiguration::foodModifiers
23+
);
24+
float saturation = (float) ModifyFoodPower.apply(
25+
ModifyFoodPower.getValidPowers(player, stack),
26+
player.level,
27+
stack,
28+
event.modifiedFoodValues.saturationModifier,
29+
ModifyFoodConfiguration::saturationModifiers
30+
);
31+
event.modifiedFoodValues = new FoodValues(hunger, saturation);
32+
}
33+
34+
}

Diff for: src/main/java/limonblaze/originsclasses/mixin/FoodDataMixin.java

-47
This file was deleted.

Diff for: src/main/java/limonblaze/originsclasses/mixin/FurnaceResultSlotMixin.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package limonblaze.originsclasses.mixin;
22

33
import limonblaze.originsclasses.common.event.ModifyCraftResultEvent;
4+
import limonblaze.originsclasses.common.event.ModifyCraftResultEvent.CraftingResultType;
45
import net.minecraft.world.Container;
56
import net.minecraft.world.entity.player.Player;
67
import net.minecraft.world.inventory.FurnaceResultSlot;
@@ -25,15 +26,15 @@ public FurnaceResultSlotMixin(Container pContainer, int pIndex, int pX, int pY)
2526
@Override
2627
@Nonnull
2728
public ItemStack remove(int amount) {
28-
ModifyCraftResultEvent event = new ModifyCraftResultEvent(this.player, super.remove(amount).copy());
29+
ModifyCraftResultEvent event = new ModifyCraftResultEvent(this.player, super.remove(amount).copy(), CraftingResultType.SMELTING);
2930
MinecraftForge.EVENT_BUS.post(event);
3031
return event.getCrafted();
3132
}
3233

3334
@Override
3435
@Nonnull
3536
public ItemStack getItem() {
36-
ModifyCraftResultEvent event = new ModifyCraftResultEvent(this.player, super.getItem().copy());
37+
ModifyCraftResultEvent event = new ModifyCraftResultEvent(this.player, super.getItem().copy(), CraftingResultType.SMELTING);
3738
MinecraftForge.EVENT_BUS.post(event);
3839
return event.getCrafted();
3940
}

0 commit comments

Comments
 (0)