From e828cf57857a2927d3841332ace2ce7273913f8e Mon Sep 17 00:00:00 2001 From: DevDyna Date: Fri, 25 Sep 2026 15:21:23 +0200 Subject: [PATCH 1/5] added a pre-configured EffectItem builder for simple items --- .../cakesticklib/api/aspect/logic/EffectItem.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java b/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java index ec3e3e4..16c1bd8 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java +++ b/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java @@ -25,7 +25,7 @@ public interface EffectItem { /** * Create an food item with a dedicated tooltip to show mobEffects */ - static class Builder { + static class Builder { private final List list = new ArrayList<>(); private final Properties p; @@ -43,6 +43,14 @@ public static Builder of(Properties p, return new Builder<>(p, factory); } + public Builder(Properties p) { + this(p, (i, l) ->(T) new Item(i)); + } + + public static Builder of(Properties p) { + return new Builder<>(p); + } + public Builder food(FoodProperties food) { this.food = food; return this; @@ -111,11 +119,10 @@ default List defaultEffectTooltip(List effects) { var result = Component.empty() .append(effect.getDisplayName()); - if (instance.getAmplifier() > 0) + if (instance.getAmplifier() > 0) result.append(" ") .append(Component.translatable( "potion.potency." + instance.getAmplifier())); - result.append(" (") .append(MobEffectUtil.formatDuration( From 24a87808e86e5e2322bc72b1d68a4aae73e5028c Mon Sep 17 00:00:00 2001 From: DevDyna Date: Sat, 26 Sep 2026 11:46:56 +0200 Subject: [PATCH 2/5] fully deprecated old EffectItem --- .../api/templates/EffectItem.java | 119 ------------------ 1 file changed, 119 deletions(-) delete mode 100644 src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java diff --git a/src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java b/src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java deleted file mode 100644 index 4cbcf7b..0000000 --- a/src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.devdyna.cakesticklib.api.templates; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.component.Consumable; -import net.minecraft.world.item.consume_effects.ApplyStatusEffectsConsumeEffect; - -@Deprecated -public class EffectItem extends Item implements com.devdyna.cakesticklib.api.aspect.logic.EffectItem { - - private List effects; - - public EffectItem(Properties p, List effects) { - super(p); - this.effects = effects; - } - - @Deprecated - public static class Builder { - - private final List list = new ArrayList<>(); - private final Properties p; - private FoodProperties food; - - public Builder(Properties p) { - this.p = p; - } - - public static Builder of(Properties p) { - return new Builder(p); - } - - public Builder food(FoodProperties food) { - this.food = food; - return this; - } - - public Builder effect(FoodEffect effect) { - this.list.add(effect); - return this; - } - - /** - * 100% success - */ - public Builder effect(MobEffectInstance... effect) { - return effect(FoodEffect.of(effect)); - } - - public Builder effect(float chance, MobEffectInstance... effect) { - return effect(FoodEffect.of(chance, effect)); - } - - public Builder effect(float chance, List effect) { - return effect(FoodEffect.of(chance, effect)); - } - - public Builder effect(List effect) { - return effect(FoodEffect.of(effect)); - } - - public EffectItem build() { - - var consumable = Consumable.builder(); - var potions = new ArrayList(); - - for (var effect : list) { - consumable.onConsume(new ApplyStatusEffectsConsumeEffect(effect.effects(), effect.chance())); - potions.addAll(effect.effects()); - } - - return new EffectItem(p.food(food, consumable.build()), potions); - } - - public record FoodEffect(float chance, List effects) { - - public static final float SUCCESS = 1.0f; - - public static FoodEffect of(float c, List e) { - return new FoodEffect(c, e); - } - - /** - * 100% success - */ - public static FoodEffect of(MobEffectInstance... e) { - return of(SUCCESS, e); - } - - public static FoodEffect of(float c, MobEffectInstance... e) { - return of(c, List.of(e)); - - } - - /** - * 100% success - */ - public static FoodEffect of(List e) { - return of(SUCCESS, e); - } - } - } - - @Override - public List getEffectToolTip() { - return defaultEffectTooltip(effects); - } - - @Override - public EffectItem create(Properties p, ArrayList effects) { - return new EffectItem(p, effects); - } - -} From 2f37cfbe0bf01e34c719c5708766aecdc08fb8f9 Mon Sep 17 00:00:00 2001 From: DevDyna Date: Sat, 26 Sep 2026 11:47:38 +0200 Subject: [PATCH 3/5] reworked SimpleEffectItem to be a collection of templates adding BlockItem template --- .../api/templates/SimpleEffectItem.java | 31 ------------- .../api/templates/SimpleEffectItems.java | 45 +++++++++++++++++++ 2 files changed, 45 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItem.java create mode 100644 src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java diff --git a/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItem.java b/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItem.java deleted file mode 100644 index 0072e08..0000000 --- a/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItem.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.devdyna.cakesticklib.api.templates; - -import java.util.ArrayList; -import java.util.List; - -import com.devdyna.cakesticklib.api.aspect.logic.EffectItem; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.item.Item; - -public class SimpleEffectItem extends Item implements EffectItem { - - private List effects; - - public SimpleEffectItem(Properties p, List effects) { - super(p); - this.effects = effects; - } - - @Override - public SimpleEffectItem create(Properties p, ArrayList e) { - return new SimpleEffectItem(p, e); - } - - @Override - public List getEffectToolTip() { - return defaultEffectTooltip(effects); - } - -} diff --git a/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java b/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java new file mode 100644 index 0000000..d662641 --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java @@ -0,0 +1,45 @@ +package com.devdyna.cakesticklib.api.templates; + +import java.util.List; + +import com.devdyna.cakesticklib.api.aspect.logic.EffectItem; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.level.block.Block; + +public class SimpleEffectItems { + + public static class Item extends net.minecraft.world.item.Item implements EffectItem { + + private List effects; + + public Item(Properties p, List effects) { + super(p); + this.effects = effects; + } + + @Override + public List getEffectToolTip() { + return defaultEffectTooltip(effects); + } + + } + + public static class BlockItem extends net.minecraft.world.item.BlockItem implements EffectItem { + + private List effects; + + public BlockItem(Block b, Properties p, List effects) { + super(b, p); + this.effects = effects; + } + + @Override + public List getEffectToolTip() { + return defaultEffectTooltip(effects); + } + + } + +} From 54de91353409e7432bbbcd014b0bf3f60b9a6ef0 Mon Sep 17 00:00:00 2001 From: DevDyna Date: Sat, 26 Sep 2026 11:53:40 +0200 Subject: [PATCH 4/5] reworked EffectItem aspect to require EffectItem as generic param and moved builder to the new class --- .../api/aspect/logic/EffectItem.java | 102 +----------------- .../api/templates/SimpleEffectItems.java | 99 ++++++++++++++++- 2 files changed, 99 insertions(+), 102 deletions(-) diff --git a/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java b/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java index 16c1bd8..7e5cad3 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java +++ b/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java @@ -2,114 +2,17 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; - import com.devdyna.cakesticklib.api.utils.ColorUtils; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffectUtil; -import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Item.Properties; -import net.minecraft.world.item.component.Consumable; -import net.minecraft.world.item.consume_effects.ApplyStatusEffectsConsumeEffect; - -public interface EffectItem { - T create(Properties p, ArrayList effects); +public interface EffectItem { List getEffectToolTip(); - /** - * Create an food item with a dedicated tooltip to show mobEffects - */ - static class Builder { - - private final List list = new ArrayList<>(); - private final Properties p; - private final BiFunction, T> factory; - - private FoodProperties food; - - public Builder(Properties p, BiFunction, T> factory) { - this.p = p; - this.factory = factory; - } - - public static Builder of(Properties p, - BiFunction, T> factory) { - return new Builder<>(p, factory); - } - - public Builder(Properties p) { - this(p, (i, l) ->(T) new Item(i)); - } - - public static Builder of(Properties p) { - return new Builder<>(p); - } - - public Builder food(FoodProperties food) { - this.food = food; - return this; - } - - public Builder effect(FoodEffect effect) { - this.list.add(effect); - return this; - } - - public Builder effect(MobEffectInstance... effects) { - return effect(FoodEffect.of(effects)); - } - - public Builder effect(float chance, MobEffectInstance... effects) { - return effect(FoodEffect.of(chance, effects)); - } - - public Builder effect(float chance, List effects) { - return effect(FoodEffect.of(chance, effects)); - } - - public Builder effect(List effects) { - return effect(FoodEffect.of(effects)); - } - - public T build() { - var consumable = Consumable.builder(); - var potions = new ArrayList(); - - for (var effect : list) { - consumable.onConsume(new ApplyStatusEffectsConsumeEffect(effect.effects(), effect.chance())); - potions.addAll(effect.effects()); - } - - return factory.apply(p.food(food, consumable.build()), potions); - } - - public record FoodEffect(float chance, List effects) { - public static final float SUCCESS = 1.0f; - - public static FoodEffect of(float chance, List effects) { - return new FoodEffect(chance, effects); - } - - public static FoodEffect of(MobEffectInstance... effects) { - return of(SUCCESS, effects); - } - - public static FoodEffect of(float chance, MobEffectInstance... effects) { - return of(chance, List.of(effects)); - } - - public static FoodEffect of(List effects) { - return of(SUCCESS, effects); - } - } - } - default List defaultEffectTooltip(List effects) { var list = new ArrayList(); @@ -126,8 +29,7 @@ default List defaultEffectTooltip(List effects) { result.append(" (") .append(MobEffectUtil.formatDuration( - instance, - 1.0F, + instance, 1.0F, Minecraft.getInstance().level .tickRateManager() .tickrate())) diff --git a/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java b/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java index d662641..cad3b4c 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java +++ b/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java @@ -1,16 +1,22 @@ package com.devdyna.cakesticklib.api.templates; +import java.util.ArrayList; import java.util.List; +import java.util.function.BiFunction; import com.devdyna.cakesticklib.api.aspect.logic.EffectItem; import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item.Properties; +import net.minecraft.world.item.component.Consumable; +import net.minecraft.world.item.consume_effects.ApplyStatusEffectsConsumeEffect; import net.minecraft.world.level.block.Block; public class SimpleEffectItems { - public static class Item extends net.minecraft.world.item.Item implements EffectItem { + public static class Item extends net.minecraft.world.item.Item implements EffectItem { private List effects; @@ -26,7 +32,7 @@ public List getEffectToolTip() { } - public static class BlockItem extends net.minecraft.world.item.BlockItem implements EffectItem { + public static class BlockItem extends net.minecraft.world.item.BlockItem implements EffectItem { private List effects; @@ -42,4 +48,93 @@ public List getEffectToolTip() { } + /** + * Create an food item with a dedicated tooltip to show mobEffects + */ + public static class Builder { + + private final List list = new ArrayList<>(); + private final Properties p; + private final BiFunction, T> factory; + + private FoodProperties food; + + private Builder(Properties p, BiFunction, T> factory) { + this.p = p; + this.factory = factory; + } + + public static Builder of(Properties p, + BiFunction, T> factory) { + return new Builder<>(p, factory); + } + + public static Builder item(Properties p) { + return of(p, (i, l) -> (T) new SimpleEffectItems.Item(i, l)); + } + + public static Builder blockItem(Block b, + Properties p) { + return of(p, (i, l) -> (T) new SimpleEffectItems.BlockItem(b, i, l)); + } + + public Builder food(FoodProperties food) { + this.food = food; + return this; + } + + public Builder effect(FoodEffect effect) { + this.list.add(effect); + return this; + } + + public Builder effect(MobEffectInstance... effects) { + return effect(FoodEffect.of(effects)); + } + + public Builder effect(float chance, MobEffectInstance... effects) { + return effect(FoodEffect.of(chance, effects)); + } + + public Builder effect(float chance, List effects) { + return effect(FoodEffect.of(chance, effects)); + } + + public Builder effect(List effects) { + return effect(FoodEffect.of(effects)); + } + + public T build() { + var consumable = Consumable.builder(); + var potions = new ArrayList(); + + for (var effect : list) { + consumable.onConsume(new ApplyStatusEffectsConsumeEffect(effect.effects(), effect.chance())); + potions.addAll(effect.effects()); + } + + return factory.apply(p.food(food, consumable.build()), potions); + } + + public record FoodEffect(float chance, List effects) { + public static final float SUCCESS = 1.0f; + + public static FoodEffect of(float chance, List effects) { + return new FoodEffect(chance, effects); + } + + public static FoodEffect of(MobEffectInstance... effects) { + return of(SUCCESS, effects); + } + + public static FoodEffect of(float chance, MobEffectInstance... effects) { + return of(chance, List.of(effects)); + } + + public static FoodEffect of(List effects) { + return of(SUCCESS, effects); + } + } + } + } From 87fba4e200d6c798eee8a8eeaad6d4f95b8c9720 Mon Sep 17 00:00:00 2001 From: DevDyna Date: Sat, 26 Sep 2026 12:00:21 +0200 Subject: [PATCH 5/5] Update gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e3d0870..dc2c105 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ neo_version=26.1.2.99 mod_id=cakesticklib mod_name=CakeStickLib mod_license=Ora Et Labora License -mod_version=1.17.5 +mod_version=1.17.5-hotfix-1 mod_group_id=com.devdyna.cakestick mod_authors=DevDyna mod_description=A standalone port of JustDynaThings and Synergy API to unify most of the code