diff --git a/gradle.properties b/gradle.properties index e3d0870b..dc2c1053 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 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 ec3e3e4c..7e5cad38 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,106 +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 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(); @@ -111,16 +22,14 @@ 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( - instance, - 1.0F, + instance, 1.0F, Minecraft.getInstance().level .tickRateManager() .tickrate())) 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 4cbcf7bf..00000000 --- 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); - } - -} 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 0072e080..00000000 --- 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 00000000..cad3b4c4 --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItems.java @@ -0,0 +1,140 @@ +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 { + + 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); + } + + } + + /** + * 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); + } + } + } + +}