diff --git a/gradle.properties b/gradle.properties index 6efd90ee..e3d0870b 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.4-hotfix1 +mod_version=1.17.5 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/generated/resources/assets/cakesticklib/lang/en_us.json b/src/generated/resources/assets/cakesticklib/lang/en_us.json index f5b74ff8..8715ae13 100644 --- a/src/generated/resources/assets/cakesticklib/lang/en_us.json +++ b/src/generated/resources/assets/cakesticklib/lang/en_us.json @@ -95,7 +95,7 @@ "cakesticklib.jei.alias.tree.cutter": "Tree cutter", "cakesticklib.jei.alias.tree.feller": "Tree feller", "cakesticklib.jei.copper_oxidation": "Copper Oxidation Info", - "cakesticklib.jei.patina_drop": "§7Drop %s§7 items every scrape", + "cakesticklib.jei.patina_drop": "§7Drop §f0-2§7 items every scrape", "cakesticklib.jei.recipe.durability_consume": "Consume %s durability", "cakesticklib.jei.recipe.item_replace.remainder": "Replaced with %s", "cakesticklib.jei.strippable": "Block Strippable Info", diff --git a/src/generated/resources/data/c/tags/item/variants/andesite/plain.json b/src/generated/resources/data/c/tags/item/variants/andesite/plain.json new file mode 100644 index 00000000..8a492804 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/andesite/plain.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:andesite", + "minecraft:andesite_slab", + "minecraft:andesite_stairs", + "minecraft:andesite_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/variants/deepslate/cobbled.json b/src/generated/resources/data/c/tags/item/variants/deepslate/cobbled.json new file mode 100644 index 00000000..a43c2a4a --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/deepslate/cobbled.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:cobbled_deepslate", + "minecraft:cobbled_deepslate_slab", + "minecraft:cobbled_deepslate_stairs", + "minecraft:cobbled_deepslate_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/variants/deepslate/plain.json b/src/generated/resources/data/c/tags/item/variants/deepslate/plain.json new file mode 100644 index 00000000..0012c241 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/deepslate/plain.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:deepslate" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/variants/diorite/plain.json b/src/generated/resources/data/c/tags/item/variants/diorite/plain.json new file mode 100644 index 00000000..965b7d2d --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/diorite/plain.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:diorite", + "minecraft:diorite_slab", + "minecraft:diorite_stairs", + "minecraft:diorite_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/variants/granite/plain.json b/src/generated/resources/data/c/tags/item/variants/granite/plain.json new file mode 100644 index 00000000..4d07834a --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/granite/plain.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:granite", + "minecraft:granite_slab", + "minecraft:granite_stairs", + "minecraft:granite_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/variants/stone/cobbled.json b/src/generated/resources/data/c/tags/item/variants/stone/cobbled.json new file mode 100644 index 00000000..1523ad3f --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/stone/cobbled.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:cobblestone", + "minecraft:cobblestone_slab", + "minecraft:cobblestone_stairs", + "minecraft:cobblestone_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/variants/stone/plain.json b/src/generated/resources/data/c/tags/item/variants/stone/plain.json new file mode 100644 index 00000000..e5e8b299 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/stone/plain.json @@ -0,0 +1,7 @@ +{ + "values": [ + "minecraft:stone", + "minecraft:stone_slab", + "minecraft:stone_stairs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/variants/tuff/plain.json b/src/generated/resources/data/c/tags/item/variants/tuff/plain.json new file mode 100644 index 00000000..754877e1 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/variants/tuff/plain.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:tuff", + "minecraft:tuff_slab", + "minecraft:tuff_stairs", + "minecraft:tuff_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/jei_modifier/patina.json b/src/generated/resources/data/cakesticklib/advancement/recipes/misc/jei_modifier/patina.json new file mode 100644 index 00000000..7dae2d50 --- /dev/null +++ b/src/generated/resources/data/cakesticklib/advancement/recipes/misc/jei_modifier/patina.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "cakesticklib:jei_modifier/patina" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "patina": { + "conditions": { + "items": [ + { + "items": "cakesticklib:patina" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "patina" + ] + ], + "rewards": { + "recipes": [ + "cakesticklib:jei_modifier/patina" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/recipe/durability_use/ghast_tear.json b/src/generated/resources/data/cakesticklib/recipe/durability_use/ghast_tear.json index 791fbebb..fee4383e 100644 --- a/src/generated/resources/data/cakesticklib/recipe/durability_use/ghast_tear.json +++ b/src/generated/resources/data/cakesticklib/recipe/durability_use/ghast_tear.json @@ -5,7 +5,7 @@ ], "mode": { "damage": 12, - "tool": "minecraft:shears" + "tool": "#c:tools/shear" }, "result": { "count": 4, diff --git a/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool.json b/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool.json index cf67dbeb..4ebd89f0 100644 --- a/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool.json +++ b/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool.json @@ -5,7 +5,7 @@ ], "mode": { "damage": 4, - "tool": "minecraft:shears" + "tool": "#c:tools/shear" }, "result": { "count": 4, diff --git a/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool_carpets.json b/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool_carpets.json index 7e8108cd..a5b218d7 100644 --- a/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool_carpets.json +++ b/src/generated/resources/data/cakesticklib/recipe/durability_use/string_from_wool_carpets.json @@ -5,7 +5,7 @@ ], "mode": { "damage": 3, - "tool": "minecraft:shears" + "tool": "#c:tools/shear" }, "result": { "count": 2, diff --git a/src/generated/resources/data/cakesticklib/recipe/jei_modifier/patina.json b/src/generated/resources/data/cakesticklib/recipe/jei_modifier/patina.json new file mode 100644 index 00000000..f2f3f121 --- /dev/null +++ b/src/generated/resources/data/cakesticklib/recipe/jei_modifier/patina.json @@ -0,0 +1,8 @@ +{ + "type": "cakesticklib:jei_modifier", + "output": { + "id": "cakesticklib:patina" + }, + "rich_tooltip_key": "cakesticklib.jei.patina_drop", + "target": "neoforge:datamaps/scrapping" +} \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/tags/item/legacy_stone_slabs.json b/src/generated/resources/data/cakesticklib/tags/item/legacy_stone_slabs.json deleted file mode 100644 index dc3ddc12..00000000 --- a/src/generated/resources/data/cakesticklib/tags/item/legacy_stone_slabs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "minecraft:stone_slab", - "minecraft:diorite_slab", - "minecraft:andesite_slab", - "minecraft:granite_slab" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/waxing.json b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/oxidizables.json similarity index 83% rename from src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/waxing.json rename to src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/oxidizables.json index c403d303..38970c30 100644 --- a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/waxing.json +++ b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/oxidizables.json @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "cakesticklib:copper_oxidation/waxing" + "recipe": "neoforge:datamaps/oxidizables" }, "trigger": "minecraft:recipe_unlocked" } @@ -26,7 +26,7 @@ ], "rewards": { "recipes": [ - "cakesticklib:copper_oxidation/waxing" + "neoforge:datamaps/oxidizables" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/scrapping.json b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/scrapping.json similarity index 82% rename from src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/scrapping.json rename to src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/scrapping.json index aae97dcc..7b48c6d7 100644 --- a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/scrapping.json +++ b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/scrapping.json @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "cakesticklib:copper_oxidation/scrapping" + "recipe": "neoforge:datamaps/scrapping" }, "trigger": "minecraft:recipe_unlocked" } @@ -26,7 +26,7 @@ ], "rewards": { "recipes": [ - "cakesticklib:copper_oxidation/scrapping" + "neoforge:datamaps/scrapping" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/unwaxing.json b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/unwaxing.json similarity index 82% rename from src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/unwaxing.json rename to src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/unwaxing.json index e159306c..8840f2fe 100644 --- a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/unwaxing.json +++ b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/unwaxing.json @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "cakesticklib:copper_oxidation/unwaxing" + "recipe": "neoforge:datamaps/unwaxing" }, "trigger": "minecraft:recipe_unlocked" } @@ -26,7 +26,7 @@ ], "rewards": { "recipes": [ - "cakesticklib:copper_oxidation/unwaxing" + "neoforge:datamaps/unwaxing" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/oxidizing.json b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/waxables.json similarity index 82% rename from src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/oxidizing.json rename to src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/waxables.json index 5bc6b45d..d71b8163 100644 --- a/src/generated/resources/data/cakesticklib/advancement/recipes/misc/copper_oxidation/oxidizing.json +++ b/src/generated/resources/data/neoforge/advancement/recipes/misc/datamaps/waxables.json @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "cakesticklib:copper_oxidation/oxidizing" + "recipe": "neoforge:datamaps/waxables" }, "trigger": "minecraft:recipe_unlocked" } @@ -26,7 +26,7 @@ ], "rewards": { "recipes": [ - "cakesticklib:copper_oxidation/oxidizing" + "neoforge:datamaps/waxables" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/cakesticklib/recipe/copper_oxidation/oxidizing.json b/src/generated/resources/data/neoforge/recipe/datamaps/oxidizables.json similarity index 100% rename from src/generated/resources/data/cakesticklib/recipe/copper_oxidation/oxidizing.json rename to src/generated/resources/data/neoforge/recipe/datamaps/oxidizables.json diff --git a/src/generated/resources/data/cakesticklib/recipe/copper_oxidation/scrapping.json b/src/generated/resources/data/neoforge/recipe/datamaps/scrapping.json similarity index 100% rename from src/generated/resources/data/cakesticklib/recipe/copper_oxidation/scrapping.json rename to src/generated/resources/data/neoforge/recipe/datamaps/scrapping.json diff --git a/src/generated/resources/data/cakesticklib/recipe/copper_oxidation/unwaxing.json b/src/generated/resources/data/neoforge/recipe/datamaps/unwaxing.json similarity index 100% rename from src/generated/resources/data/cakesticklib/recipe/copper_oxidation/unwaxing.json rename to src/generated/resources/data/neoforge/recipe/datamaps/unwaxing.json diff --git a/src/generated/resources/data/cakesticklib/recipe/copper_oxidation/waxing.json b/src/generated/resources/data/neoforge/recipe/datamaps/waxables.json similarity index 100% rename from src/generated/resources/data/cakesticklib/recipe/copper_oxidation/waxing.json rename to src/generated/resources/data/neoforge/recipe/datamaps/waxables.json diff --git a/src/main/java/com/devdyna/cakesticklib/api/FluidRegister.java b/src/main/java/com/devdyna/cakesticklib/api/FluidRegister.java index b05689a1..37e506a0 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/FluidRegister.java +++ b/src/main/java/com/devdyna/cakesticklib/api/FluidRegister.java @@ -1,7 +1,5 @@ package com.devdyna.cakesticklib.api; -import java.util.function.ToIntFunction; - import javax.annotation.Nullable; import java.awt.Color; @@ -31,6 +29,7 @@ import net.neoforged.neoforge.fluids.BaseFlowingFluid; import net.neoforged.neoforge.fluids.FluidType; import net.neoforged.neoforge.registries.DeferredHolder; + //TODO HEAVILY REWORK /** * Utility class to create fluids @@ -46,47 +45,22 @@ public class FluidRegister { private BaseFlowingFluid.Properties prop; private DeferredHolder type; - private int lightLevel; - private ToIntFunction dynLightLevel; - private int viscosityFluid; - - private boolean igniteWhenInside; private int color; - private boolean canSwim; - - private boolean canDrown; - - private boolean canConvertToSource; - - private boolean canPushEntity; - - private int blockLightLevel; - - public FluidRegister(String id, int color, boolean noBucket, boolean ignite, boolean drown, boolean swim, - boolean push, boolean convertToSource, int viscosity, int block_light, - ToIntFunction light_level) { + public FluidRegister(String id, int color, boolean ignite, int lightLevel) { this.id = id; this.color = color; - this.viscosityFluid = viscosity;// approx water - this.dynLightLevel = light_level; - this.blockLightLevel = block_light; - this.canDrown = drown; - this.canSwim = swim; - this.canPushEntity = push; - this.canConvertToSource = convertToSource; - this.igniteWhenInside = ignite; this.type = LibFluids.zFluidTypes.register( id + "_type", p -> new FluidType(FluidType.Properties.create() - .lightLevel(blockLightLevel) - .viscosity(viscosityFluid) - .canDrown(canDrown) - .canSwim(canSwim) - .canPushEntity(canPushEntity) - .canConvertToSource(canConvertToSource) + .lightLevel(lightLevel) + .viscosity(1000) + .canDrown(true) + .isWaterLike(true) + .canPushEntity(true) + .canConvertToSource(false) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY)) @@ -94,27 +68,27 @@ public FluidRegister(String id, int color, boolean noBucket, boolean ignite, boo this.prop = new BaseFlowingFluid.Properties(this.type, null, null); - this.fluidsource = LibFluids.zFluids.register(id // + "_source" - , p -> new BaseFlowingFluid.Source(this.prop)); + this.fluidsource = LibFluids.zFluids.register(id, p -> new BaseFlowingFluid.Source(this.prop)); this.fluidflowing = LibFluids.zFluids.register(id + "_flowing", p -> new BaseFlowingFluid.Flowing(this.prop) { protected void entityInside(Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { - if (igniteWhenInside) { + if (ignite) { effectApplier.apply(InsideBlockEffectType.CLEAR_FREEZE); effectApplier.apply(InsideBlockEffectType.LAVA_IGNITE); effectApplier.runAfter(InsideBlockEffectType.LAVA_IGNITE, Entity::lavaHurt); } + + super.entityInside(level, pos, entity, effectApplier); }; }); - this.itemBucket = noBucket ? null - : LibItems.zBucketItems.registerItem(id + "_bucket", - p -> new BucketItem(this.fluidsource.get(), - p.craftRemainder(Items.BUCKET).stacksTo(1))); + this.itemBucket = LibItems.zBucketItems.registerItem(id + "_bucket", + p -> new BucketItem(this.fluidsource.get(), + p.craftRemainder(Items.BUCKET).stacksTo(1))); this.block = LibBlocks.zBlockFluids.registerBlock( id, @@ -123,17 +97,19 @@ protected void entityInside(Level level, BlockPos pos, Entity entity, .strength(100.0F).pushReaction(PushReaction.DESTROY).noLootTable().liquid() .sound(SoundType.EMPTY) .liquid() - .lightLevel(dynLightLevel) - .emissiveRendering((s, g, p) -> lightLevel > 0 || dynLightLevel.applyAsInt(s) > 0)) { + .lightLevel(_ -> lightLevel)) { - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, + protected void entityInside(BlockState state, Level level, BlockPos pos, + Entity entity, InsideBlockEffectApplier effectApplier, boolean isPrecise) { - if (igniteWhenInside) { + if (ignite) { effectApplier.apply(InsideBlockEffectType.CLEAR_FREEZE); effectApplier.apply(InsideBlockEffectType.LAVA_IGNITE); effectApplier.runAfter(InsideBlockEffectType.LAVA_IGNITE, Entity::lavaHurt); } + + super.entityInside(state, level, pos, entity, effectApplier, isPrecise); }; }); @@ -143,9 +119,8 @@ protected void entityInside(BlockState state, Level level, BlockPos pos, Entity this.fluidsource, this.fluidflowing).block(this.block); - if (!noBucket) - sampleProp = sampleProp - .bucket(this.itemBucket); + sampleProp = sampleProp + .bucket(this.itemBucket); this.prop = sampleProp; } @@ -166,72 +141,10 @@ public DeferredHolder getSource() { return itemBucket; } - // public Identifier getStill() { - // return still; - // } - public DeferredHolder getType() { return type; } - // public FluidRegister setTextures(Identifier still) { - // this.still = still; - // return this; - // } - - // public FluidRegister setStillTexture(Identifier rl) { - // this.still = rl; - // return this; - // } - - /** - * dont work - */ - @Deprecated - public FluidRegister setLight(int l) { - this.lightLevel = l; - return this; - } - - @Deprecated - public FluidRegister setLight(ToIntFunction l) { - this.dynLightLevel = l; - return this; - } - - @Deprecated - public FluidRegister swim() { - // this.canSwim = true; - return this; - } - - @Deprecated - public FluidRegister convertToSource() { - // this.canConvertToSource = true; - return this; - } - - @Deprecated - public FluidRegister drown() { - // this.canDrown = true; - return this; - } - - @Deprecated - public FluidRegister pushEntity() { - // this.canPushEntity = true; - return this; - } - - /** - * Default value: 1000 - */ - @Deprecated - public FluidRegister setViscosity(int v) { - // this.viscosity = v; - return this; - } - public String getId() { return id; } @@ -245,7 +158,7 @@ public Fluid getFluid() { } public static FluidRegister simple(String id, int color) { - return new FluidRegister(id, color, false, false, false, false, false, false, 1000, 0, s -> 0); + return new FluidRegister(id, color, false, 0); } public static FluidRegister simple(String id, Color color) { @@ -253,7 +166,7 @@ public static FluidRegister simple(String id, Color color) { } public static FluidRegister heavy(String id, int color) { - return new FluidRegister(id, color, false, false, true, false, true, false, 2500, 0, s -> 0); + return new FluidRegister(id, color, false, 0); } public static FluidRegister heavy(String id, Color color) { @@ -261,7 +174,7 @@ public static FluidRegister heavy(String id, Color color) { } public static FluidRegister molten(String id, int color) { - return new FluidRegister(id, color, false, true, false, false, true, false, 1000, 5, s -> 5); + return new FluidRegister(id, color, true, 5); } public static FluidRegister molten(String id, Color color) { 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 new file mode 100644 index 00000000..ec3e3e4c --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/api/aspect/logic/EffectItem.java @@ -0,0 +1,140 @@ +package com.devdyna.cakesticklib.api.aspect.logic; + +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); + + 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(); + + for (var instance : effects) { + var effect = instance.getEffect().value(); + + var result = Component.empty() + .append(effect.getDisplayName()); + + if (instance.getAmplifier() > 0) + result.append(" ") + .append(Component.translatable( + "potion.potency." + instance.getAmplifier())); + + + result.append(" (") + .append(MobEffectUtil.formatDuration( + instance, + 1.0F, + Minecraft.getInstance().level + .tickRateManager() + .tickrate())) + .append(")"); + + result.withStyle(style -> style.withColor(switch (effect.getCategory()) { + case BENEFICIAL -> ColorUtils.rgb(85, 85, 255); + case HARMFUL -> ColorUtils.rgb(255, 85, 85); + case NEUTRAL -> ColorUtils.rgb(170, 0, 170); + })); + + list.add(result); + } + + return list; + } +} \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseCategory.java b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseCategory.java index 2306450b..a55b8986 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseCategory.java +++ b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseCategory.java @@ -2,7 +2,6 @@ import org.jetbrains.annotations.Nullable; -import com.devdyna.cakesticklib.api.gui.ClientUtils; import com.devdyna.cakesticklib.api.primitive.Size; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawable; @@ -21,7 +20,7 @@ * A generic recipe category to show hardcoded implementations without a defined * dependency */ -public abstract class BaseCategory implements IRecipeCategory, ClientUtils { +public abstract class BaseCategory implements IRecipeCategory { protected IGuiHelper helper; @@ -97,4 +96,10 @@ public void draw(T recipe, IRecipeSlotsView recipeSlotsView, GuiGraphicsExtracto background(guiGraphics); } + public void drawCenteredString(GuiGraphicsExtractor pGuiGraphics, Font font, Component text, int x, int y, + int color, boolean dropShadow) { + var f = text.getVisualOrderText(); + pGuiGraphics.text(font, f, x - font.width(f) / 2, y, color, dropShadow); + } + } \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java index e956b9c5..d4276920 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java +++ b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java @@ -60,6 +60,7 @@ public void getTooltip(ITooltipBuilder tooltip, T recipe, IRecipeSlotsView recip double mouseX, double mouseY) { } + @Deprecated public void drawCentredStringFixed(GuiGraphicsExtractor g, Font font, Component text, int x, int y, int color, Boolean bool) { var f = text.getVisualOrderText(); diff --git a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/JeiModifierHandler.java b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/JeiModifierHandler.java new file mode 100644 index 00000000..994e94b0 --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/JeiModifierHandler.java @@ -0,0 +1,27 @@ +package com.devdyna.cakesticklib.api.compat.jei; + +import java.util.List; + +import com.devdyna.cakesticklib.setup.Client; +import com.devdyna.cakesticklib.setup.common.recipes.jei_modifier.JeiModiferRecipe; +import com.devdyna.cakesticklib.setup.registry.LibRecipeTypes; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.crafting.RecipeHolder; + +public interface JeiModifierHandler { + + public static final List> MODIFIERS = List + .copyOf(Client.getRecipeCollector().byType(LibRecipeTypes.JEI_MODIFIER.getType())); + + default JeiModiferRecipe getRecipeMatch(Identifier rl) { + for (var r : MODIFIERS) + if (r.value().getTarget().equals(rl)) + return r.value(); + return null; + } + + default JeiModiferRecipe getRecipeMatch(RecipeHolder h) { + return getRecipeMatch(h.id().identifier()); + } + +} diff --git a/src/main/java/com/devdyna/cakesticklib/api/datagen/LangUtils.java b/src/main/java/com/devdyna/cakesticklib/api/datagen/LangUtils.java index e5062cd3..c57dab18 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/datagen/LangUtils.java +++ b/src/main/java/com/devdyna/cakesticklib/api/datagen/LangUtils.java @@ -1,5 +1,6 @@ package com.devdyna.cakesticklib.api.datagen; +import net.minecraft.world.effect.MobEffectCategory; import net.neoforged.neoforge.common.data.LanguageProvider; import net.neoforged.neoforge.registries.DeferredHolder; @@ -52,11 +53,14 @@ public class TipColors { */ public static final String ITEM_TOOLTIP = LIGHT_GRAY; - //spawner + // spawner public static final String INTERACTION_TOOLTIP = BLUE; + @Deprecated public static final String POTION_EFFECT_NO_EFFECT = LIGHT_GRAY; + @Deprecated public static final String POTION_EFFECT_POSITIVE = BLUE; + @Deprecated public static final String POTION_EFFECT_NEGATIVE = RED; public static final String POTION_APPLIED_TOOLTIP = PURPLE; @@ -69,6 +73,14 @@ public class Modifiers { } + public class MobEffectTypes { + + public static final String POSITIVE = "§" + MobEffectCategory.BENEFICIAL.getTooltipFormatting().getChar(); + public static final String NEGATIVE = "§" + MobEffectCategory.HARMFUL.getTooltipFormatting().getChar(); + public static final String NEUTRAL = "§" + MobEffectCategory.NEUTRAL.getTooltipFormatting().getChar(); + + } + } @Deprecated diff --git a/src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java b/src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java index fb944424..4cbcf7bf 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java +++ b/src/main/java/com/devdyna/cakesticklib/api/templates/EffectItem.java @@ -3,19 +3,15 @@ import java.util.ArrayList; import java.util.List; -import com.devdyna.cakesticklib.api.utils.ColorUtils; - -import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; -import net.minecraft.world.effect.MobEffectCategory; 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.component.Consumable; import net.minecraft.world.item.consume_effects.ApplyStatusEffectsConsumeEffect; -public class EffectItem extends Item { +@Deprecated +public class EffectItem extends Item implements com.devdyna.cakesticklib.api.aspect.logic.EffectItem { private List effects; @@ -24,20 +20,18 @@ public EffectItem(Properties p, List effects) { this.effects = effects; } - /** - * Create an food item with a dedicated tooltip to show mobEffects - */ + @Deprecated public static class Builder { private final List list = new ArrayList<>(); private final Properties p; private FoodProperties food; - public Builder(Properties p){ + public Builder(Properties p) { this.p = p; } - public static Builder of(Properties p){ + public static Builder of(Properties p) { return new Builder(p); } @@ -71,6 +65,7 @@ public Builder effect(List effect) { } public EffectItem build() { + var consumable = Consumable.builder(); var potions = new ArrayList(); @@ -111,38 +106,14 @@ public static FoodEffect of(List e) { } } + @Override public List getEffectToolTip() { + return defaultEffectTooltip(effects); + } - var list = new ArrayList(); - - for (var instance : effects) { - - var effect = instance.getEffect().value(); - - var result = Component.empty() - .append(effect.getDisplayName()); - - if (instance.getAmplifier() > 0) - result.append(" ") - .append(Component.translatable( - "potion.potency." + instance.getAmplifier())); - - result.append(" (") - .append(MobEffectUtil.formatDuration(instance, 1.0F, - Minecraft.getInstance().level.tickRateManager().tickrate())) - .append(")"); - - result.withStyle(style -> style.withColor(switch (effect.getCategory()) { - case MobEffectCategory.BENEFICIAL -> ColorUtils.rgb(85, 85, 255); - case MobEffectCategory.HARMFUL -> ColorUtils.rgb(255, 85, 85); - case MobEffectCategory.NEUTRAL -> ColorUtils.rgb(170, 0, 170); - })); - - list.add(result); - } - - return list; - + @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 new file mode 100644 index 00000000..0072e080 --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/api/templates/SimpleEffectItem.java @@ -0,0 +1,31 @@ +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/setup/Client.java b/src/main/java/com/devdyna/cakesticklib/setup/Client.java index d182ee5d..46a5734a 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/Client.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/Client.java @@ -103,7 +103,8 @@ public static void onRegisterFluidModels(RegisterFluidModelsEvent event) { var blazing_fluids = List.of( LibFluids.SULFURIC_ACID, LibFluids.MOLTEN_BLAZING, - LibFluids.PLASTIC); + LibFluids.PLASTIC, + LibFluids.CRUDE_OIL); molten_fluids.forEach( f -> event.register( diff --git a/src/main/java/com/devdyna/cakesticklib/setup/common/CreativeTab.java b/src/main/java/com/devdyna/cakesticklib/setup/common/CreativeTab.java index 9172b42c..ddbbbb83 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/common/CreativeTab.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/common/CreativeTab.java @@ -53,7 +53,8 @@ public static void register(BuildCreativeModeTabContentsEvent event) { LibItems.zGears, LibItems.zMolds, LibItems.zChunks, - LibItems.zDeposits); + LibItems.zDeposits, + LibItems.zBucketItems); } diff --git a/src/main/java/com/devdyna/cakesticklib/setup/common/events/ItemToolTipped.java b/src/main/java/com/devdyna/cakesticklib/setup/common/events/ItemToolTipped.java index 0d1dc958..703eefb6 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/common/events/ItemToolTipped.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/common/events/ItemToolTipped.java @@ -4,8 +4,8 @@ import com.devdyna.cakesticklib.api.ToolTipHelper; import com.devdyna.cakesticklib.api.aspect.logic.BlockItemKeeper; +import com.devdyna.cakesticklib.api.aspect.logic.EffectItem; import com.devdyna.cakesticklib.api.datagen.LangUtils.TipColors; -import com.devdyna.cakesticklib.api.templates.EffectItem; import com.devdyna.cakesticklib.api.upgrades.UpgradeComponents.UpgradeType; import com.devdyna.cakesticklib.api.upgrades.modifiers.DirectionalModifier; import com.devdyna.cakesticklib.api.upgrades.modifiers.ModifierUtils; diff --git a/src/main/java/com/devdyna/cakesticklib/setup/common/events/RecipeSender.java b/src/main/java/com/devdyna/cakesticklib/setup/common/events/RecipeSender.java index 23a4566b..de367aa7 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/common/events/RecipeSender.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/common/events/RecipeSender.java @@ -15,6 +15,7 @@ public static void onDatapackSync(OnDatapackSyncEvent event) { LibRecipeTypes.DURABILITY_USE.getType(), LibRecipeTypes.REPLACING.getType(), LibRecipeTypes.UPGRADE_APPLICATION.getType(), + LibRecipeTypes.JEI_MODIFIER.getType(), RecipeType.CRAFTING); } diff --git a/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/jei_modifier/JeiModiferRecipe.java b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/jei_modifier/JeiModiferRecipe.java new file mode 100644 index 00000000..e4ff0367 --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/jei_modifier/JeiModiferRecipe.java @@ -0,0 +1,113 @@ +package com.devdyna.cakesticklib.setup.common.recipes.jei_modifier; + +import java.util.Optional; + +import com.devdyna.cakesticklib.api.recipe.recipeType.BaseRecipeType; +import com.devdyna.cakesticklib.setup.registry.LibItems; +import com.devdyna.cakesticklib.setup.registry.LibRecipeTypes; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeInput; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; + +public class JeiModiferRecipe extends BaseRecipeType { + + private final Identifier target; + private final ItemStackTemplate output; + private final String tooltip; + + public JeiModiferRecipe(Identifier target, ItemStackTemplate output, String tooltip) { + super(); + this.target = target; + this.output = output; + this.tooltip = tooltip; + } + + public Identifier getTarget() { + return target; + } + + public ItemStackTemplate getOutput() { + return output; + } + + public String getTooltip() { + return tooltip; + } + + @Override + public boolean matches(RecipeInput r, Level l) { + return false; + } + + @Override + public ItemStack assemble(RecipeInput input) { + return output == null + ? ItemStack.EMPTY + : output.create().copy(); + } + + @Override + public Item getToastIcon() { + return LibItems.PATINA.get(); + } + + public static final RecipeSerializer serializer() { + return new RecipeSerializer<>(CODEC, STREAM_CODEC); + } + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( + + Identifier.CODEC + .fieldOf("target") + .forGetter(JeiModiferRecipe::getTarget), + + ItemStackTemplate.CODEC + .fieldOf("output") + .forGetter(JeiModiferRecipe::getOutput), + Codec.STRING + .optionalFieldOf("rich_tooltip_key") + .forGetter(r -> Optional.ofNullable(r.getTooltip())) + + ).apply(inst, (t, o, r) -> new JeiModiferRecipe(t, o, r.orElse(null)))); + + public static final StreamCodec STREAM_CODEC = StreamCodec + .composite( + Identifier.STREAM_CODEC, + JeiModiferRecipe::getTarget, + + ItemStackTemplate.STREAM_CODEC, + JeiModiferRecipe::getOutput, + + ByteBufCodecs.optional(ByteBufCodecs.STRING_UTF8), + r -> Optional.ofNullable(r.getTooltip()), + + (t, o, r) -> new JeiModiferRecipe(t, o, r.orElse(null))); + + @Override + public RecipeSerializer> getSerializer() { + return LibRecipeTypes.JEI_MODIFIER.getSerializer(); + } + + @Override + public RecipeType> getType() { + return LibRecipeTypes.JEI_MODIFIER.getType(); + } + + @Override + public String group() { + return "jei_modifier"; + } +} \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/jei_modifier/JeiModiferRecipeBuilder.java b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/jei_modifier/JeiModiferRecipeBuilder.java new file mode 100644 index 00000000..53c5092d --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/jei_modifier/JeiModiferRecipeBuilder.java @@ -0,0 +1,92 @@ +package com.devdyna.cakesticklib.setup.common.recipes.jei_modifier; + +import static com.devdyna.cakesticklib.CakeStickLib.MODULE_ID; + +import java.util.LinkedHashMap; + +import com.devdyna.cakesticklib.api.recipe.recipeBuilder.BaseRecipeBuilder; +import com.devdyna.cakesticklib.api.recipe.recipeBuilder.ItemAttach; +import com.devdyna.cakesticklib.api.utils.x; +import com.devdyna.cakesticklib.setup.common.recipes.oxidation.OxidationStatus; +import net.minecraft.advancements.Criterion; +import net.minecraft.core.HolderLookup; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.ItemStackTemplate; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.level.ItemLike; +import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps; + +public class JeiModiferRecipeBuilder extends BaseRecipeBuilder + implements ItemAttach.Output.SimpleOutputItem { + + private Identifier target; + private ItemStackTemplate output; + private String tooltip = null; + + public JeiModiferRecipeBuilder(HolderLookup.Provider p) { + super(p); + this.criteria = new LinkedHashMap>(); + } + + public static JeiModiferRecipeBuilder of(HolderLookup.Provider p) { + return new JeiModiferRecipeBuilder(p); + } + + public JeiModiferRecipeBuilder unlockedBy() { + return unlockedBy(output.item().value()); + } + + public JeiModiferRecipeBuilder unlockedBy(String name, Criterion criterion) { + this.criteria.put(name, criterion); + return this; + } + + public JeiModiferRecipeBuilder target(Identifier target) { + this.target = target; + return this; + } + + public JeiModiferRecipeBuilder target(String mod, String path) { + return target(x.rl(mod, path)); + } + + public JeiModiferRecipeBuilder oxidation(OxidationStatus status) { + if (status.isCustom()) + throw new NullPointerException("Use oxidation(ItemLike item) if you want use OxidstionStatus.CUSTOM!"); + return target(status.getIdentifier()); + } + + public JeiModiferRecipeBuilder strippable(ItemLike target) { + return target(NeoForgeDataMaps.STRIPPABLES.id().withSuffix("/" + x.name(target))); + } + + public JeiModiferRecipeBuilder oxidation(ItemLike target) { + return target(OxidationStatus.CUSTOM.getIdentifier().withSuffix(x.name(target))); + } + + public JeiModiferRecipeBuilder tooltip(String tooltip) { + this.tooltip = tooltip; + return this; + } + + public JeiModiferRecipeBuilder output(ItemStackTemplate output) { + this.output = output; + return this; + } + + @Override + public Identifier getSuffix(String extra) { + return x.rl(MODULE_ID, "jei_modifier/" + x.name(output) + extra); + } + + @Override + public Recipe createRecipe() { + return new JeiModiferRecipe(target, output, tooltip); + } + + @Override + public JeiModiferRecipeBuilder getBuilder() { + return this; + } + +} \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/CopperOxidationBuilder.java b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/CopperOxidationBuilder.java index d9536e77..17004ecf 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/CopperOxidationBuilder.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/CopperOxidationBuilder.java @@ -1,7 +1,5 @@ package com.devdyna.cakesticklib.setup.common.recipes.oxidation; -import static com.devdyna.cakesticklib.CakeStickLib.MODULE_ID; - import java.util.LinkedHashMap; import com.devdyna.cakesticklib.api.recipe.recipeBuilder.BaseRecipeBuilder; @@ -9,7 +7,6 @@ import com.devdyna.cakesticklib.api.utils.x; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.criterion.InventoryChangeTrigger; import net.minecraft.core.HolderLookup; import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; @@ -38,15 +35,10 @@ public static CopperOxidationBuilder of(HolderLookup.Provider p) { } public CopperOxidationBuilder unlockedBy() { - return unlockedBy( - x.name(Items.COPPER_INGOT), - InventoryChangeTrigger.TriggerInstance.hasItems(Items.COPPER_INGOT)); + return unlockedBy(Items.COPPER_INGOT); } - public CopperOxidationBuilder unlockedBy( - String name, - Criterion criterion) { - + public CopperOxidationBuilder unlockedBy(String name, Criterion criterion) { this.criteria.put(name, criterion); return this; } @@ -93,8 +85,14 @@ public CopperOxidationBuilder output(ItemStackTemplate output) { @Override public Identifier getSuffix(String extra) { - return x.rl(MODULE_ID, "copper_oxidation/" + type.name().toLowerCase() - + (type.equals(OxidationStatus.CUSTOM) ? "/" + x.name(output) : "") + extra); + + var id = type.getIdentifier(); + + if (type.isCustom()) + id = id.withSuffix(x.name(output)); + + return id.withSuffix(extra); + } @Override diff --git a/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/OxidationStatus.java b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/OxidationStatus.java index 968e56dc..4a58e4b5 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/OxidationStatus.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/common/recipes/oxidation/OxidationStatus.java @@ -1,25 +1,31 @@ package com.devdyna.cakesticklib.setup.common.recipes.oxidation; +import com.devdyna.cakesticklib.api.utils.x; import com.mojang.serialization.Codec; import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.Identifier; import net.minecraft.util.StringRepresentable; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeInput; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps; public enum OxidationStatus implements StringRepresentable { - SCRAPPING("scrapping"), - OXIDIZING("oxidizing"), - WAXING("waxing"), - UNWAXING("unwaxing"), - CUSTOM("custom"); + SCRAPPING("scrapping", x.rl(NeoForgeMod.MOD_ID, "datamaps/scrapping")), + OXIDIZING("oxidizing", NeoForgeDataMaps.OXIDIZABLES.id().withPrefix("datamaps/")), + WAXING("waxing", NeoForgeDataMaps.WAXABLES.id().withPrefix("datamaps/")), + UNWAXING("unwaxing", x.rl(NeoForgeMod.MOD_ID, "datamaps/unwaxing")), + CUSTOM("custom", x.rl(NeoForgeMod.MOD_ID, "custom/")); - private final String i; + private String i; + private Identifier rl; - OxidationStatus(String i) { + OxidationStatus(String i, Identifier rl) { this.i = i; + this.rl = rl; } @Override @@ -27,9 +33,19 @@ public String getSerializedName() { return i; } - public record OxidationInput( - OxidationStatus type, - ItemStack input) implements RecipeInput { + public boolean isCustom() { + return this.equals(OxidationStatus.CUSTOM); + } + + public Identifier getIdentifier() { + return rl; + } + + public static final Codec CODEC = StringRepresentable.fromEnum(OxidationStatus::values); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs + .fromCodec(OxidationStatus.CODEC); + + public record OxidationInput(OxidationStatus type, ItemStack input) implements RecipeInput { @Override public ItemStack getItem(int index) { @@ -42,7 +58,4 @@ public int size() { } } - public static final Codec CODEC = StringRepresentable.fromEnum(OxidationStatus::values); - public static final StreamCodec STREAM_CODEC = ByteBufCodecs - .fromCodec(OxidationStatus.CODEC); } \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/CopperOxidationCategory.java b/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/CopperOxidationCategory.java index f490a3b0..caaf0244 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/CopperOxidationCategory.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/CopperOxidationCategory.java @@ -3,17 +3,13 @@ import java.util.*; import java.util.function.Function; -import com.devdyna.cakesticklib.api.compat.jei.BaseRecipeCategory; -import com.devdyna.cakesticklib.api.compat.jei.ImageJei; +import com.devdyna.cakesticklib.api.compat.jei.*; import com.devdyna.cakesticklib.api.primitive.Size; import com.devdyna.cakesticklib.api.utils.x; import com.devdyna.cakesticklib.setup.common.recipes.oxidation.CopperOxidationRecipe; -import com.devdyna.cakesticklib.setup.common.recipes.oxidation.OxidationStatus; import com.devdyna.cakesticklib.setup.registry.*; - import static com.devdyna.cakesticklib.CakeStickLib.MODULE_ID; -import java.awt.Color; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.helpers.IGuiHelper; @@ -31,165 +27,144 @@ import net.neoforged.neoforge.common.DataMapHooks; import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps; -public class CopperOxidationCategory extends BaseRecipeCategory { - - private List oxidable = x.getBlocks(NeoForgeDataMaps.OXIDIZABLES) - .stream() - .filter(Optional::isPresent) - .map(Optional::get) - .map(Reference::value).toList(); - - private List waxable = x.getBlocks(NeoForgeDataMaps.WAXABLES) - .stream() - .filter(Optional::isPresent) - .map(Optional::get) - .map(Reference::value).toList(); - - public CopperOxidationCategory(IGuiHelper h) { - super(h); - } - - public static final IRecipeType> TYPE = IRecipeType - .create(LibRecipeTypes.COPPER_OXIDATION.getType()); - - @Override - public IRecipeType> getRecipeType() { - return TYPE; - } - - @Override - public String getTraslationKey() { - return MODULE_ID + ".jei.copper_oxidation"; - } - - @Override - public ItemLike getIconItem() { - return LibItems.REDSTONE_ACID.get(); - } - - @Override - public Size setXY() { - return Size.of(77, 39); - } - - @Override - public Identifier setBackGround() { - return x.rl(MODULE_ID, "textures/gui/jei/catalyst.png"); - } - - @Override - public void setRecipe(IRecipeLayoutBuilder builder, CopperOxidationRecipe recipe, IFocusGroup focuses) { - - super.setRecipe(builder, recipe, focuses); - - Ingredient catalyst = recipe.getCatalyst(); - - if (catalyst != null) - builder.addSlot(RecipeIngredientRole.CRAFTING_STATION, 29, 2) - .add(catalyst); - - switch (recipe.getOxidationType()) { - - case SCRAPPING -> { - builder.addSlot(RecipeIngredientRole.INPUT, 2, 2) - .add(mapBlocks( - oxidable, - DataMapHooks::getNextOxidizedStage)); - - builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 2) - .add(x.itemIngredient( - oxidable.stream() - .map(Block::asItem) - .toList())); - - // TODO API : add toggleable - builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 21) - .add(x.item(LibItems.PATINA.get())) - .addRichTooltipCallback( - (v, t) -> t.add( - Component.translatable( - MODULE_ID + ".jei.patina_drop", - "0-2"))); - } - - case OXIDIZING -> { - builder.addSlot(RecipeIngredientRole.INPUT, 2, 2) - .add(x.itemIngredient( - oxidable.stream() - .map(Block::asItem) - .toList())); - - builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 2) - .add(mapBlocks( - oxidable, - DataMapHooks::getNextOxidizedStage)); - } - - case WAXING -> { - builder.addSlot(RecipeIngredientRole.INPUT, 2, 2) - .add(x.itemIngredient( - waxable.stream() - .map(Block::asItem) - .toList())); - - builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 2) - .add(mapBlocks( - waxable, - DataMapHooks::getBlockWaxed)); - } - - case UNWAXING -> { - builder.addSlot(RecipeIngredientRole.INPUT, 2, 2) - .add(mapBlocks( - waxable, - DataMapHooks::getBlockWaxed)); - - builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 2) - .add(x.itemIngredient( - waxable.stream() - .map(Block::asItem) - .toList())); - } - - case CUSTOM -> { - if (recipe.getInput() != null) - builder.addSlot(RecipeIngredientRole.INPUT, 2, 2) - .add(recipe.getInput()); - - if (recipe.getOutput() != null) - builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 2) - .add(recipe.getOutput()); - - } +public class CopperOxidationCategory extends BaseCategory> + implements JeiModifierHandler { + + private List oxidable = x.getBlocks(NeoForgeDataMaps.OXIDIZABLES) + .stream() + .filter(Optional::isPresent) + .map(Optional::get) + .map(Reference::value).toList(); + + private List waxable = x.getBlocks(NeoForgeDataMaps.WAXABLES) + .stream() + .filter(Optional::isPresent) + .map(Optional::get) + .map(Reference::value).toList(); + + public CopperOxidationCategory(IGuiHelper h) { + super(h); } - } - private Ingredient mapBlocks(List blocks, Function f) { - return x.itemIngredient(blocks.stream().map(f).map(Block::asItem).toArray(ItemLike[]::new)); - } + public static final IRecipeType> TYPE = IRecipeType + .create(LibRecipeTypes.COPPER_OXIDATION.getType()); - @Override - public void draw(CopperOxidationRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphicsExtractor guiGraphics, - double mouseX, double mouseY) { - super.draw(recipe, recipeSlotsView, guiGraphics, mouseX, mouseY); + @Override + public IRecipeType> getRecipeType() { + return TYPE; + } - if (recipe.getOxidationType().equals(OxidationStatus.SCRAPPING)) { - ImageJei.of() - .rl(x.mcLoc("textures/gui/sprites/container/slot.png")) - .size(18, 18) - .offset(58, 20) - .render(helper, guiGraphics); + @Override + public String getTraslationKey() { + return MODULE_ID + ".jei.copper_oxidation"; + } - drawCentredStringFixed(guiGraphics, font, Component.literal("0-2"), 67, 30, Color.WHITE.getRGB(), true); + @Override + public ItemLike getIconItem() { + return LibItems.REDSTONE_ACID.get(); } - } + @Override + public Size setXY() { + return Size.of(77, 39); + } + + @Override + public Identifier setBackGround() { + return x.rl(MODULE_ID, "textures/gui/jei/catalyst.png"); + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, RecipeHolder recipe, + IFocusGroup focuses) { + + super.setRecipe(builder, recipe, focuses); + + var catalyst = recipe.value().getCatalyst(); + + if (catalyst != null) + builder.addSlot(RecipeIngredientRole.CRAFTING_STATION, 29, 2) + .add(catalyst); + + var input = builder.addSlot(RecipeIngredientRole.INPUT, 2, 2); + var output = builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 2); + + switch (recipe.value().getOxidationType()) { + + case SCRAPPING -> { + input.add(mapBlocks(oxidable, DataMapHooks::getNextOxidizedStage)); + + output.add(x.itemIngredient(oxidable.stream().map(Block::asItem).toList())); + + } + + case OXIDIZING -> { + input.add(x.itemIngredient(oxidable.stream().map(Block::asItem).toList())); + + output.add(mapBlocks(oxidable, DataMapHooks::getNextOxidizedStage)); + } + + case WAXING -> { + input.add(x.itemIngredient(waxable.stream().map(Block::asItem).toList())); - @Override - public void background(GuiGraphicsExtractor graphics) { - this.backgroundImage - .size(77, 20) - .render(helper, graphics); - } + output.add(mapBlocks(waxable, DataMapHooks::getBlockWaxed)); + } + + case UNWAXING -> { + input.add(mapBlocks(waxable, DataMapHooks::getBlockWaxed)); + + output.add(x.itemIngredient(waxable.stream().map(Block::asItem).toList())); + } + + case CUSTOM -> { + if (recipe.value().getInput() != null) + input.add(recipe.value().getInput()); + + if (recipe.value().getOutput() != null) + output.add(recipe.value().getOutput()); + } + } + + var modifier = getRecipeMatch(recipe); + + if (modifier != null) { + + var slot = builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 21).add(modifier.getOutput()); + + if (modifier.getTooltip() != null) + slot.addRichTooltipCallback( + (v, t) -> t.add(Component.translatable(modifier.getTooltip()))); + + } + + } + + private Ingredient mapBlocks(List blocks, Function f) { + return x.itemIngredient(blocks.stream().map(f).map(Block::asItem).toArray(ItemLike[]::new)); + } + + @Override + public void draw(RecipeHolder recipe, IRecipeSlotsView recipeSlotsView, + GuiGraphicsExtractor guiGraphics, + double mouseX, double mouseY) { + super.draw(recipe, recipeSlotsView, guiGraphics, mouseX, mouseY); + + if (getRecipeMatch(recipe) != null) { + ImageJei.of() + .rl(x.mcLoc("textures/gui/sprites/container/slot.png")) + .size(18, 18) + .offset(58, 20) + .render(helper, guiGraphics); + + } + + } + + @Override + public void background(GuiGraphicsExtractor graphics) { + this.backgroundImage + .size(77, 20) + .render(helper, graphics); + } } \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/StrippableCategory.java b/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/StrippableCategory.java index 59cc31a2..d5b2213a 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/StrippableCategory.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/compat/jei/categories/StrippableCategory.java @@ -1,26 +1,34 @@ package com.devdyna.cakesticklib.setup.compat.jei.categories; import java.util.*; + +import org.jspecify.annotations.Nullable; + import com.devdyna.cakesticklib.api.compat.jei.BaseCategory; +import com.devdyna.cakesticklib.api.compat.jei.ImageJei; +import com.devdyna.cakesticklib.api.compat.jei.JeiModifierHandler; import com.devdyna.cakesticklib.api.primitive.Size; import com.devdyna.cakesticklib.api.utils.x; import com.devdyna.cakesticklib.setup.compat.jei.recipes.StrippableRecipe; import static com.devdyna.cakesticklib.CakeStickLib.MODULE_ID; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.helpers.IGuiHelper; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.types.IRecipeType; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.core.Holder.Reference; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps; -public class StrippableCategory extends BaseCategory { +public class StrippableCategory extends BaseCategory implements JeiModifierHandler { public static final List getRecipes() { return x.getBlocks(NeoForgeDataMaps.STRIPPABLES) @@ -57,7 +65,7 @@ public ItemLike getIconItem() { @Override public Size setXY() { - return Size.of(77, 20); + return Size.of(77, 39); } @Override @@ -82,6 +90,40 @@ public void setRecipe(IRecipeLayoutBuilder builder, StrippableRecipe recipe, IFo builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 2) .add(recipe.stripped()); + var modifier = getRecipeMatch(getIdentifier(recipe)); + if (modifier != null) { + var slot = builder.addSlot(RecipeIngredientRole.OUTPUT, 59, 21) + .add(modifier.getOutput()); + + if (modifier.getTooltip() != null) + slot.addRichTooltipCallback((v, t) -> t.add(Component.translatable(modifier.getTooltip()))); + + } + + } + + @Override + public void background(GuiGraphicsExtractor graphics) { + backgroundImage.size(77, 20).render(helper, graphics); + } + + @Override + public void draw(StrippableRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphicsExtractor guiGraphics, + double mouseX, double mouseY) { + super.draw(recipe, recipeSlotsView, guiGraphics, mouseX, mouseY); + + if (getRecipeMatch(getIdentifier(recipe)) != null) + ImageJei.of() + .rl(x.mcLoc("textures/gui/sprites/container/slot.png")) + .size(18, 18) + .offset(58, 20) + .render(helper, guiGraphics); + + } + + @Override + public @Nullable Identifier getIdentifier(StrippableRecipe recipe) { + return NeoForgeDataMaps.STRIPPABLES.id().withSuffix("/" + x.name(recipe.unstripped())); } } \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/setup/datagen/client/DataLang.java b/src/main/java/com/devdyna/cakesticklib/setup/datagen/client/DataLang.java index eefa4231..28bb09ee 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/datagen/client/DataLang.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/datagen/client/DataLang.java @@ -119,7 +119,7 @@ protected void addTranslations() { add(MODULE_ID + ".jei.strippable", "Block Strippable Info"); add(MODULE_ID + ".jei.patina_drop", - TipColors.ITEM_TOOLTIP + "Drop %s" + TipColors.ITEM_TOOLTIP + " items every scrape"); + TipColors.ITEM_TOOLTIP + "Drop "+TipColors.WHITE+"0-2" + TipColors.ITEM_TOOLTIP + " items every scrape"); // upgrades @@ -155,9 +155,10 @@ protected void addTranslations() { for (var dir : Direction.values()) add(MODULE_ID + ".widgets.button." + dir.name(), dir.getName() + " Directional Button"); - for (var v : UseType.values()) - add(MODULE_ID + ".widgets.button." + v.name().toLowerCase(),((v == UseType.ITEM) ?TipColors.YELLOW :TipColors.LIGHT_BLUE) + TipColors.BOLD +v.name()); - + for (var v : UseType.values()) + add(MODULE_ID + ".widgets.button." + v.name().toLowerCase(), + ((v == UseType.ITEM) ? TipColors.YELLOW : TipColors.LIGHT_BLUE) + TipColors.BOLD + + v.name()); // config add(MODULE_ID + ".configuration.events", "General events"); @@ -208,7 +209,7 @@ protected void addTranslations() { // extra add("extra.effect.minecraft.glowing", - TipColors.POTION_EFFECT_POSITIVE + "Glowing (00:10)"); + TipColors.MobEffectTypes.NEUTRAL + "Glowing (00:10)"); add(MODULE_ID + ".jei.recipe.item_replace.remainder", "Replaced with %s"); add(MODULE_ID + ".jei.recipe.durability_consume", "Consume %s durability"); diff --git a/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataItemTag.java b/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataItemTag.java index bd445621..88c57022 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataItemTag.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataItemTag.java @@ -309,8 +309,57 @@ protected void addTags(Provider p) { tag(LibTags.Items.MODERN_STONES).add(Items.DEEPSLATE, Items.TUFF); - tag(LibTags.Items.LEGACY_STONE_SLABS).add(Items.STONE_SLAB, Items.DIORITE_SLAB, Items.ANDESITE_SLAB, - Items.GRANITE_SLAB); + tag(LibTags.Items.VARIANT_ANDESITE) + .add( + Items.ANDESITE, + Items.ANDESITE_SLAB, + Items.ANDESITE_STAIRS, + Items.ANDESITE_WALL); + + tag(LibTags.Items.VARIANT_DIORITE) + .add( + Items.DIORITE, + Items.DIORITE_SLAB, + Items.DIORITE_STAIRS, + Items.DIORITE_WALL); + + tag(LibTags.Items.VARIANT_GRANITE) + .add( + Items.GRANITE, + Items.GRANITE_SLAB, + Items.GRANITE_STAIRS, + Items.GRANITE_WALL); + + tag(LibTags.Items.VARIANT_STONE) + .add( + Items.STONE, + Items.STONE_SLAB, + Items.STONE_STAIRS); + + tag(LibTags.Items.VARIANT_COBBLESTONE) + .add( + Items.COBBLESTONE, + Items.COBBLESTONE_SLAB, + Items.COBBLESTONE_STAIRS, + Items.COBBLESTONE_WALL); + + tag(LibTags.Items.VARIANT_DEEPSLATE) + .add( + Items.DEEPSLATE); + + tag(LibTags.Items.VARIANT_COBBLED_DEEPSLATE) + .add( + Items.COBBLED_DEEPSLATE, + Items.COBBLED_DEEPSLATE_SLAB, + Items.COBBLED_DEEPSLATE_STAIRS, + Items.COBBLED_DEEPSLATE_WALL); + + tag(LibTags.Items.VARIANT_TUFF) + .add( + Items.TUFF, + Items.TUFF_SLAB, + Items.TUFF_STAIRS, + Items.TUFF_WALL); } diff --git a/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataRecipe.java b/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataRecipe.java index 8c499dfe..53c072e9 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataRecipe.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/datagen/server/DataRecipe.java @@ -10,6 +10,7 @@ import com.devdyna.cakesticklib.api.upgrades.modifiers.base.BaseModifier.UseType; import com.devdyna.cakesticklib.api.utils.x; import com.devdyna.cakesticklib.setup.common.recipes.item_replace.ReplaceItemBuilder; +import com.devdyna.cakesticklib.setup.common.recipes.jei_modifier.JeiModiferRecipeBuilder; import com.devdyna.cakesticklib.setup.common.recipes.oxidation.CopperOxidationBuilder; import com.devdyna.cakesticklib.setup.common.recipes.oxidation.OxidationStatus; import com.devdyna.cakesticklib.setup.common.recipes.tool_durability.DurabilityConsumeBuilder; @@ -406,21 +407,21 @@ protected void buildRecipes() { .save(output); DurabilityConsumeBuilder.of(registries) - .tool(Items.SHEARS, 4) + .tool(Tags.Items.TOOLS_SHEAR, 4) .add(ItemTags.WOOL) .output(Items.STRING, 4) .unlockedBy() .save(output, "_from_wool"); DurabilityConsumeBuilder.of(registries) - .tool(Items.SHEARS, 3) + .tool(Tags.Items.TOOLS_SHEAR, 3) .add(ItemTags.WOOL_CARPETS) .output(Items.STRING, 2) .unlockedBy() .save(output, "_from_wool_carpets"); DurabilityConsumeBuilder.of(registries) - .tool(Items.SHEARS, 12) + .tool(Tags.Items.TOOLS_SHEAR, 12) .add(Items.DRIED_GHAST) .output(Items.GHAST_TEAR, 4) .unlockedBy() @@ -654,6 +655,13 @@ protected void buildRecipes() { stonecutter(output, i, LibTags.Items.MOLDS); }); + JeiModiferRecipeBuilder.of(registries) + .oxidation(OxidationStatus.SCRAPPING) + .output(LibItems.PATINA) + .tooltip(MODULE_ID + ".jei.patina_drop") + .unlockedBy() + .save(output); + } public static final class RecipeRunner extends RecipeProvider.Runner { diff --git a/src/main/java/com/devdyna/cakesticklib/setup/registry/LibFluids.java b/src/main/java/com/devdyna/cakesticklib/setup/registry/LibFluids.java index 78a99980..d47afd83 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/registry/LibFluids.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/registry/LibFluids.java @@ -23,7 +23,8 @@ public static void register(IEventBus bus) { public static final DeferredRegister zFluidTypes = DeferredRegister.create(Keys.FLUID_TYPES, MODULE_ID); - public static final FluidRegister CRUDE_OIL = FluidRegister.heavy("crude_oil", ColorUtils.BLACK.COAL); + + public static final FluidRegister CRUDE_OIL = FluidRegister.heavy("crude_oil", ColorUtils.BLACK.OBSIDIAN); public static final FluidRegister RESIN = FluidRegister.simple("resin", ColorUtils.ORANGE.TOPAZ); public static final FluidRegister LATEX = FluidRegister.simple("latex", ColorUtils.WHITE.CALCITE); diff --git a/src/main/java/com/devdyna/cakesticklib/setup/registry/LibRecipeTypes.java b/src/main/java/com/devdyna/cakesticklib/setup/registry/LibRecipeTypes.java index 70951cfe..58ccf985 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/registry/LibRecipeTypes.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/registry/LibRecipeTypes.java @@ -3,6 +3,7 @@ import com.devdyna.cakesticklib.CakeStickLib; import com.devdyna.cakesticklib.setup.RecipeRegister; import com.devdyna.cakesticklib.setup.common.recipes.item_replace.ReplaceItemRecipe; +import com.devdyna.cakesticklib.setup.common.recipes.jei_modifier.JeiModiferRecipe; import com.devdyna.cakesticklib.setup.common.recipes.oxidation.CopperOxidationRecipe; import com.devdyna.cakesticklib.setup.common.recipes.tool_durability.DurabilityConsumeRecipe; import com.devdyna.cakesticklib.setup.common.recipes.upgrade_application.UpgradeApplicationRecipe; @@ -14,31 +15,30 @@ import net.neoforged.neoforge.registries.DeferredRegister; public class LibRecipeTypes { - public static void register(IEventBus bus) { - SERIALIZERS.register(bus); - TYPES.register(bus); - } + public static void register(IEventBus bus) { + SERIALIZERS.register(bus); + TYPES.register(bus); + } - public static final DeferredRegister> SERIALIZERS = DeferredRegister - .create(Registries.RECIPE_SERIALIZER, CakeStickLib.MODULE_ID); - public static final DeferredRegister> TYPES = DeferredRegister.create( - Registries.RECIPE_TYPE, - CakeStickLib.MODULE_ID); + public static final DeferredRegister> SERIALIZERS = DeferredRegister + .create(Registries.RECIPE_SERIALIZER, CakeStickLib.MODULE_ID); - public static final RecipeRegister COPPER_OXIDATION = RecipeRegister.of( - "copper_oxidation", - () -> CopperOxidationRecipe.serializer()); + public static final DeferredRegister> TYPES = DeferredRegister.create(Registries.RECIPE_TYPE, + CakeStickLib.MODULE_ID); - public static final RecipeRegister DURABILITY_USE = RecipeRegister.of( - "durability_use", - () -> DurabilityConsumeRecipe.SERIALIZER); + public static final RecipeRegister COPPER_OXIDATION = RecipeRegister.of( + "copper_oxidation", () -> CopperOxidationRecipe.serializer()); - public static final RecipeRegister REPLACING = RecipeRegister.of( - "replace_item", - () -> ReplaceItemRecipe.SERIALIZER); + public static final RecipeRegister DURABILITY_USE = RecipeRegister.of( + "durability_use", () -> DurabilityConsumeRecipe.SERIALIZER); - public static final RecipeRegister UPGRADE_APPLICATION = RecipeRegister.of( - "upgrade_application", - () -> UpgradeApplicationRecipe.serializer()); + public static final RecipeRegister REPLACING = RecipeRegister.of( + "replace_item", () -> ReplaceItemRecipe.SERIALIZER); - } + public static final RecipeRegister UPGRADE_APPLICATION = RecipeRegister.of( + "upgrade_application", () -> UpgradeApplicationRecipe.serializer()); + + public static final RecipeRegister JEI_MODIFIER = RecipeRegister.of( + "jei_modifier", () -> JeiModiferRecipe.serializer()); + +} diff --git a/src/main/java/com/devdyna/cakesticklib/setup/registry/LibTags.java b/src/main/java/com/devdyna/cakesticklib/setup/registry/LibTags.java index 187adcdf..207c0e95 100644 --- a/src/main/java/com/devdyna/cakesticklib/setup/registry/LibTags.java +++ b/src/main/java/com/devdyna/cakesticklib/setup/registry/LibTags.java @@ -152,7 +152,7 @@ public static void register(IEventBus bus) { // stones pre-1.17 (overworld) public static final TagKey LEGACY_STONES = RegistryUtils.tagItem(MODULE_ID, "legacy_stones"); - public static final TagKey LEGACY_STONE_SLABS = RegistryUtils.tagItem(MODULE_ID, "legacy_stone_slabs"); + // only stones post-1.17 public static final TagKey MODERN_STONES = RegistryUtils.tagItem(MODULE_ID, "modern_stones"); @@ -213,8 +213,22 @@ public static void register(IEventBus bus) { public static final TagKey RECYCLE_GOLD_9 = RegistryUtils.tagItem(MODULE_ID, "recipe_recycle/gold/9"); - // TODO IMP : stones tags? (diorite variants , granite variants , andesite - // variants , etc) + public static final TagKey VARIANT_COBBLESTONE = RegistryUtils.tagItem("c", + "variants/stone/cobbled"); + public static final TagKey VARIANT_COBBLED_DEEPSLATE = RegistryUtils.tagItem("c", + "variants/deepslate/cobbled"); + + public static final TagKey VARIANT_STONE = RegistryUtils.tagItem("c", "variants/stone/plain"); + public static final TagKey VARIANT_DIORITE = RegistryUtils.tagItem("c", "variants/diorite/plain"); + public static final TagKey VARIANT_ANDESITE = RegistryUtils.tagItem("c", + "variants/andesite/plain"); + public static final TagKey VARIANT_GRANITE = RegistryUtils.tagItem("c", "variants/granite/plain"); + public static final TagKey VARIANT_TUFF = RegistryUtils.tagItem("c", "variants/tuff/plain"); + public static final TagKey VARIANT_DEEPSLATE = RegistryUtils.tagItem("c", + "variants/deepslate/plain"); + + // TODO polished / bricks / tiles / smooth tags? + // TODO wood variants? }