Start moving pony diet information to data packs

This commit is contained in:
Sollace 2023-11-24 15:43:36 +00:00
parent 094cf2383d
commit d88c0d0755
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
39 changed files with 1261 additions and 169 deletions

View file

@ -117,9 +117,10 @@ public class ZapAppleItem extends Item implements ChameleonItem, ToxicHolder, Mu
return hasAppearance(stack) ? getAppearanceStack(stack).getName() : super.getName(stack); return hasAppearance(stack) ? getAppearanceStack(stack).getName() : super.getName(stack);
} }
@SuppressWarnings("deprecation")
@Override @Override
public Toxic getToxic(ItemStack stack, LivingEntity entity) { public Toxic getToxic(ItemStack stack, LivingEntity entity) {
return hasAppearance(stack) ? Toxics.SEVERE_INNERT : Toxics.FORAGE_EDIBLE; return hasAppearance(stack) ? Toxic.SEVERE_INNERT : Toxics.FORAGE_EDIBLE;
} }
@Override @Override

View file

@ -4,7 +4,6 @@ import java.util.*;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import net.minecraft.client.item.TooltipContext; import net.minecraft.client.item.TooltipContext;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -20,6 +19,7 @@ public record Ailment (
) { ) {
public static final Ailment INNERT = of(Toxicity.SAFE, Toxin.INNERT); public static final Ailment INNERT = of(Toxicity.SAFE, Toxin.INNERT);
@Deprecated
public static Ailment of(Toxicity toxicity, Toxin effect) { public static Ailment of(Toxicity toxicity, Toxin effect) {
return new Ailment(toxicity, effect); return new Ailment(toxicity, effect);
} }

View file

@ -1,11 +1,12 @@
package com.minelittlepony.unicopia.item.toxin; package com.minelittlepony.unicopia.item.toxin;
import static com.minelittlepony.unicopia.item.toxin.Toxicity.FAIR;
import static com.minelittlepony.unicopia.item.toxin.Toxicity.SEVERE;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import net.minecraft.client.item.TooltipContext; import net.minecraft.client.item.TooltipContext;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -20,6 +21,18 @@ public record Toxic (
Function<LivingEntity, Optional<FoodComponent>> food, Function<LivingEntity, Optional<FoodComponent>> food,
Ailment.Set ailment Ailment.Set ailment
) { ) {
public static final Toxic EMPTY = new Toxic(Optional.empty(), entity -> Optional.empty(), Ailment.Set.EMPTY);
/**
* Default for all food that doesn't have a mapping
*/
@Deprecated
public static final Toxic DEFAULT = new Toxic.Builder(Ailment.INNERT)
.with(Race.CHANGELING, new Ailment(FAIR, Toxin.LOVE_SICKNESS))
.with(Race.SEAPONY, new Ailment(FAIR, Toxin.FOOD_POISONING))
.build();
public static final Toxic SEVERE_INNERT = new Builder(new Ailment(SEVERE, Toxin.INNERT)).build();
public void appendTooltip(PlayerEntity player, List<Text> tooltip, TooltipContext context) { public void appendTooltip(PlayerEntity player, List<Text> tooltip, TooltipContext context) {
ailment.get(player).ifPresent(ailment -> ailment.appendTooltip(tooltip, context)); ailment.get(player).ifPresent(ailment -> ailment.appendTooltip(tooltip, context));
} }
@ -31,10 +44,7 @@ public record Toxic (
return stack; return stack;
} }
public static Toxic innert(Toxicity toxicity) { @Deprecated
return new Builder(Ailment.of(toxicity, Toxin.INNERT)).build();
}
public static class Builder { public static class Builder {
private final Ailment def; private final Ailment def;
private final Map<Race, Ailment> overrides = new HashMap<>(); private final Map<Race, Ailment> overrides = new HashMap<>();
@ -66,6 +76,13 @@ public record Toxic (
return this; return this;
} }
public Builder with(Ailment ailment, Race... races) {
for (Race race : races) {
overrides.put(race, ailment);
}
return this;
}
public Toxic build() { public Toxic build() {
return new Toxic(action, entity -> { return new Toxic(action, entity -> {
if (entity instanceof PlayerEntity player) { if (entity instanceof PlayerEntity player) {
@ -74,9 +91,5 @@ public record Toxic (
return component; return component;
}, Ailment.Set.of(def, overrides)); }, Ailment.Set.of(def, overrides));
} }
public Optional<Toxic> buildOptional() {
return Optional.of(build());
}
} }
} }

View file

@ -3,14 +3,13 @@ package com.minelittlepony.unicopia.item.toxin;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.registry.tag.TagKey; import net.minecraft.registry.tag.TagKey;
@Deprecated
public record ToxicRegistryEntry ( public record ToxicRegistryEntry (
Toxic value, Toxic value,
TagKey<Item> tag TagKey<Item> tag
) { ) {
@SuppressWarnings("deprecation")
public boolean matches(Item item) { public boolean matches(Item item) {
return item.getRegistryEntry().isIn(tag); return item.getRegistryEntry().isIn(tag);
} }
} }

View file

@ -1,14 +1,16 @@
package com.minelittlepony.unicopia.item.toxin; package com.minelittlepony.unicopia.item.toxin;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import net.minecraft.util.StringIdentifiable;
public enum Toxicity { public enum Toxicity implements StringIdentifiable {
SAFE(Formatting.GRAY), SAFE(Formatting.GRAY),
MILD(Formatting.DARK_AQUA), MILD(Formatting.DARK_AQUA),
FAIR(Formatting.DARK_BLUE), FAIR(Formatting.DARK_BLUE),
@ -16,8 +18,11 @@ public enum Toxicity {
LETHAL(Formatting.RED); LETHAL(Formatting.RED);
private static final Map<String, Toxicity> REGISTRY = Arrays.stream(values()).collect(Collectors.toMap(Toxicity::name, Function.identity())); private static final Map<String, Toxicity> REGISTRY = Arrays.stream(values()).collect(Collectors.toMap(Toxicity::name, Function.identity()));
@SuppressWarnings("deprecation")
public static final Codec<Toxicity> CODEC = StringIdentifiable.createCodec(Toxicity::values);
private final Formatting color; private final Formatting color;
private final String name = name().toLowerCase(Locale.ROOT);
Toxicity(Formatting color) { Toxicity(Formatting color) {
this.color = color; this.color = color;
@ -34,4 +39,9 @@ public enum Toxicity {
public static Toxicity byName(String name) { public static Toxicity byName(String name) {
return REGISTRY.get(name.toUpperCase()); return REGISTRY.get(name.toUpperCase());
} }
@Override
public String asString() {
return name;
}
} }

View file

@ -11,157 +11,40 @@ import static com.minelittlepony.unicopia.item.toxin.Toxicity.*;
import static com.minelittlepony.unicopia.item.toxin.Ailment.*; import static com.minelittlepony.unicopia.item.toxin.Ailment.*;
import static com.minelittlepony.unicopia.item.toxin.Toxin.*; import static com.minelittlepony.unicopia.item.toxin.Toxin.*;
import java.util.Optional;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@Deprecated
public interface Toxics { public interface Toxics {
Registry<ToxicRegistryEntry> REGISTRY = RegistryUtils.createSimple(Unicopia.id("toxic")); Registry<ToxicRegistryEntry> REGISTRY = RegistryUtils.createSimple(Unicopia.id("toxic"));
Toxic FORAGE_EDIBLE = register("forage_edible", new Toxic.Builder(Ailment.INNERT).food(UFoodComponents.RANDOM_FOLIAGE).with(Race.HUMAN, of(LETHAL, FOOD_POISONING)).with(Race.CHANGELING, of(FAIR, LOVE_SICKNESS)).with(Race.SEAPONY, of(FAIR, FOOD_POISONING)));
Toxic EMPTY = new Toxic(Optional.empty(), entity -> Optional.empty(), Ailment.Set.EMPTY); static void bootstrap() {
register("forage_edible_filling", new Toxic.Builder(Ailment.INNERT).food(UFoodComponents.RANDOM_FOLIAGE_FILLING).with(Race.CHANGELING, of(FAIR, LOVE_SICKNESS)).with(Race.SEAPONY, of(FAIR, FOOD_POISONING)));
Toxic SEVERE_INNERT = Toxic.innert(Toxicity.SEVERE); register("forage_risky", new Toxic.Builder(of(FAIR, FOOD_POISONING.withChance(20))).food(UFoodComponents.RANDOM_FOLIAGE));
register("forage_moderate", new Toxic.Builder(of(MILD, FOOD_POISONING)).food(UFoodComponents.RANDOM_FOLIAGE));
Toxic EDIBLE = register("edible", new Toxic.Builder(Ailment.INNERT) register("forage_dangerous", new Toxic.Builder(of(SEVERE, FOOD_POISONING)).food(UFoodComponents.RANDOM_FOLIAGE));
.with(Race.CHANGELING, of(FAIR, LOVE_SICKNESS)) register("forage_nauseating", new Toxic.Builder(of(SAFE, FOOD_POISONING.and(WEAKNESS.withChance(30)))).food(UFoodComponents.RANDOM_FOLIAGE));
.with(Race.SEAPONY, of(FAIR, FOOD_POISONING)) register("forage_radioactive", new Toxic.Builder(of(SAFE, FOOD_POISONING.and(GLOWING.withChance(30)))).food(UFoodComponents.RANDOM_FOLIAGE));
); register("forage_prickly", new Toxic.Builder(of(SAFE, INSTANT_DAMAGE.withChance(30))).food(UFoodComponents.RANDOM_FOLIAGE).with(Ailment.INNERT, Race.HIPPOGRIFF, Race.KIRIN));
register("forage_strengthening", new Toxic.Builder(of(SEVERE, STRENGTH.and(FOOD_POISONING))).food(UFoodComponents.RANDOM_FOLIAGE).with(Race.KIRIN, Ailment.INNERT));
Toxic FORAGE_EDIBLE = register("forage_edible", new Toxic.Builder(Ailment.INNERT) register("forage_severely_nauseating", new Toxic.Builder(of(SEVERE, FOOD_POISONING.and(WEAKNESS))).food(UFoodComponents.RANDOM_FOLIAGE));
.food(UFoodComponents.RANDOM_FOLIAGE) register("forage_blinding", new Toxic.Builder(of(SEVERE, BLINDNESS.and(FOOD_POISONING))).food(UFoodComponents.RANDOM_FOLIAGE).with(Race.KIRIN, Ailment.INNERT));
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING)) register("forage_severely_prickly", new Toxic.Builder(of(SEVERE, FOOD_POISONING.and(INSTANT_DAMAGE))).food(UFoodComponents.RANDOM_FOLIAGE).with(Race.KIRIN, Ailment.INNERT));
.with(Race.CHANGELING, of(FAIR, LOVE_SICKNESS)) register("raw_meat", new Toxic.Builder(of(SEVERE, FOOD_POISONING.withChance(5).and(CHANCE_OF_POISON))).with(Ailment.INNERT, Race.HUMAN, Race.CHANGELING, Race.KIRIN).with(of(MILD, FOOD_POISONING), Race.BAT));
.with(Race.SEAPONY, of(FAIR, FOOD_POISONING)) register("rotten_meat", new Toxic.Builder(of(SEVERE, STRONG_FOOD_POISONING)).with(Ailment.INNERT, Race.HUMAN, Race.CHANGELING).with(of(MILD, FOOD_POISONING), Race.BAT));
); register("cooked_meat", new Toxic.Builder(of(FAIR, FOOD_POISONING)).with(Ailment.INNERT, Race.HUMAN, Race.CHANGELING, Race.BAT, Race.KIRIN).with(of(MILD, FOOD_POISONING), Race.HIPPOGRIFF));
register("raw_fish", new Toxic.Builder(of(FAIR, FOOD_POISONING.and(CHANCE_OF_POISON))).with(Ailment.INNERT, Race.HUMAN, Race.HIPPOGRIFF, Race.SEAPONY, Race.ALICORN).with(of(MILD, FOOD_POISONING), Race.PEGASUS).with(of(FAIR, LOVE_SICKNESS), Race.CHANGELING));
Toxic FORAGE_EDIBLE_FILLING = register("forage_edible_filling", new Toxic.Builder(Ailment.INNERT) register("cooked_fish", new Toxic.Builder(of(MILD, FOOD_POISONING)).with(Ailment.INNERT, Race.HUMAN, Race.PEGASUS, Race.HIPPOGRIFF, Race.SEAPONY, Race.ALICORN).with(of(FAIR, LOVE_SICKNESS), Race.CHANGELING));
.food(UFoodComponents.RANDOM_FOLIAGE_FILLING) register("raw_insect", new Toxic.Builder(of(LETHAL, FOOD_POISONING)).food(UFoodComponents.INSECTS).with(Ailment.INNERT, Race.CHANGELING).with(of(MILD, WEAK_FOOD_POISONING), Race.BAT));
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING)) register("cooked_insect", new Toxic.Builder(of(LETHAL, FOOD_POISONING)).food(UFoodComponents.INSECTS).with(Ailment.INNERT, Race.CHANGELING, Race.KIRIN, Race.BAT));
.with(Race.CHANGELING, of(FAIR, LOVE_SICKNESS)) register("love", new Toxic.Builder(Ailment.INNERT).with(of(Toxicity.SAFE, Toxin.LOVE_CONSUMPTION), Race.CHANGELING));
); register("bat_ponys_delight", new Toxic.Builder(Ailment.INNERT).with(of(Toxicity.SAFE, Toxin.BAT_PONY_INTOXICATION), Race.BAT));
register("raw_sea_vegitable", new Toxic.Builder(Ailment.INNERT).food(Race.SEAPONY, UFoodComponents.RANDOM_FOLIAGE));
Toxic FORAGE_RISKY = register("forage_risky", new Toxic.Builder(of(FAIR, FOOD_POISONING.withChance(20))) register("cooked_sea_vegitable", new Toxic.Builder(Ailment.INNERT).food(Race.SEAPONY, UFoodComponents.RANDOM_FOLIAGE_FILLING));
.food(UFoodComponents.RANDOM_FOLIAGE) register("shells", new Toxic.Builder(Ailment.INNERT).food(Race.SEAPONY, UFoodComponents.SHELL));
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING)) register("shelly", new Toxic.Builder(Ailment.INNERT).food(Race.SEAPONY, UFoodComponents.SHELLY));
); register("pinecone", new Toxic.Builder(of(Toxicity.SAFE, Toxin.healing(1))).with(Ailment.INNERT, Race.HUMAN).with(of(Toxicity.SAFE, Toxin.healing(3)), Race.HIPPOGRIFF));
Toxic FORAGE_MODERATE = register("forage_moderate", new Toxic.Builder(of(MILD, FOOD_POISONING)) }
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, STRONG_FOOD_POISONING))
);
Toxic FORAGE_DANGEROUS = register("forage_dangerous", new Toxic.Builder(of(SEVERE, FOOD_POISONING))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING))
);
Toxic FORAGE_NAUSEATING = register("forage_nauseating", new Toxic.Builder(of(SAFE, FOOD_POISONING.and(WEAKNESS.withChance(30))))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING))
);
Toxic FORAGE_RADIOACTIVE = register("forage_radioactive", new Toxic.Builder(of(SAFE, FOOD_POISONING.and(GLOWING.withChance(30))))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING))
);
Toxic FORAGE_PRICKLY = register("forage_prickly", new Toxic.Builder(of(SAFE, INSTANT_DAMAGE.withChance(30)))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING))
.with(Race.HIPPOGRIFF, Ailment.INNERT)
.with(Race.KIRIN, Ailment.INNERT)
);
Toxic FORAGE_STRENGHTENING = register("forage_strengthening", new Toxic.Builder(of(SEVERE, STRENGTH.and(FOOD_POISONING)))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING.and(WEAKNESS)))
.with(Race.KIRIN, Ailment.INNERT)
);
Toxic FORAGE_SEVERELY_NAUSEATING = register("forage_severely_nauseating", new Toxic.Builder(of(SEVERE, FOOD_POISONING.and(WEAKNESS)))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING.and(WEAKNESS)))
);
Toxic FORAGE_BLINDING = register("forage_blinding", new Toxic.Builder(of(SEVERE, BLINDNESS.and(FOOD_POISONING)))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING))
.with(Race.KIRIN, Ailment.INNERT)
);
Toxic FORAGE_SEVERELY_PRICKLY = register("forage_severely_prickly", new Toxic.Builder(of(SEVERE, FOOD_POISONING.and(INSTANT_DAMAGE)))
.food(UFoodComponents.RANDOM_FOLIAGE)
.with(Race.HUMAN, of(LETHAL, FOOD_POISONING))
.with(Race.KIRIN, Ailment.INNERT)
);
Toxic RAW_MEAT = register("raw_meat", new Toxic.Builder(of(SEVERE, FOOD_POISONING.withChance(5).and(CHANCE_OF_POISON)))
.with(Race.HUMAN, Ailment.INNERT)
.with(Race.CHANGELING, Ailment.INNERT)
.with(Race.BAT, of(MILD, FOOD_POISONING))
.with(Race.KIRIN, Ailment.INNERT)
);
Toxic ROTTEN_MEAT = register("rotten_meat", new Toxic.Builder(of(SEVERE, STRONG_FOOD_POISONING))
.with(Race.HUMAN, Ailment.INNERT)
.with(Race.BAT, of(MILD, FOOD_POISONING))
.with(Race.CHANGELING, Ailment.INNERT)
);
Toxic COOKED_MEAT = register("cooked_meat", new Toxic.Builder(of(FAIR, FOOD_POISONING))
.with(Race.HUMAN, Ailment.INNERT)
.with(Race.CHANGELING, Ailment.INNERT)
.with(Race.HIPPOGRIFF, of(MILD, FOOD_POISONING))
.with(Race.BAT, Ailment.INNERT)
.with(Race.KIRIN, Ailment.INNERT)
);
Toxic RAW_FISH = register("raw_fish", new Toxic.Builder(of(FAIR, FOOD_POISONING.and(CHANCE_OF_POISON)))
.with(Race.HUMAN, Ailment.INNERT)
.with(Race.PEGASUS, of(MILD, FOOD_POISONING))
.with(Race.HIPPOGRIFF, Ailment.INNERT)
.with(Race.SEAPONY, Ailment.INNERT)
.with(Race.ALICORN, Ailment.INNERT)
.with(Race.CHANGELING, of(FAIR, LOVE_SICKNESS))
);
Toxic COOKED_FISH = register("cooked_fish", new Toxic.Builder(of(MILD, FOOD_POISONING))
.with(Race.HUMAN, Ailment.INNERT)
.with(Race.PEGASUS, Ailment.INNERT)
.with(Race.HIPPOGRIFF, Ailment.INNERT)
.with(Race.SEAPONY, Ailment.INNERT)
.with(Race.ALICORN, Ailment.INNERT)
.with(Race.CHANGELING, of(FAIR, LOVE_SICKNESS))
);
Toxic RAW_INSECT = register("raw_insect", new Toxic.Builder(of(LETHAL, FOOD_POISONING))
.with(Race.BAT, of(MILD, WEAK_FOOD_POISONING))
.with(Race.CHANGELING, Ailment.INNERT)
);
Toxic COOKED_INSECT = register("cooked_insect", new Toxic.Builder(of(LETHAL, FOOD_POISONING))
.food(UFoodComponents.INSECTS)
.with(Race.CHANGELING, Ailment.INNERT)
.with(Race.KIRIN, Ailment.INNERT)
.with(Race.BAT, Ailment.INNERT)
);
Toxic LOVE = register("love", new Toxic.Builder(Ailment.INNERT)
.with(Race.CHANGELING, of(Toxicity.SAFE, Toxin.LOVE_CONSUMPTION))
);
Toxic PINECONE = register("pinecone", new Toxic.Builder(of(Toxicity.SAFE, Toxin.healing(1)))
.with(Race.HUMAN, Ailment.INNERT)
.with(Race.HIPPOGRIFF, of(Toxicity.SAFE, Toxin.healing(3)))
);
Toxic BAT_PONYS_DELIGHT = register("bat_ponys_delight", new Toxic.Builder(Ailment.INNERT)
.with(Race.BAT, of(Toxicity.SAFE, Toxin.BAT_PONY_INTOXICATION))
);
Toxic RAW_SEA_VEGITABLES = register("raw_sea_vegitable", new Toxic.Builder(Ailment.INNERT)
.food(Race.SEAPONY, UFoodComponents.RANDOM_FOLIAGE)
);
Toxic COOKED_SEA_VEGITABLES = register("cooked_sea_vegitable", new Toxic.Builder(Ailment.INNERT)
.food(Race.SEAPONY, UFoodComponents.RANDOM_FOLIAGE_FILLING)
);
Toxic SHELLS = register("shells", new Toxic.Builder(Ailment.INNERT)
.food(Race.SEAPONY, UFoodComponents.SHELL)
);
Toxic SHELLY = register("shelly", new Toxic.Builder(Ailment.INNERT)
.food(Race.SEAPONY, UFoodComponents.SHELLY)
);
static void bootstrap() {}
static Toxic register(String name, Toxic.Builder builder) { static Toxic register(String name, Toxic.Builder builder) {
return Registry.register(REGISTRY, Unicopia.id(name), new ToxicRegistryEntry(builder.build(), UTags.item("food_types/" + name))).value(); return Registry.register(REGISTRY, Unicopia.id(name), new ToxicRegistryEntry(builder.build(), UTags.item("food_types/" + name))).value();
@ -177,6 +60,6 @@ public interface Toxics {
t.food().apply(entity).ifPresent(item::setFoodComponent); t.food().apply(entity).ifPresent(item::setFoodComponent);
} }
return t; return t;
}).findFirst().orElse(food == null ? Toxics.EMPTY : Toxics.EDIBLE); }).findFirst().orElse(food == null ? Toxic.EMPTY : Toxic.DEFAULT);
} }
} }

View file

@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.item.toxin;
import java.util.List; import java.util.List;
import com.minelittlepony.unicopia.entity.effect.UEffects; import com.minelittlepony.unicopia.entity.effect.UEffects;
import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffectInstance;
@ -15,41 +14,48 @@ import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.StringHelper; import net.minecraft.util.StringHelper;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Difficulty;
public interface Toxin extends Affliction { public interface Toxin extends Affliction {
Predicate IF_NOT_PEACEFUL = Predicate.of(Text.of("when not in peaceful "), (player, stack) -> player.getWorld().getDifficulty() != Difficulty.PEACEFUL);
Toxin INNERT = of(Text.of("No Effect"), (player, stack) -> {}); Toxin INNERT = of(Text.of("No Effect"), (player, stack) -> {});
@Deprecated
Toxin INSTANT_DAMAGE = of(StatusEffects.INSTANT_DAMAGE, 1, 0); Toxin INSTANT_DAMAGE = of(StatusEffects.INSTANT_DAMAGE, 1, 0);
@Deprecated
Toxin GLOWING = of(StatusEffects.GLOWING, 15, 0); Toxin GLOWING = of(StatusEffects.GLOWING, 15, 0);
@Deprecated
Toxin WEAKNESS = of(StatusEffects.WEAKNESS, 200, 1); Toxin WEAKNESS = of(StatusEffects.WEAKNESS, 200, 1);
@Deprecated
Toxin STRENGTH = of(StatusEffects.STRENGTH, 30, 0); Toxin STRENGTH = of(StatusEffects.STRENGTH, 30, 0);
@Deprecated
Toxin BLINDNESS = of(StatusEffects.BLINDNESS, 30, 0); Toxin BLINDNESS = of(StatusEffects.BLINDNESS, 30, 0);
@Deprecated
Toxin CHANCE_OF_POISON = of(StatusEffects.POISON, 45, 2).withChance(80); Toxin CHANCE_OF_POISON = of(StatusEffects.POISON, 45, 2).withChance(80);
@Deprecated
Toxin FOOD_POISONING = of(UEffects.FOOD_POISONING, 100, 2); Toxin FOOD_POISONING = of(UEffects.FOOD_POISONING, 100, 2);
@Deprecated
Toxin WEAK_FOOD_POISONING = of(UEffects.FOOD_POISONING, 50, 1); Toxin WEAK_FOOD_POISONING = of(UEffects.FOOD_POISONING, 50, 1);
@Deprecated
Toxin STRONG_FOOD_POISONING = of(UEffects.FOOD_POISONING, 400, 3); Toxin STRONG_FOOD_POISONING = of(UEffects.FOOD_POISONING, 400, 3);
@Deprecated
Toxin LOVE_SICKNESS = of(Text.of("Love Sickness "), (player, stack) -> { Toxin LOVE_SICKNESS = of(Text.of("Love Sickness "), (player, stack) -> {
FoodComponent food = stack.getItem().getFoodComponent(); FoodComponent food = stack.getItem().getFoodComponent();
player.getHungerManager().add(-food.getHunger()/2, -food.getSaturationModifier()/2); player.getHungerManager().add(-food.getHunger()/2, -food.getSaturationModifier()/2);
}).and(FOOD_POISONING).and(IF_NOT_PEACEFUL.then(WEAK_FOOD_POISONING.withChance(20))).and(WEAKNESS); }).and(FOOD_POISONING).and(WEAKNESS);
@Deprecated
Toxin LOVE_CONSUMPTION = of(Text.literal("Love"), (player, stack) -> { Toxin LOVE_CONSUMPTION = of(Text.literal("Love"), (player, stack) -> {
player.heal(stack.isFood() ? stack.getItem().getFoodComponent().getHunger() : 1); player.heal(stack.isFood() ? stack.getItem().getFoodComponent().getHunger() : 1);
player.removeStatusEffect(StatusEffects.NAUSEA); player.removeStatusEffect(StatusEffects.NAUSEA);
player.removeStatusEffect(UEffects.FOOD_POISONING); player.removeStatusEffect(UEffects.FOOD_POISONING);
}); });
@Deprecated
Toxin BAT_PONY_INTOXICATION = Toxin.of(StatusEffects.HEALTH_BOOST, 30, 60, 2, 6) Toxin BAT_PONY_INTOXICATION = Toxin.of(StatusEffects.HEALTH_BOOST, 30, 60, 2, 6)
.and(Toxin.of(StatusEffects.JUMP_BOOST, 30, 60, 1, 6)) .and(Toxin.of(StatusEffects.JUMP_BOOST, 30, 60, 1, 6))
.and(Toxin.of(StatusEffects.SPEED, 30, 30, 1, 6)) .and(Toxin.of(StatusEffects.SPEED, 30, 30, 1, 6))
.and(Toxin.of(StatusEffects.REGENERATION, 3, 30, 3, 6)); .and(Toxin.of(StatusEffects.REGENERATION, 3, 30, 3, 6));
@Deprecated
static Toxin healing(int hearts) { static Toxin healing(int hearts) {
return of(Text.literal("Healing " + hearts + " Hearts"), (player, stack) -> player.heal(hearts)); return of(Text.literal("Healing " + hearts + " Hearts"), (player, stack) -> player.heal(hearts));
} }
@ -58,12 +64,14 @@ public interface Toxin extends Affliction {
tooltip.add(getName()); tooltip.add(getName());
} }
@Deprecated
default Toxin withChance(int max) { default Toxin withChance(int max) {
return Predicate.of(Text.of("1 in " + max + " chance of "), (player, stack) -> player.getWorld().random.nextInt(max) == 0).then(this); return Predicate.of(Text.of("1 in " + max + " chance of "), (player, stack) -> player.getWorld().random.nextInt(max) == 0).then(this);
} }
Text getName(); Text getName();
@Deprecated
default Toxin and(Toxin other) { default Toxin and(Toxin other) {
Toxin self = this; Toxin self = this;
return new Toxin() { return new Toxin() {
@ -86,6 +94,7 @@ public interface Toxin extends Affliction {
}; };
} }
@Deprecated
static Toxin of(Text name, Affliction affliction) { static Toxin of(Text name, Affliction affliction) {
return new Toxin() { return new Toxin() {
@Override @Override
@ -100,6 +109,7 @@ public interface Toxin extends Affliction {
}; };
} }
@Deprecated
static Toxin of(StatusEffect effect, int seconds, int amplifier) { static Toxin of(StatusEffect effect, int seconds, int amplifier) {
return of(effect, seconds, -1, amplifier, -1); return of(effect, seconds, -1, amplifier, -1);
} }

View file

@ -23,7 +23,9 @@ public interface UFoodComponents {
FoodComponent JUICE = builder(2, 1.8F).alwaysEdible().build(); FoodComponent JUICE = builder(2, 1.8F).alwaysEdible().build();
FoodComponent BURNED_JUICE = builder(3, 1).build(); FoodComponent BURNED_JUICE = builder(3, 1).build();
@Deprecated
FoodComponent RANDOM_FOLIAGE = builder(2, 1).build(); FoodComponent RANDOM_FOLIAGE = builder(2, 1).build();
@Deprecated
FoodComponent RANDOM_FOLIAGE_FILLING = builder(18, 1).build(); FoodComponent RANDOM_FOLIAGE_FILLING = builder(18, 1).build();
FoodComponent WORMS = builder(1, 1.5F).alwaysEdible().meat().build(); FoodComponent WORMS = builder(1, 1.5F).alwaysEdible().meat().build();
FoodComponent INSECTS = builder(1, 0).alwaysEdible().build(); FoodComponent INSECTS = builder(1, 0).alwaysEdible().build();
@ -51,7 +53,9 @@ public interface UFoodComponents {
FoodComponent CANDY = builder(7, 0.9F).alwaysEdible().build(); FoodComponent CANDY = builder(7, 0.9F).alwaysEdible().build();
FoodComponent SALT_CUBE = builder(0, 2.9F).alwaysEdible().build(); FoodComponent SALT_CUBE = builder(0, 2.9F).alwaysEdible().build();
@Deprecated
FoodComponent SHELL = builder(3, 5).build(); FoodComponent SHELL = builder(3, 5).build();
@Deprecated
FoodComponent SHELLY = builder(6, 7).build(); FoodComponent SHELLY = builder(6, 7).build();
static FoodComponent.Builder builder(int hunger, float saturation) { static FoodComponent.Builder builder(int hunger, float saturation) {

View file

@ -0,0 +1,65 @@
{
"default_multiplier": 0.8,
"foraging_multiplier": 1,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_fish"
],
"hunger": 1.5,
"saturation": 1.5
},
{
"tags": [
"unicopia:food_types/raw_fish"
],
"hunger": 0.5,
"saturation": 0.6
},
{
"tags": [
"unicopia:food_types/cooked_insect",
"unicopia:food_types/cooked_meat"
],
"hunger": 0.1,
"saturation": 0.1
},
{
"tags": [
"unicopia:food_types/love",
"unicopia:food_types/raw_insect",
"unicopia:food_types/raw_meat",
"unicopia:food_types/rotten_meat"
],
"hunger": 0,
"saturation": 0
},
{
"tags": [
"unicopia:food_types/pinecone"
],
"hunger": 0.9,
"saturation": 0.9
}
],
"effects": [
{
"tag": "unicopia:food_types/cooked_fish",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/raw_fish",
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
}
]
}

View file

@ -0,0 +1,153 @@
{
"default_multiplier": 0.5,
"foraging_multiplier": 0.9,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_fish"
],
"hunger": 0.75,
"saturation": 0.75
},
{
"tags": [
"unicopia:food_types/raw_fish"
],
"hunger": 0.5,
"saturation": 0.6
},
{
"tags": [
"unicopia:food_types/cooked_insect"
],
"hunger": 1.75,
"saturation": 1.75
},
{
"tags": [
"unicopia:food_types/cooked_meat"
],
"hunger": 1.15,
"saturation": 1.15
},
{
"tags": [
"unicopia:food_types/raw_insect"
],
"hunger": 1,
"saturation": 1
},
{
"tags": [
"unicopia:food_types/raw_meat"
],
"hunger": 0.25,
"saturation": 0.25
},
{
"tags": [
"unicopia:food_types/rotten_meat"
],
"hunger": 0.2,
"saturation": 0.2
},
{
"tags": [
"unicopia:food_types/love"
],
"hunger": 0,
"saturation": 0
},
{
"tags": [
"unicopia:food_types/pinecone"
],
"hunger": 0.9,
"saturation": 0.9
}
],
"effects": [
{
"tag": "unicopia:food_types/rotten_fish",
"ailment": {
"toxicity": "mild",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2,
"chance": 5
}
]
}
},
{
"tags": [
"unicopia:food_types/cooked_insect",
"unicopia:food_types/cooked_meat"
],
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/raw_insect",
"ailment": {
"toxicity": "mild",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 50,
"amplifier": 1
}
]
}
},
{
"tags": [
"unicopia:food_types/raw_meat",
"unicopia:food_types/rotten_meat"
],
"ailment": {
"toxicity": "risky",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2,
"chance": 5
}
]
}
},
{
"tag": "unicopia:food_types/bat_ponys_delight",
"ailment": {
"toxicity": "safe",
"effects": [
{
"effect": "minecraft:health_boost",
"seconds": { "min": 30, "max": 60 },
"amplifier": { "min": 2, "max": 6 }
},
{
"effect": "minecraft:jump_boost",
"seconds": { "min": 30, "max": 60 },
"amplifier": { "min": 1, "max": 6 }
},
{
"effect": "minecraft:health_boost",
"seconds": 30,
"amplifier": { "min": 1, "max": 6 }
},
{
"effect": "minecraft:regeneration",
"seconds": { "min": 3, "max": 30 },
"amplifier": { "min": 3, "max": 6 }
}
]
}
}
]
}

View file

@ -0,0 +1,151 @@
{
"default_multiplier": 0.15,
"foraging_multiplier": 0,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_insect"
],
"hunger": 0.3,
"saturation": 0.3
},
{
"tags": [
"unicopia:food_types/cooked_meat"
],
"hunger": 0.1,
"saturation": 0.1
},
{
"tags": [
"unicopia:food_types/raw_insect"
],
"hunger": 1,
"saturation": 1
},
{
"tags": [
"unicopia:food_types/raw_meat"
],
"hunger": 0.25,
"saturation": 0.25
},
{
"tags": [
"unicopia:food_types/rotten_meat"
],
"hunger": 0.6,
"saturation": 0.6
},
{
"tags": [
"unicopia:food_types/love"
],
"hunger": 1,
"saturation": 1
}
],
"default_effects": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
},
{
"effect": "minecraft:weakness",
"seconds": 200,
"amplifier": 1
},
{
"type": "unicopia:multiply_hunger",
"multiplier": 0.5
}
]
},
"effects": [
{
"tags": [
"unicopia:food_types/love"
],
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [
{
"name": "Love Consumption",
"type": "unicopia:clear_love_sickness"
}
]
}
},
{
"tags": [
"unicopia:food_types/cooked_fish",
"unicopia:food_types/raw_fish"
],
"ailment": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 50,
"amplifier": 2
},
{
"name": "unicopia.affliction.love_sickness",
"type": "unicopia:multiply_hunger",
"multiplier": 0.5
}
]
}
},
{
"tags": [
"unicopia:food_types/rotten_fish",
"unicopia:food_types/cooked_insect",
"unicopia:food_types/raw_insect",
"unicopia:food_types/cooked_meat",
"unicopia:food_types/raw_meat",
"unicopia:food_types/rotten_meat"
],
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tags": [
"unicopia:food_types/forage_edible",
"unicopia:food_types/forage_edible_filling",
],
"food_component": {
"hunger": 18,
"saturation": 9
},
"ailment": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
},
{
"effect": "minecraft:weakness",
"seconds": 200,
"amplifier": 1
},
{
"type": "unicopia:multiply_hunger",
"multiplier": 0.5
}
]
}
}
]
}

View file

@ -0,0 +1,39 @@
{
"default_multiplier": 0.3,
"foraging_multiplier": 1,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_fish"
],
"hunger": 0.2,
"saturation": 0.2
},
{
"tags": [
"unicopia:food_types/cooked_insect",
"unicopia:food_types/cooked_meat"
],
"hunger": 0.1,
"saturation": 0.1
},
{
"tags": [
"unicopia:food_types/love",
"unicopia:food_types/raw_fish",
"unicopia:food_types/raw_insect",
"unicopia:food_types/raw_meat",
"unicopia:food_types/rotten_meat"
],
"hunger": 0,
"saturation": 0
},
{
"tags": [
"unicopia:food_types/pinecone"
],
"hunger": 1,
"saturation": 1
}
]
}

View file

@ -0,0 +1,13 @@
{
"tag": "unicopia:food_types/cooked_fish",
"ailment": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,19 @@
{
"tag": "unicopia:food_types/raw_fish",
"ailment": {
"toxicity": "risky",
"effects": [
{
"effect": "minecraft:poison",
"seconds": 45,
"amplifier": 2,
"chance": 80
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,20 @@
{
"tag": "unicopia:food_types/rotten_fish",
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "minecraft:poison",
"seconds": 45,
"amplifier": 2,
"chance": 80
},
{
"effect": "unicopia:food_poisoning",
"seconds": 400,
"amplifier": 3,
"chance": 5
}
]
}
}

View file

@ -0,0 +1,22 @@
{
"tag": "unicopia:food_types/forage_blinding",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "minecraft:blindness",
"seconds": 30,
"amplifier": 0
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,18 @@
{
"tag": "unicopia:food_types/forage_dangerous",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "mild",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 250,
"amplifier": 2,
"chance": 4
}
]
}
}

View file

@ -0,0 +1,11 @@
{
"tag": "unicopia:food_types/forage_edible",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": []
}
}

View file

@ -0,0 +1,11 @@
{
"tag": "unicopia:food_types/forage_edible_filling",
"food_component": {
"hunger": 18,
"saturation": 9
},
"ailment": {
"toxicity": "safe",
"effects": []
}
}

View file

@ -0,0 +1,18 @@
{
"tag": "unicopia:food_types/forage_moderate",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "mild",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2,
"chance": 40
}
]
}
}

View file

@ -0,0 +1,23 @@
{
"tag": "unicopia:food_types/forage_nauseating",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "minecraft:weakness",
"seconds": 200,
"amplifier": 1,
"chance": 30
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,18 @@
{
"tag": "unicopia:food_types/forage_prickly",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [
{
"effect": "minecraft:instant_damage",
"seconds": 1,
"amplifier": 0,
"chance": 30
}
]
}
}

View file

@ -0,0 +1,23 @@
{
"tag": "unicopia:food_types/forage_radioactive",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "minecraft:glowing",
"seconds": 15,
"amplifier": 0,
"chance": 30
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,18 @@
{
"tag": "unicopia:food_types/forage_risky",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2,
"chance": 80
}
]
}
}

View file

@ -0,0 +1,22 @@
{
"tag": "unicopia:food_types/forage_severely_nauseating",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "minecraft:weakness",
"seconds": 200,
"amplifier": 1
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,22 @@
{
"tag": "unicopia:food_types/forage_severely_prickly",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "minecraft:instant_damage",
"seconds": 1,
"amplifier": 0
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,23 @@
{
"tag": "unicopia:food_types/forage_strengthening",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [
{
"effect": "minecraft:strength",
"seconds": 30,
"amplifier": 0
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2,
"chance": 10
}
]
}
}

View file

@ -0,0 +1,13 @@
{
"tag": "unicopia:food_types/cooked_insect",
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,13 @@
{
"tag": "unicopia:food_types/raw_insect",
"ailment": {
"toxicity": "lethal",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,13 @@
{
"tag": "unicopia:food_types/cooked_meat",
"ailment": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
}

View file

@ -0,0 +1,20 @@
{
"tag": "unicopia:food_types/raw_meat",
"ailment": {
"toxicity": "risky",
"effects": [
{
"effect": "minecraft:poison",
"seconds": 45,
"amplifier": 2,
"chance": 80
},
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2,
"chance": 5
}
]
}
}

View file

@ -0,0 +1,20 @@
{
"tag": "unicopia:food_types/rotten_meat",
"ailment": {
"toxicity": "severe",
"effects": [
{
"effect": "minecraft:poison",
"seconds": 45,
"amplifier": 2,
"chance": 80
},
{
"effect": "unicopia:food_poisoning",
"seconds": 400,
"amplifier": 3,
"chance": 5
}
]
}
}

View file

@ -0,0 +1,12 @@
{
"tag": "unicopia:food_types/pinecone",
"ailment": {
"toxicity": "safe",
"effects": [
{
"type": "unicopia:healing",
"health": 1
}
]
}
}

View file

@ -0,0 +1,91 @@
{
"default_multiplier": 0.3,
"foraging_multiplier": 0.8,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_meat",
"unicopia:food_types/cooked_fish"
],
"hunger": 1.6,
"saturation": 1.6
},
{
"tags": [
"unicopia:food_types/raw_meat",
"unicopia:food_types/raw_fish"
],
"hunger": 0.6,
"saturation": 0.6
},
{
"tags": [
"unicopia:food_types/rotten_meat"
],
"hunger": 0.3,
"saturation": 0.3
},
{
"tags": [
"unicopia:food_types/love",
"unicopia:food_types/raw_insect",
"unicopia:food_types/cooked_insect"
],
"hunger": 0,
"saturation": 0
},
{
"tags": [
"unicopia:food_types/pinecone"
],
"hunger": 1,
"saturation": 1
}
],
"effects": [
{
"tag": "unicopia:food_types/cooked_fish",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/raw_fish",
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tags": [
"unicopia:food_types/forage_prickly",
"unicopia:food_types/forage_severely_prickly"
],
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/pinecone",
"ailment": {
"toxicity": "safe",
"effects": [
{
"type": "unicopia:healing",
"health": 3
}
]
}
}
]
}

View file

@ -0,0 +1,22 @@
{
"default_multiplier": 1,
"foraging_multiplier": 0,
"multipliers": [ ],
"effects": [
{
"tags": [
"unicopia:food_types/cooked_fish",
"unicopia:food_types/raw_fish",
"unicopia:food_types/rotten_fish",
"unicopia:food_types/cooked_meat",
"unicopia:food_types/raw_meat",
"unicopia:food_types/rotten_meat",
"unicopia:food_types/pinecone"
],
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
}
]
}

View file

@ -0,0 +1,68 @@
{
"default_multiplier": 0,
"foraging_multiplier": 0.9,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_meat"
],
"hunger": 1.5,
"saturation": 1.5
},
{
"tags": [
"unicopia:food_types/raw_meat"
],
"hunger": 0.5,
"saturation": 0.6
},
{
"tags": [
"unicopia:food_types/cooked_insect",
"unicopia:food_types/cooked_fish"
],
"hunger": 0.1,
"saturation": 0.1
},
{
"tags": [
"unicopia:food_types/love",
"unicopia:food_types/raw_insect",
"unicopia:food_types/raw_fish",
"unicopia:food_types/rotten_meat"
],
"hunger": 0,
"saturation": 0
},
{
"tags": [
"unicopia:food_types/pinecone"
],
"hunger": 0.9,
"saturation": 0.9
}
],
"effects": [
{
"tags": [
"unicopia:food_types/rotten_fish",
"unicopia:food_types/cooked_insect",
"unicopia:food_types/cooked_meat",
"unicopia:food_types/raw_meat",
"unicopia:food_types/rotten_meat",
"unicopia:food_types/forage_blinding",
"unicopia:food_types/forage_prickly",
"unicopia:food_types/forage_severely_prickly",
"unicopia:food_types/forage_strengthening"
],
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
}
]
}

View file

@ -0,0 +1,67 @@
{
"default_multiplier": 0,
"foraging_multiplier": 1,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_fish"
],
"hunger": 1.5,
"saturation": 1.5
},
{
"tags": [
"unicopia:food_types/raw_fish"
],
"hunger": 0.5,
"saturation": 0.6
},
{
"tags": [
"unicopia:food_types/cooked_insect",
"unicopia:food_types/cooked_meat"
],
"hunger": 0.1,
"saturation": 0.1
},
{
"tags": [
"unicopia:food_types/love",
"unicopia:food_types/raw_insect",
"unicopia:food_types/raw_meat",
"unicopia:food_types/rotten_meat"
],
"hunger": 0,
"saturation": 0
},
{
"tags": [
"unicopia:food_types/pinecone"
],
"hunger": 0.9,
"saturation": 0.9
}
],
"effects": [
{
"tag": "unicopia:food_types/cooked_fish",
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/raw_fish",
"ailment": {
"toxicity": "mild",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 50,
"amplifier": 2
}
]
}
}
]
}

View file

@ -0,0 +1,111 @@
{
"default_multiplier": 0.5,
"foraging_multiplier": 0.7,
"multipliers": [
{
"tags": [
"unicopia:food_types/raw_sea_vegitable"
],
"hunger": 1,
"saturation": 1
},
{
"tags": [
"unicopia:food_types/shells",
"unicopia:food_types/shelly"
],
"hunger": 1,
"saturation": 1
}
],
"default_effects": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
},
"effects": [
{
"tag": "unicopia:food_types/cooked_fish",
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/raw_fish",
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tags": [
"unicopia:food_types/forage_edible",
"unicopia:food_types/forage_edible_filling",
],
"food_component": {
"hunger": 18,
"saturation": 9
},
"ailment": {
"toxicity": "fair",
"effects": [
{
"effect": "unicopia:food_poisoning",
"seconds": 100,
"amplifier": 2
}
]
}
},
{
"tag": "unicopia:food_types/raw_sea_vegitable",
"food_component": {
"hunger": 2,
"saturation": 1
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/cooked_sea_vegitable",
"food_component": {
"hunger": 6,
"saturation": 2
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/shells",
"food_component": {
"hunger": 3,
"saturation": 5
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
},
{
"tag": "unicopia:food_types/shelly",
"food_component": {
"hunger": 6,
"saturation": 7
},
"ailment": {
"toxicity": "safe",
"effects": [ ]
}
}
]
}

View file

@ -0,0 +1,33 @@
{
"default_multiplier": 0.7,
"foraging_multiplier": 1,
"multipliers": [
{
"tags": [
"unicopia:food_types/cooked_insect",
"unicopia:food_types/cooked_meat",
"unicopia:food_types/cooked_fish"
],
"hunger": 0.1,
"saturation": 0.1
},
{
"tags": [
"unicopia:food_types/love",
"unicopia:food_types/raw_insect",
"unicopia:food_types/raw_meat",
"unicopia:food_types/raw_fish",
"unicopia:food_types/rotten_meat"
],
"hunger": 0,
"saturation": 0
},
{
"tags": [
"unicopia:food_types/pinecone"
],
"hunger": 0.9,
"saturation": 0.9
}
]
}