diff --git a/build.gradle b/build.gradle index a6421a98..c6de475e 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,8 @@ repositories { maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes maven { url = "https://jitpack.io/" } // Mixin Extras, Fabric ASM maven { url = "https://maven.tterrag.com/" } // Flywheel + maven { url = "https://mvn.devos.one/releases" } // Porting Lib Releases + maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge config api port } dependencies { @@ -43,6 +45,11 @@ dependencies { }) modImplementation("net.fabricmc:fabric-loader:${fabric_loader_version}") + // Create Dragon Lib + // include(modImplementation("plus.dragons.createdragonlib:create_dragon_lib-fabric-${minecraft_version}:${dragonlib_version}"){ + // transitive = false + // }) + // dependencies modImplementation("net.fabricmc.fabric-api:fabric-api:${fabric_api_version}") @@ -68,11 +75,17 @@ dependencies { default: println("Unknown recipe viewer specified: ${recipe_viewer}. Must be JEI, REI, EMI, or disabled.") } // if you would like to add integration with them, uncomment them here. -// modCompileOnly("mezz.jei:jei-${minecraft_version}-fabric:${jei_fabric_version}") -// modCompileOnly("mezz.jei:jei-${minecraft_version}-common:${jei_fabric_version}") +// modCompileOnly("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}") +// modCompileOnly("mezz.jei:jei-${minecraft_version}-common:${jei_version}") // modCompileOnly("me.shedaniel:RoughlyEnoughItems-api-fabric:${rei_version}") // modCompileOnly("me.shedaniel:RoughlyEnoughItems-default-plugin-fabric:${rei_version}") // modCompileOnly("dev.emi:emi:${emi_version}") + + // compile against the JEI API but do not include it at runtime + modCompileOnlyApi("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") + modCompileOnlyApi("mezz.jei:jei-${minecraft_version}-fabric-api:${jei_version}") + // at runtime, use the full JEI jar for Fabric + modRuntimeOnly("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}") } loom { diff --git a/gradle.properties b/gradle.properties index 005685e4..54f51aa5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,14 +20,14 @@ parchment_version = 2022.11.06 # Create # https://modrinth.com/mod/create-fabric/versions -create_version = 0.5.1-c-build.1159+mc1.18.2 +create_version = 0.5.1-f-build.1333+mc1.18.2 # Development QOL # Create supports all 3 recipe viewers: JEI, REI, and EMI. This decides which is enabled at runtime. # set to disabled to have none of them. -recipe_viewer = disabled +recipe_viewer = jei # https://modrinth.com/mod/jei/versions -jei_version = 10.2.1.1002 +jei_version = 10.2.1.283 # https://modrinth.com/mod/rei/versions rei_version = 8.3.662 # https://modrinth.com/mod/emi/versions diff --git a/src/main/java/net/dakotapride/garnished/CreateGarnished.java b/src/main/java/net/dakotapride/garnished/CreateGarnished.java index dd95ce0d..427e9a96 100644 --- a/src/main/java/net/dakotapride/garnished/CreateGarnished.java +++ b/src/main/java/net/dakotapride/garnished/CreateGarnished.java @@ -2,7 +2,10 @@ import net.dakotapride.garnished.mixin.PotionBrewingMixin; import net.dakotapride.garnished.modifier.LootTableModifiers; +import net.dakotapride.garnished.recipe.GarnishedFanProcessing; import net.dakotapride.garnished.registry.GarnishedEnchantments; +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.dakotapride.garnished.registry.utility.GarnishedLang; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; @@ -58,6 +61,8 @@ public void onInitialize() { GarnishedTags.setRegister(); GarnishedEnchantments.setRegister(); LootTableModifiers.modifyLootTables(); + GarnishedRecipeTypes.register(); + GarnishedFanProcessing.register(); REGISTRATE.get().register(); // Generation @@ -108,6 +113,9 @@ public void onInitialize() { PotionBrewing.addMix(Potions.MUNDANE, GarnishedItems.SOLEMN_DUST.get(), GarnishedEffects.MUMMIFICATION_POTION); + PotionBrewing.addMix(Potions.THICK, GarnishedItems.FROST.get(), GarnishedEffects.FREEZING_POTION); + PotionBrewing.addMix(GarnishedEffects.FREEZING_POTION, Items.REDSTONE, GarnishedEffects.LONG_FREEZING_POTION); + StrippableBlockRegistry.register(GarnishedBlocks.SEPIA_STEM.get(), GarnishedBlocks.STRIPPED_SEPIA_STEM.get()); StrippableBlockRegistry.register(GarnishedBlocks.SEPIA_HYPHAE.get(), GarnishedBlocks.STRIPPED_SEPIA_HYPHAE.get()); StrippableBlockRegistry.register(GarnishedBlocks.NUT_LOG.get(), GarnishedBlocks.STRIPPED_NUT_LOG.get()); diff --git a/src/main/java/net/dakotapride/garnished/effect/FreezingMobEffect.java b/src/main/java/net/dakotapride/garnished/effect/FreezingMobEffect.java new file mode 100644 index 00000000..1a4c18b5 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/effect/FreezingMobEffect.java @@ -0,0 +1,24 @@ +package net.dakotapride.garnished.effect; + +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; + +import org.jetbrains.annotations.Nullable; + +public class FreezingMobEffect extends MobEffect { + public FreezingMobEffect() { + super(MobEffectCategory.HARMFUL, 0xBEF0F0); + } + + @Override + public boolean isInstantenous() { + return true; + } + + @Override + public void applyInstantenousEffect(@Nullable Entity pSource, @Nullable Entity pIndirectSource, LivingEntity living, int amplifier, double pHealth) { + living.setTicksFrozen(400 * (amplifier + 1)); + } +} diff --git a/src/main/java/net/dakotapride/garnished/item/CashewFruitItem.java b/src/main/java/net/dakotapride/garnished/item/CashewFruitItem.java index 224b0fd5..b86302d1 100644 --- a/src/main/java/net/dakotapride/garnished/item/CashewFruitItem.java +++ b/src/main/java/net/dakotapride/garnished/item/CashewFruitItem.java @@ -1,7 +1,6 @@ package net.dakotapride.garnished.item; import java.util.List; -import java.util.Random; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -11,8 +10,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.stats.Stats; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -27,28 +24,22 @@ public CashewFruitItem(Properties properties) { @Override public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag isAdvanced) { // if (!Screen.hasShiftDown()) { - // tooltip.add(new TranslatableComponent("text.garnished.hold_shift").withStyle(ChatFormatting.GRAY)); + // tooltip.add(Component.translatable("text.garnished.hold_shift").withStyle(ChatFormatting.GRAY)); // } // // if (Screen.hasShiftDown()) { - // tooltip.add(new TextComponent("")); - // tooltip.add(new TranslatableComponent("text.garnished.cashew_fruit.poisoning").withStyle(ChatFormatting.DARK_PURPLE)); - // tooltip.add(new TextComponent("")); - // tooltip.add(new TranslatableComponent("text.garnished.cashew_fruit.poisoning.chance").withStyle(ChatFormatting.DARK_PURPLE)); + // tooltip.add(Component.literal("")); + // tooltip.add(Component.translatable("text.garnished.cashew_fruit.poisoning").withStyle(ChatFormatting.DARK_PURPLE)); + // tooltip.add(Component.literal("")); + // tooltip.add(Component.translatable("text.garnished.cashew_fruit.poisoning.chance").withStyle(ChatFormatting.DARK_PURPLE)); // } } @Override public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { - int random = new Random().nextInt(4); - if (livingEntity instanceof ServerPlayer serverPlayer) { CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); serverPlayer.awardStat(Stats.ITEM_USED.get(this)); - - if (random == 1) { - livingEntity.addEffect(new MobEffectInstance(MobEffects.POISON, getCashewFruitEffectDuration)); - } } return super.finishUsingItem(stack, level, livingEntity); diff --git a/src/main/java/net/dakotapride/garnished/item/ChilledAppleFoodItem.java b/src/main/java/net/dakotapride/garnished/item/ChilledAppleFoodItem.java new file mode 100644 index 00000000..75274ba5 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/ChilledAppleFoodItem.java @@ -0,0 +1,10 @@ +package net.dakotapride.garnished.item; + +import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.world.item.Item; + +public class ChilledAppleFoodItem extends Item implements IGarnishedItem { + public ChilledAppleFoodItem(Properties properties) { + super(properties.food(GarnishedFoods.CHILLED_APPLE)); + } +} diff --git a/src/main/java/net/dakotapride/garnished/item/CookedPolarBearMeatItem.java b/src/main/java/net/dakotapride/garnished/item/CookedPolarBearMeatItem.java new file mode 100644 index 00000000..ead233f0 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/CookedPolarBearMeatItem.java @@ -0,0 +1,11 @@ +package net.dakotapride.garnished.item; + +import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.world.item.Item; + +public class CookedPolarBearMeatItem extends Item implements IGarnishedItem { + public CookedPolarBearMeatItem(Properties properties) { + super(properties.food(GarnishedFoods.COOKED_POLAR_BEAR_MEAT)); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/item/DesolateStewFoodItem.java b/src/main/java/net/dakotapride/garnished/item/DesolateStewFoodItem.java index d6c337f0..882a684b 100644 --- a/src/main/java/net/dakotapride/garnished/item/DesolateStewFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/DesolateStewFoodItem.java @@ -2,14 +2,12 @@ import org.jetbrains.annotations.NotNull; -import net.dakotapride.garnished.registry.GarnishedEffects; import net.dakotapride.garnished.registry.GarnishedFoods; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.server.level.ServerPlayer; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -31,11 +29,9 @@ public DesolateStewFoodItem(Properties properties) { serverPlayer.awardStat(Stats.ITEM_USED.get(this)); } - if (livingEntity instanceof ServerPlayer serverPlayer && getWrappedTangleEffectChance()) { + if (livingEntity instanceof ServerPlayer serverPlayer) { CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); serverPlayer.awardStat(Stats.ITEM_USED.get(this)); - - livingEntity.addEffect(new MobEffectInstance(GarnishedEffects.COGNATE, getCognateEffectBaseTick, 1)); } if (stack.isEmpty()) { diff --git a/src/main/java/net/dakotapride/garnished/item/DustyRegaleFoodItem.java b/src/main/java/net/dakotapride/garnished/item/DustyRegaleFoodItem.java index c769c023..3e17b94c 100644 --- a/src/main/java/net/dakotapride/garnished/item/DustyRegaleFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/DustyRegaleFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class DustyRegaleFoodItem extends Item implements IGarnishedItem { public DustyRegaleFoodItem(Properties properties) { super(properties.food(GarnishedFoods.DUSTY_REGALE)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/EtherealConcoctionFoodItem.java b/src/main/java/net/dakotapride/garnished/item/EtherealConcoctionFoodItem.java index 7d5f755c..d8cad24f 100644 --- a/src/main/java/net/dakotapride/garnished/item/EtherealConcoctionFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/EtherealConcoctionFoodItem.java @@ -2,14 +2,12 @@ import org.jetbrains.annotations.NotNull; -import net.dakotapride.garnished.registry.GarnishedEffects; import net.dakotapride.garnished.registry.GarnishedFoods; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.server.level.ServerPlayer; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -31,11 +29,9 @@ public EtherealConcoctionFoodItem(Properties properties) { serverPlayer.awardStat(Stats.ITEM_USED.get(this)); } - if (livingEntity instanceof ServerPlayer serverPlayer && getWrappedTangleEffectChance()) { + if (livingEntity instanceof ServerPlayer serverPlayer) { CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); serverPlayer.awardStat(Stats.ITEM_USED.get(this)); - - livingEntity.addEffect(new MobEffectInstance(GarnishedEffects.COGNATE, getCognateEffectBaseTick, 1)); } if (stack.isEmpty()) { diff --git a/src/main/java/net/dakotapride/garnished/item/ExplorersConcoctionFoodItem.java b/src/main/java/net/dakotapride/garnished/item/ExplorersConcoctionFoodItem.java new file mode 100644 index 00000000..7d0a28c9 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/ExplorersConcoctionFoodItem.java @@ -0,0 +1,53 @@ +package net.dakotapride.garnished.item; + +import org.jetbrains.annotations.NotNull; + +import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; + +public class ExplorersConcoctionFoodItem extends Item implements IGarnishedItem { + public ExplorersConcoctionFoodItem(Properties properties) { + super(properties.food(GarnishedFoods.EXPLORERS_CONCOCTION).stacksTo(1)); + } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/item/FrostedDessertFoodItem.java b/src/main/java/net/dakotapride/garnished/item/FrostedDessertFoodItem.java new file mode 100644 index 00000000..f8e94952 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/FrostedDessertFoodItem.java @@ -0,0 +1,53 @@ +package net.dakotapride.garnished.item; + +import org.jetbrains.annotations.NotNull; + +import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; + +public class FrostedDessertFoodItem extends Item implements IGarnishedItem { + public FrostedDessertFoodItem(Properties properties) { + super(properties.food(GarnishedFoods.FROSTED_DESSERT).stacksTo(1)); + } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/item/GalvanicHauntingFoodItem.java b/src/main/java/net/dakotapride/garnished/item/GalvanicHauntingFoodItem.java index f6d8c4c4..40680ce2 100644 --- a/src/main/java/net/dakotapride/garnished/item/GalvanicHauntingFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/GalvanicHauntingFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class GalvanicHauntingFoodItem extends Item implements IGarnishedItem { public GalvanicHauntingFoodItem(Properties properties) { super(properties.food(GarnishedFoods.GALVANIC_HAUNTING).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/IcyMasticChunkFoodItem.java b/src/main/java/net/dakotapride/garnished/item/IcyMasticChunkFoodItem.java index f702dff5..62f9e8cc 100644 --- a/src/main/java/net/dakotapride/garnished/item/IcyMasticChunkFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/IcyMasticChunkFoodItem.java @@ -25,8 +25,8 @@ public IcyMasticChunkFoodItem(Properties properties) { CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); serverPlayer.awardStat(Stats.ITEM_USED.get(this)); - livingEntity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, baseTick * 5, 2)); - livingEntity.addEffect(new MobEffectInstance(MobEffects.REGENERATION, baseTick * 8, 1)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 100, 2)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 160, 1)); } return super.finishUsingItem(stack, level, livingEntity); diff --git a/src/main/java/net/dakotapride/garnished/item/MuesliFoodItem.java b/src/main/java/net/dakotapride/garnished/item/MuesliFoodItem.java index d488438e..88d6868c 100644 --- a/src/main/java/net/dakotapride/garnished/item/MuesliFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/MuesliFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class MuesliFoodItem extends Item implements IGarnishedItem { public MuesliFoodItem(Properties properties) { super(properties.food(GarnishedFoods.MUESLI).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/MurkyMacadamiaMaliceFoodItem.java b/src/main/java/net/dakotapride/garnished/item/MurkyMacadamiaMaliceFoodItem.java index a047de3a..6b6e8908 100644 --- a/src/main/java/net/dakotapride/garnished/item/MurkyMacadamiaMaliceFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/MurkyMacadamiaMaliceFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class MurkyMacadamiaMaliceFoodItem extends Item implements IGarnishedItem { public MurkyMacadamiaMaliceFoodItem(Properties properties) { super(properties.food(GarnishedFoods.MURKY_MACADAMIA_MALICE).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/OvergrownBrewFoodItem.java b/src/main/java/net/dakotapride/garnished/item/OvergrownBrewFoodItem.java index c6ca4e1d..703b87ab 100644 --- a/src/main/java/net/dakotapride/garnished/item/OvergrownBrewFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/OvergrownBrewFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class OvergrownBrewFoodItem extends Item implements IGarnishedItem { public OvergrownBrewFoodItem(Properties properties) { super(properties.food(GarnishedFoods.OVERGROWN_BREW).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/PricklyPearStewFoodItem.java b/src/main/java/net/dakotapride/garnished/item/PricklyPearStewFoodItem.java index ccda6dff..405fd246 100644 --- a/src/main/java/net/dakotapride/garnished/item/PricklyPearStewFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/PricklyPearStewFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class PricklyPearStewFoodItem extends Item implements IGarnishedItem { public PricklyPearStewFoodItem(Properties properties) { super(properties.food(GarnishedFoods.PRICKLY_PEAR_STEW).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/RawPolarBearMeatItem.java b/src/main/java/net/dakotapride/garnished/item/RawPolarBearMeatItem.java new file mode 100644 index 00000000..9b34b73b --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/RawPolarBearMeatItem.java @@ -0,0 +1,11 @@ +package net.dakotapride.garnished.item; + +import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.world.item.Item; + +public class RawPolarBearMeatItem extends Item implements IGarnishedItem { + public RawPolarBearMeatItem(Properties properties) { + super(properties.food(GarnishedFoods.RAW_POLAR_BEAR_MEAT)); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/item/ShiningDishFoodItem.java b/src/main/java/net/dakotapride/garnished/item/ShiningDishFoodItem.java index ca1ab0df..61114849 100644 --- a/src/main/java/net/dakotapride/garnished/item/ShiningDishFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/ShiningDishFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class ShiningDishFoodItem extends Item implements IGarnishedItem { public ShiningDishFoodItem(Properties properties) { super(properties.food(GarnishedFoods.SHINING_DISH).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/StewOfTheDamnedFoodItem.java b/src/main/java/net/dakotapride/garnished/item/StewOfTheDamnedFoodItem.java index 3fe90b0b..1f776725 100644 --- a/src/main/java/net/dakotapride/garnished/item/StewOfTheDamnedFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/StewOfTheDamnedFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class StewOfTheDamnedFoodItem extends Item implements IGarnishedItem { public StewOfTheDamnedFoodItem(Properties properties) { super(properties.food(GarnishedFoods.STEW_OF_THE_DAMNED).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/VastBrewFoodItem.java b/src/main/java/net/dakotapride/garnished/item/VastBrewFoodItem.java index 24819df9..ac187c27 100644 --- a/src/main/java/net/dakotapride/garnished/item/VastBrewFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/VastBrewFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; + +import org.jetbrains.annotations.NotNull; public class VastBrewFoodItem extends Item implements IGarnishedItem { public VastBrewFoodItem(Properties properties) { super(properties.food(GarnishedFoods.VAST_BREW).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/VermilionStewFoodItem.java b/src/main/java/net/dakotapride/garnished/item/VermilionStewFoodItem.java index a1077118..5dc65d3f 100644 --- a/src/main/java/net/dakotapride/garnished/item/VermilionStewFoodItem.java +++ b/src/main/java/net/dakotapride/garnished/item/VermilionStewFoodItem.java @@ -1,10 +1,52 @@ package net.dakotapride.garnished.item; +import org.jetbrains.annotations.NotNull; + import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; public class VermilionStewFoodItem extends Item implements IGarnishedItem { public VermilionStewFoodItem(Properties properties) { super(properties.food(GarnishedFoods.VERMILION_STEW).stacksTo(1)); } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } } diff --git a/src/main/java/net/dakotapride/garnished/item/VoidStroganoffFoodItem.java b/src/main/java/net/dakotapride/garnished/item/VoidStroganoffFoodItem.java new file mode 100644 index 00000000..87b2d4be --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/VoidStroganoffFoodItem.java @@ -0,0 +1,53 @@ +package net.dakotapride.garnished.item; + +import org.jetbrains.annotations.NotNull; + +import net.dakotapride.garnished.registry.GarnishedFoods; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; + +public class VoidStroganoffFoodItem extends Item implements IGarnishedItem { + public VoidStroganoffFoodItem(Properties properties) { + super(properties.food(GarnishedFoods.VOID_STROGANOFF).stacksTo(1)); + } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity livingEntity) { + super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.BOWL); + } else { + if (livingEntity instanceof Player && !((Player)livingEntity).getAbilities().instabuild) { + ItemStack itemStack = new ItemStack(Items.BOWL); + Player player = (Player)livingEntity; + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } + + return stack; + } + + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/item/hatchet/HatchetUtils.java b/src/main/java/net/dakotapride/garnished/item/hatchet/HatchetUtils.java index a8c453e1..71e041e4 100644 --- a/src/main/java/net/dakotapride/garnished/item/hatchet/HatchetUtils.java +++ b/src/main/java/net/dakotapride/garnished/item/hatchet/HatchetUtils.java @@ -2,10 +2,9 @@ import java.util.Random; -import net.dakotapride.garnished.registry.GarnishedBlocks; - import org.spongepowered.asm.mixin.Unique; +import net.dakotapride.garnished.registry.GarnishedBlocks; import net.dakotapride.garnished.registry.GarnishedEnchantments; import net.dakotapride.garnished.registry.GarnishedItems; import net.dakotapride.garnished.registry.GarnishedTags; @@ -13,6 +12,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.Enchantment; @@ -43,7 +43,7 @@ public static void getDrops(LivingEntity entity, LivingEntity attacker) { String mob = "Unavailable"; String enchant = "Unavailable"; - // Salvaging Loot Drops + // Salvaging Loot Drops - Passive/Neutral mobs if (hasSalvaging(attacker)) { enchant = "Salvaging"; @@ -108,20 +108,62 @@ public static void getDrops(LivingEntity entity, LivingEntity attacker) { } } - if (MobHelper.isTurtle(entity)) { - mob = "Turtle"; + // if (MobHelper.isFrog(entity)) { + // mob = "Frog"; + // + // int magmaCreamDropChance = random.nextInt(28); + // int moltenRemnantDropChance = 0; + // + // if (isCorrectEnchantmentLevel(salvaging, attacker, 1)) { + // moltenRemnantDropChance = random.nextInt(60); + // } else if (isCorrectEnchantmentLevel(salvaging, attacker, 2)) { + // moltenRemnantDropChance = random.nextInt(40); + // } + // + // if (magmaCreamDropChance == 1) { + // int magmaCreamCount = singleCount + random.nextInt(2); + // + // entity.spawnAtLocation(new ItemStack(Items.MAGMA_CREAM, magmaCreamCount)); + // } + // + // if (moltenRemnantDropChance == 1) { + // int moltenRemnantCount = singleCount + random.nextInt(1); + // + // entity.spawnAtLocation(new ItemStack(GarnishedItems.MOLTEN_REMNANT.get(), moltenRemnantCount)); + // } + // } + + if (MobHelper.isTurtle(entity)) { + mob = "Turtle"; + + int voltaicSeaGrassDropChance = random.nextInt(12); + + if (voltaicSeaGrassDropChance == 1) { + int volaticSeaGrassDropCount = singleCount + random.nextInt(2); + + entity.spawnAtLocation(new ItemStack(GarnishedBlocks.VOLTAIC_SEA_GRASS.get(), volaticSeaGrassDropCount)); + } + } - int voltaicSeaGrassDropChance = random.nextInt(12); + if (MobHelper.isPolarBear(entity) && !entity.isBaby()) { + mob = "PolarBear"; - if (voltaicSeaGrassDropChance == 1) { - int volaticSeaGrassDropCount = singleCount + random.nextInt(2); + int polarBearHideDropChance = random.nextInt(4); + int polarBearHideDropCount = singleCount + random.nextInt(3); + int rawPolarBearMeatDropChance = random.nextInt(2); + int rawPolarBearMeatDropCount = singleCount + random.nextInt(2); - entity.spawnAtLocation(new ItemStack(GarnishedBlocks.VOLTAIC_SEA_GRASS.get(), volaticSeaGrassDropCount)); - } - } + if (polarBearHideDropChance == 1) { + entity.spawnAtLocation(new ItemStack(GarnishedItems.POLAR_BEAR_HIDE.get(), polarBearHideDropCount)); + } + + if (rawPolarBearMeatDropChance == 1) { + entity.spawnAtLocation(new ItemStack(GarnishedItems.RAW_POLAR_BEAR_MEAT.get(), rawPolarBearMeatDropCount)); + } + } } - // Ravaging Loot Drops + // Ravaging Loot Drops - Hostile mobs if (hasRavaging(attacker)) { enchant = "Ravaging"; @@ -140,6 +182,16 @@ public static void getDrops(LivingEntity entity, LivingEntity attacker) { } else if (moltenRemnantDropChance == 1) { entity.spawnAtLocation(new ItemStack(GarnishedItems.MOLTEN_REMNANT.get(), moltenRemnantDropCount)); } + + // if (froglightDropChance == 1) { + // if (froglightVariant == 0) { + // entity.spawnAtLocation(new ItemStack(Items.OCHRE_FROGLIGHT, singleCount)); + // } else if (froglightVariant == 1) { + // entity.spawnAtLocation(new ItemStack(Items.VERDANT_FROGLIGHT, singleCount)); + // } else if (froglightVariant == 2) { + // entity.spawnAtLocation(new ItemStack(Items.PEARLESCENT_FROGLIGHT, singleCount)); + // } + // } } if (MobHelper.isBlaze(entity)) { @@ -169,18 +221,37 @@ public static void getDrops(LivingEntity entity, LivingEntity attacker) { int additionalDropCount = singleCount + random.nextInt(3); int ghastTearDropChance = random.nextInt(12); int ghastTearDropCount = singleCount + random.nextInt(2); - int ghastTendrilDropChance = random.nextInt(8); - int ghastTendrilDropCount = singleCount + random.nextInt(2); - - if (additionalDropChance == 1) { - entity.spawnAtLocation(new ItemStack(Items.GUNPOWDER, additionalDropCount)); - } else if (ghastTearDropChance == 1) { - entity.spawnAtLocation(new ItemStack(Items.GHAST_TEAR, ghastTearDropCount)); - } - - if (ghastTendrilDropChance == 1) { - entity.spawnAtLocation(new ItemStack(GarnishedItems.GHAST_TENDRIL.get(), ghastTendrilDropCount)); - } + int ghastTendrilDropChance = random.nextInt(8); + int ghastTendrilDropCount = singleCount + random.nextInt(2); + + if (additionalDropChance == 1) { + entity.spawnAtLocation(new ItemStack(Items.GUNPOWDER, additionalDropCount)); + } else if (ghastTearDropChance == 1) { + entity.spawnAtLocation(new ItemStack(Items.GHAST_TEAR, ghastTearDropCount)); + } + + if (ghastTendrilDropChance == 1) { + entity.spawnAtLocation(new ItemStack(GarnishedItems.GHAST_TENDRIL.get(), ghastTendrilDropCount)); + } + } + + // if (MobHelper.isWarden(entity)) { + // mob = "Warden"; + // + // int rawTenebrousMeatDropCount = singleCount + random.nextInt(6); + // + // entity.spawnAtLocation(new ItemStack(GarnishedItems.RAW_TENEBROUS_MEAT.get(), rawTenebrousMeatDropCount)); + // } + + if (MobHelper.isStray(entity)) { + mob = "Stray"; + + int numbingParchmentDropChance = random.nextInt(6); + int numbingParchmentDropCount = singleCount + random.nextInt(3); + + if (numbingParchmentDropChance == 1) { + entity.spawnAtLocation(new ItemStack(GarnishedItems.NUMBING_PARCHMENT.get(), numbingParchmentDropCount)); + } } } @@ -208,6 +279,10 @@ public static boolean canApplyRavagingEffects(LivingEntity entity) { return entity.getMainHandItem().is(GarnishedTags.HATCHETS_TAG) && hasEnchantment(ravaging, entity) && entity.getHealth() <= 10; } + public static boolean canBeUsedToStripLogs(ItemStack stack) { + return stack.getItem() instanceof AxeItem || stack.getItem() instanceof HatchetToolItem; + } + @Unique @@ -224,6 +299,18 @@ private static boolean isCorrectEnchantmentLevel(Enchantment enchantment, Living public static class MobHelper { public MobHelper() {} + public static boolean isStray(Entity entity) { + return entity.getType() == EntityType.STRAY; + } + + public static boolean isPolarBear(Entity entity) { + return entity.getType() == EntityType.POLAR_BEAR; + } + + // public static boolean isWarden(Entity entity) { + // return entity.getType() == EntityType.WARDEN; + // } + public static boolean isPhantom(Entity entity) { return entity.getType() == EntityType.PHANTOM; } @@ -245,7 +332,7 @@ public static boolean isSkeleton(Entity entity) { } public static boolean isSkeletonOrSimilar(Entity entity) { - return isWitherBoss(entity) || isWitherSkeleton(entity) || isSkeleton(entity) || isSkeletonHorse(entity) || isPhantom(entity); + return isWitherBoss(entity) || isWitherSkeleton(entity) || isSkeleton(entity) || isSkeletonHorse(entity) || isPhantom(entity) || isStray(entity); } public static boolean isHusk(Entity entity) { @@ -300,10 +387,6 @@ public static boolean isFish(Entity entity) { return isSalmon(entity) || isCod(entity) || isPufferfish(entity) || isTropicalFish(entity); } - public static boolean isTurtle(Entity entity) { - return entity.getType() == EntityType.TURTLE; - } - public static boolean isSquid(Entity entity) { return entity.getType() == EntityType.SQUID; } @@ -315,12 +398,32 @@ public static boolean isGlowSquid(Entity entity) { public static boolean isSquidOrSimilar(Entity entity) { return isSquid(entity) || isGlowSquid(entity); } + + // public static boolean isFrog(Entity entity) { + // return entity.getType() == EntityType.FROG; + // } + + public static boolean isTurtle(Entity entity) { + return entity.getType() == EntityType.TURTLE; + } + + // public static boolean isTadpole(Entity entity) { + // return entity.getType() == EntityType.TADPOLE; + // } + // + // public static boolean isFrogOrSimilar(Entity entity) { + // return isFrog(entity) || isTadpole(entity); + // } + // + // public static boolean isAllay(Entity entity) { + // return entity.getType() == EntityType.ALLAY; + // } } public static class DevAssistance { public static void printLootTableToConsole(String enchant, String mob) { - if (FabricLoader.getInstance().isDevelopmentEnvironment()) { + if (!FabricLoader.getInstance().isDevelopmentEnvironment()) { System.out.println("[Create: Garnished] " + enchant + " Loot Tables Loaded (MobHelper.is" + mob + "(entity))"); } } diff --git a/src/main/java/net/dakotapride/garnished/item/scratch_paper/FrostScratchPaperItemRenderer.java b/src/main/java/net/dakotapride/garnished/item/scratch_paper/FrostScratchPaperItemRenderer.java new file mode 100644 index 00000000..881cb710 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/scratch_paper/FrostScratchPaperItemRenderer.java @@ -0,0 +1,81 @@ +package net.dakotapride.garnished.item.scratch_paper; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; +import com.simibubi.create.foundation.item.render.CustomRenderedItemModel; +import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer; +import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; + +public class FrostScratchPaperItemRenderer extends CustomRenderedItemModelRenderer { + + @Override + protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, + ItemTransforms.TransformType transformType, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { + ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); + LocalPlayer player = Minecraft.getInstance().player; + float partialTicks = AnimationTickHolder.getPartialTicks(); + + boolean leftHand = transformType == ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND; + boolean firstPerson = leftHand || transformType == ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND; + + CompoundTag tag = stack.getOrCreateTag(); + boolean jeiMode = tag.contains("JEI"); + + ms.pushPose(); + + if (tag.contains("ClearsFreezing")) { + ms.pushPose(); + + if (transformType == ItemTransforms.TransformType.GUI) { + ms.translate(0.0F, .2f, 1.0F); + ms.scale(.75f, .75f, .75f); + } else { + int modifier = leftHand ? -1 : 1; + ms.mulPose(Vector3f.YP.rotationDegrees(modifier * 40)); + } + + // Reverse bobbing + float time = (float) (!jeiMode ? player.getUseItemRemainingTicks() + : (-AnimationTickHolder.getTicks()) % stack.getUseDuration()) - partialTicks + 1.0F; + if (time / (float) stack.getUseDuration() < 0.8F) { + float bobbing = -Mth.abs(Mth.cos(time / 4.0F * (float) Math.PI) * 0.1F); + + if (transformType == ItemTransforms.TransformType.GUI) + ms.translate(bobbing, bobbing, 0.0F); + else + ms.translate(0.0f, bobbing, 0.0F); + } + + ItemStack toPolish = ItemStack.of(tag.getCompound("ClearsFreezing")); + itemRenderer.renderStatic(toPolish, ItemTransforms.TransformType.NONE, light, overlay, ms, buffer, 0); + + ms.popPose(); + } + + if (firstPerson) { + int itemInUseCount = player.getUseItemRemainingTicks(); + if (itemInUseCount > 0) { + int modifier = leftHand ? -1 : 1; + ms.translate(modifier * .5f, 0, -.25f); + ms.mulPose(Vector3f.ZP.rotationDegrees(modifier * 40)); + ms.mulPose(Vector3f.XP.rotationDegrees(modifier * 10)); + ms.mulPose(Vector3f.YP.rotationDegrees(modifier * 90)); + } + } + + itemRenderer.render(stack, ItemTransforms.TransformType.NONE, false, ms, buffer, light, overlay, model.getOriginalModel()); + + ms.popPose(); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/item/scratch_paper/PolarHideScratchPaperItem.java b/src/main/java/net/dakotapride/garnished/item/scratch_paper/PolarHideScratchPaperItem.java new file mode 100644 index 00000000..f900e958 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/scratch_paper/PolarHideScratchPaperItem.java @@ -0,0 +1,189 @@ +package net.dakotapride.garnished.item.scratch_paper; + +import java.util.Random; + +import org.jetbrains.annotations.NotNull; + +import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.foundation.item.CustomUseEffectsItem; +import com.simibubi.create.foundation.mixin.accessor.LivingEntityAccessor; +import com.simibubi.create.foundation.utility.VecHelper; + +import io.github.fabricators_of_create.porting_lib.util.NBTSerializer; +import net.dakotapride.garnished.registry.GarnishedItems; +import net.minecraft.core.particles.ItemParticleOption; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; + +public class PolarHideScratchPaperItem extends ScratchPaperItem implements CustomUseEffectsItem { + public PolarHideScratchPaperItem(Properties pProperties) { + super(MobEffects.MOVEMENT_SLOWDOWN, GarnishedItems.FROST, Items.BLUE_ICE.getDefaultInstance(), pProperties); + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, Player player, @NotNull InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); + InteractionResultHolder FAIL = new InteractionResultHolder<>(InteractionResult.FAIL, itemstack); + + if (itemstack.getOrCreateTag() + .contains("ClearsEffect")) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.PASS, itemstack); + } + + InteractionHand otherHand = + hand == InteractionHand.MAIN_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND; + ItemStack itemInOtherHand = player.getItemInHand(otherHand); + if ((player.hasEffect(effect) || player.isFreezing() || player.getTicksFrozen() > 0) && itemInOtherHand.is(utility.get())) { + ItemStack item = itemInOtherHand.copy(); + ItemStack toUtilize = item.split(1); + player.startUsingItem(hand); + itemstack.getOrCreateTag() + .put("ClearsEffect", NBTSerializer.serializeNBT(toUtilize)); + player.setItemInHand(otherHand, item); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, itemstack); + } + + BlockHitResult raytraceresult = getPlayerPOVHitResult(level, player, ClipContext.Fluid.NONE); + Vec3 hitVec = raytraceresult.getLocation(); + + AABB bb = new AABB(hitVec, hitVec).inflate(1f); + ItemEntity pickUp = null; + for (ItemEntity itemEntity : level.getEntitiesOfClass(ItemEntity.class, bb)) { + if (!itemEntity.isAlive()) + continue; + if (itemEntity.position() + .distanceTo(player.position()) > 3) + continue; + if (!(player.hasEffect(effect) || player.isFreezing() || player.getTicksFrozen() > 0) && itemInOtherHand.is(utility.get())) + continue; + pickUp = itemEntity; + break; + } + + if (pickUp == null) + return FAIL; + + ItemStack item = pickUp.getItem() + .copy(); + ItemStack toUtilize = item.split(1); + + player.startUsingItem(hand); + + if (!level.isClientSide) { + itemstack.getOrCreateTag() + .put("ClearsEffect", NBTSerializer.serializeNBT(toUtilize)); + if (item.isEmpty()) + pickUp.discard(); + else + pickUp.setItem(item); + } + + return new InteractionResultHolder<>(InteractionResult.SUCCESS, itemstack); + } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity living) { + if (!(living instanceof Player player)) + return stack; + CompoundTag tag = stack.getOrCreateTag(); + if (tag.contains("ClearsEffect")) { + + if (level.isClientSide) { + spawnParticles(living.getEyePosition(1).add(living.getLookAngle().scale(.5f)), level, particleStack); + return stack; + } + + player.removeEffect(effect); + player.setTicksFrozen(0); + tag.remove("ClearsEffect"); + stack.hurtAndBreak(1, living, p -> p.broadcastBreakEvent(p.getUsedItemHand())); + } + + return stack; + } + + public static void spawnParticles(Vec3 location, Level world, ItemStack particleStack) { + for (int i = 0; i < 20; i++) { + Vec3 motion = VecHelper.offsetRandomly(Vec3.ZERO, world.random, 1 / 8f); + world.addParticle(new ItemParticleOption(ParticleTypes.ITEM, particleStack), location.x, location.y, + location.z, motion.x, motion.y, motion.z); + } + } + + @Override + public void releaseUsing(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity living, int timeLeft) { + if (!(living instanceof Player player)) + return; + CompoundTag tag = stack.getOrCreateTag(); + if (tag.contains("ClearsEffect")) { + ItemStack toUtilize = ItemStack.of(tag.getCompound("ClearsEffect")); + player.getInventory().placeItemBackInInventory(toUtilize); + tag.remove("ClearsEffect"); + } + } + + @Override + public Boolean shouldTriggerUseEffects(ItemStack stack, LivingEntity entity) { + // Trigger every tick so that we have more fine grain control over the animation + return true; + } + + @Override + public boolean triggerUseEffects(ItemStack stack, LivingEntity entity, int count, Random random) { + CompoundTag tag = stack.getOrCreateTag(); + if (tag.contains("ClearsEffect")) { + ItemStack utilityItem = ItemStack.of(tag.getCompound("ClearsEffect")); + ((LivingEntityAccessor) entity).create$callSpawnItemParticles(utilityItem, 1); + } + + // After 6 ticks play the sound every 7th + if ((entity.getTicksUsingItem() - 6) % 7 == 0) + entity.playSound(entity.getEatingSound(stack), 0.9F + 0.2F * random.nextFloat(), + random.nextFloat() * 0.2F + 0.9F); + + return true; + } + + @Override + public @NotNull SoundEvent getEatingSound() { + return AllSoundEvents.SANDING_SHORT.getMainEvent(); + } + + @Override + public @NotNull UseAnim getUseAnimation(@NotNull ItemStack stack) { + return UseAnim.EAT; + } + + @Override + public int getUseDuration(@NotNull ItemStack stack) { + return 16; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + + // @Override + // @OnlyIn(Dist.CLIENT) + // public void initializeClient(Consumer consumer) { + // consumer.accept(SimpleCustomRenderer.create(this, new ScratchPaperItemRenderer())); + // } +} diff --git a/src/main/java/net/dakotapride/garnished/item/scratch_paper/ScratchPaperItem.java b/src/main/java/net/dakotapride/garnished/item/scratch_paper/ScratchPaperItem.java new file mode 100644 index 00000000..76a3346d --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/scratch_paper/ScratchPaperItem.java @@ -0,0 +1,202 @@ +package net.dakotapride.garnished.item.scratch_paper; + +import java.util.Random; +import java.util.function.Supplier; + +import org.jetbrains.annotations.NotNull; + +import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.foundation.item.CustomUseEffectsItem; +import com.simibubi.create.foundation.mixin.accessor.LivingEntityAccessor; +import com.simibubi.create.foundation.utility.VecHelper; + +import io.github.fabricators_of_create.porting_lib.util.NBTSerializer; +import net.minecraft.core.particles.ItemParticleOption; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; + +public class ScratchPaperItem extends Item implements CustomUseEffectsItem { + MobEffect effect; + Supplier utility; + ItemStack particleStack; + + public ScratchPaperItem(MobEffect effect, Supplier utilityItem, Properties pProperties) { + super(pProperties.defaultDurability(16)); + this.effect = effect; + this.utility = utilityItem; + this.particleStack = utilityItem.get().getDefaultInstance(); + } + + public ScratchPaperItem(MobEffect effect, Supplier utilityItem, ItemStack particleStack, Properties pProperties) { + super(pProperties.defaultDurability(16)); + this.effect = effect; + this.utility = utilityItem; + this.particleStack = particleStack; + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, Player player, @NotNull InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); + InteractionResultHolder FAIL = new InteractionResultHolder<>(InteractionResult.FAIL, itemstack); + + if (itemstack.getOrCreateTag() + .contains("ClearsEffect")) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.PASS, itemstack); + } + + InteractionHand otherHand = + hand == InteractionHand.MAIN_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND; + ItemStack itemInOtherHand = player.getItemInHand(otherHand); + if (player.hasEffect(effect) && itemInOtherHand.is(utility.get())) { + ItemStack item = itemInOtherHand.copy(); + ItemStack toUtilize = item.split(1); + player.startUsingItem(hand); + itemstack.getOrCreateTag() + .put("ClearsEffect", NBTSerializer.serializeNBT(toUtilize)); + player.setItemInHand(otherHand, item); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, itemstack); + } + + BlockHitResult raytraceresult = getPlayerPOVHitResult(level, player, ClipContext.Fluid.NONE); + Vec3 hitVec = raytraceresult.getLocation(); + + AABB bb = new AABB(hitVec, hitVec).inflate(1f); + ItemEntity pickUp = null; + for (ItemEntity itemEntity : level.getEntitiesOfClass(ItemEntity.class, bb)) { + if (!itemEntity.isAlive()) + continue; + if (itemEntity.position() + .distanceTo(player.position()) > 3) + continue; + if (!player.hasEffect(effect) && itemInOtherHand.is(utility.get())) + continue; + pickUp = itemEntity; + break; + } + + if (pickUp == null) + return FAIL; + + ItemStack item = pickUp.getItem() + .copy(); + ItemStack toUtilize = item.split(1); + + player.startUsingItem(hand); + + if (!level.isClientSide) { + itemstack.getOrCreateTag() + .put("ClearsEffect", NBTSerializer.serializeNBT(toUtilize)); + if (item.isEmpty()) + pickUp.discard(); + else + pickUp.setItem(item); + } + + return new InteractionResultHolder<>(InteractionResult.SUCCESS, itemstack); + } + + @Override + public @NotNull ItemStack finishUsingItem(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity living) { + if (!(living instanceof Player player)) + return stack; + CompoundTag tag = stack.getOrCreateTag(); + if (tag.contains("ClearsEffect")) { + + if (level.isClientSide) { + spawnParticles(living.getEyePosition(1).add(living.getLookAngle().scale(.5f)), level, particleStack); + return stack; + } + + player.removeEffect(effect); + tag.remove("ClearsEffect"); + stack.hurtAndBreak(1, living, p -> p.broadcastBreakEvent(p.getUsedItemHand())); + } + + return stack; + } + + public static void spawnParticles(Vec3 location, Level world, ItemStack particleStack) { + for (int i = 0; i < 20; i++) { + Vec3 motion = VecHelper.offsetRandomly(Vec3.ZERO, world.random, 1 / 8f); + world.addParticle(new ItemParticleOption(ParticleTypes.ITEM, particleStack), location.x, location.y, + location.z, motion.x, motion.y, motion.z); + } + } + + @Override + public void releaseUsing(@NotNull ItemStack stack, @NotNull Level level, @NotNull LivingEntity living, int timeLeft) { + if (!(living instanceof Player player)) + return; + CompoundTag tag = stack.getOrCreateTag(); + if (tag.contains("ClearsEffect")) { + ItemStack toUtilize = ItemStack.of(tag.getCompound("ClearsEffect")); + player.getInventory().placeItemBackInInventory(toUtilize); + tag.remove("ClearsEffect"); + } + } + + @Override + public Boolean shouldTriggerUseEffects(ItemStack stack, LivingEntity entity) { + // Trigger every tick so that we have more fine grain control over the animation + return true; + } + + @Override + public boolean triggerUseEffects(ItemStack stack, LivingEntity entity, int count, Random random) { + CompoundTag tag = stack.getOrCreateTag(); + if (tag.contains("ClearsEffect")) { + ItemStack utilityItem = ItemStack.of(tag.getCompound("ClearsEffect")); + ((LivingEntityAccessor) entity).create$callSpawnItemParticles(utilityItem, 1); + } + + // After 6 ticks play the sound every 7th + if ((entity.getTicksUsingItem() - 6) % 7 == 0) + entity.playSound(entity.getEatingSound(stack), 0.9F + 0.2F * random.nextFloat(), + random.nextFloat() * 0.2F + 0.9F); + + return true; + } + + @Override + public @NotNull SoundEvent getEatingSound() { + return AllSoundEvents.SANDING_SHORT.getMainEvent(); + } + + @Override + public @NotNull UseAnim getUseAnimation(@NotNull ItemStack stack) { + return UseAnim.EAT; + } + + @Override + public int getUseDuration(@NotNull ItemStack stack) { + return 16; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + + // @Override + // @OnlyIn(Dist.CLIENT) + // public void initializeClient(Consumer consumer) { + // consumer.accept(SimpleCustomRenderer.create(this, new ScratchPaperItemRenderer())); + // } +} diff --git a/src/main/java/net/dakotapride/garnished/item/scratch_paper/ScratchPaperItemRenderer.java b/src/main/java/net/dakotapride/garnished/item/scratch_paper/ScratchPaperItemRenderer.java new file mode 100644 index 00000000..4f8445ed --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/item/scratch_paper/ScratchPaperItemRenderer.java @@ -0,0 +1,81 @@ +package net.dakotapride.garnished.item.scratch_paper; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; +import com.simibubi.create.foundation.item.render.CustomRenderedItemModel; +import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer; +import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; + +public class ScratchPaperItemRenderer extends CustomRenderedItemModelRenderer { + + @Override + protected void render(ItemStack stack, CustomRenderedItemModel model, PartialItemModelRenderer renderer, + ItemTransforms.TransformType transformType, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { + ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); + LocalPlayer player = Minecraft.getInstance().player; + float partialTicks = AnimationTickHolder.getPartialTicks(); + + boolean leftHand = transformType == ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND; + boolean firstPerson = leftHand || transformType == ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND; + + CompoundTag tag = stack.getOrCreateTag(); + boolean jeiMode = tag.contains("JEI"); + + ms.pushPose(); + + if (tag.contains("ClearsEffect")) { + ms.pushPose(); + + if (transformType == ItemTransforms.TransformType.GUI) { + ms.translate(0.0F, .2f, 1.0F); + ms.scale(.75f, .75f, .75f); + } else { + int modifier = leftHand ? -1 : 1; + ms.mulPose(Vector3f.YP.rotationDegrees(modifier * 40)); + } + + // Reverse bobbing + float time = (float) (!jeiMode ? player.getUseItemRemainingTicks() + : (-AnimationTickHolder.getTicks()) % stack.getUseDuration()) - partialTicks + 1.0F; + if (time / (float) stack.getUseDuration() < 0.8F) { + float bobbing = -Mth.abs(Mth.cos(time / 4.0F * (float) Math.PI) * 0.1F); + + if (transformType == ItemTransforms.TransformType.GUI) + ms.translate(bobbing, bobbing, 0.0F); + else + ms.translate(0.0f, bobbing, 0.0F); + } + + ItemStack toPolish = ItemStack.of(tag.getCompound("ClearsEffect")); + itemRenderer.renderStatic(toPolish, ItemTransforms.TransformType.NONE, light, overlay, ms, buffer, 0); + + ms.popPose(); + } + + if (firstPerson) { + int itemInUseCount = player.getUseItemRemainingTicks(); + if (itemInUseCount > 0) { + int modifier = leftHand ? -1 : 1; + ms.translate(modifier * .5f, 0, -.25f); + ms.mulPose(Vector3f.ZP.rotationDegrees(modifier * 40)); + ms.mulPose(Vector3f.XP.rotationDegrees(modifier * 10)); + ms.mulPose(Vector3f.YP.rotationDegrees(modifier * 90)); + } + } + + itemRenderer.render(stack, ItemTransforms.TransformType.NONE, false, ms, buffer, light, overlay, model.getOriginalModel()); + + ms.popPose(); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/item/tab/GarnishedCreativeModeTab.java b/src/main/java/net/dakotapride/garnished/item/tab/GarnishedCreativeModeTab.java index ac4259cf..1e99e212 100644 --- a/src/main/java/net/dakotapride/garnished/item/tab/GarnishedCreativeModeTab.java +++ b/src/main/java/net/dakotapride/garnished/item/tab/GarnishedCreativeModeTab.java @@ -18,7 +18,6 @@ public GarnishedCreativeModeTab() { @Override public void fillItemList(@NotNull NonNullList items) { - items.add(GarnishedItems.CRACKED_CASHEW.asStack()); items.add(GarnishedItems.UNGARNISHED_CASHEW.asStack()); items.add(GarnishedItems.CASHEW.asStack()); @@ -150,6 +149,7 @@ public void fillItemList(@NotNull NonNullList items) { items.add(GarnishedItems.NUT_NACHO.asStack()); items.add(GarnishedItems.BRITTLE_DUST.asStack()); items.add(GarnishedItems.SENILE_DUST.asStack()); + items.add(GarnishedItems.SENILE_SPREAD.asStack()); items.add(GarnishedItems.CRIMSON_TUSK.asStack()); items.add(GarnishedItems.SILICA_HARDENED_WRAP.asStack()); items.add(GarnishedItems.ENFLAMED_MANDIBLE.asStack()); @@ -175,6 +175,8 @@ public void fillItemList(@NotNull NonNullList items) { items.add(GarnishedItems.MUD_PIE.asStack()); items.add(GarnishedItems.MULCH.asStack()); + items.add(GarnishedItems.MOLTEN_STEW.asStack()); + items.add(GarnishedItems.VENERABLE_DOUGH.asStack()); items.add(GarnishedItems.VENERABLE_DELICACY_RED.asStack()); items.add(GarnishedItems.VENERABLE_DELICACY_ORANGE.asStack()); @@ -249,10 +251,21 @@ public void fillItemList(@NotNull NonNullList items) { items.add(GarnishedItems.PRICKLY_PEAR_STEW.asStack()); items.add(GarnishedItems.STEW_OF_THE_DAMNED.asStack()); + items.add(GarnishedItems.RAW_POLAR_BEAR_MEAT.asStack()); + items.add(GarnishedItems.COOKED_POLAR_BEAR_MEAT.asStack()); + items.add(GarnishedItems.VOID_STROGANOFF.asStack()); + items.add(GarnishedItems.EXPLORERS_CONCOCTION.asStack()); + items.add(GarnishedItems.FROSTED_DESSERT.asStack()); + items.add(GarnishedItems.CHILLED_APPLE.asStack()); + + items.add(GarnishedItems.MOLTEN_REMNANT.asStack()); + items.add(GarnishedItems.GHAST_TENDRIL.asStack()); items.add(GarnishedItems.VOLATILE_DUST.asStack()); + items.add(GarnishedItems.SOLEMN_DUST.asStack()); + items.add(GarnishedBlocks.VERMILION_KELP.asStack()); items.add(GarnishedBlocks.DULSE_KELP.asStack()); items.add(GarnishedItems.CORAL_WRAPPING.asStack()); @@ -264,6 +277,11 @@ public void fillItemList(@NotNull NonNullList items) { items.add(GarnishedItems.AMBER_REMNANT.asStack()); items.add(GarnishedItems.SHATTERED_AMBER_REMNANT.asStack()); + items.add(GarnishedItems.FROST.asStack()); + items.add(GarnishedItems.NUMBING_PARCHMENT.asStack()); + items.add(GarnishedItems.POLAR_BEAR_HIDE.asStack()); + items.add(GarnishedItems.POLAR_HIDE_SCRATCH_PAPER.asStack()); + items.add(GarnishedBlocks.SEPIA_FUNGUS.asStack()); items.add(GarnishedBlocks.SOUL_ROOTS.asStack()); @@ -281,7 +299,6 @@ public void fillItemList(@NotNull NonNullList items) { items.add(GarnishedItems.BOTTLED_ENDER_JELLY.asStack()); items.add(GarnishedItems.CHORUS_COCKTAIL.asStack()); items.add(GarnishedItems.ILLUMINATING_COCKTAIL.asStack()); - items.add(GarnishedItems.ROSY_COCKTAIL.asStack()); items.add(GarnishedItems.GARNISH_COMPOUND.asStack()); items.add(GarnishedItems.GARNISH_POWDER.asStack()); diff --git a/src/main/java/net/dakotapride/garnished/recipe/BlueDyeBlowingFanRecipe.java b/src/main/java/net/dakotapride/garnished/recipe/BlueDyeBlowingFanRecipe.java new file mode 100644 index 00000000..6d35f6fe --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/BlueDyeBlowingFanRecipe.java @@ -0,0 +1,44 @@ +package net.dakotapride.garnished.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipe; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; + +import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; +import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper; +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.minecraft.world.level.Level; + +@ParametersAreNonnullByDefault +public class BlueDyeBlowingFanRecipe extends ProcessingRecipe { + + public BlueDyeBlowingFanRecipe(ProcessingRecipeBuilder.ProcessingRecipeParams params) { + super(GarnishedRecipeTypes.BLUE_DYE_BLOWING, params); + } + + @Override + public boolean matches(BlueDyeBlowingWrapper inv, Level worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0) + .test(inv.getItem(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 12; + } + + public static class BlueDyeBlowingWrapper extends RecipeWrapper { + public BlueDyeBlowingWrapper() { + super(new ItemStackHandler(1)); + } + } + +} diff --git a/src/main/java/net/dakotapride/garnished/recipe/FreezingFanRecipe.java b/src/main/java/net/dakotapride/garnished/recipe/FreezingFanRecipe.java new file mode 100644 index 00000000..3a0df356 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/FreezingFanRecipe.java @@ -0,0 +1,44 @@ +package net.dakotapride.garnished.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipe; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; + +import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; +import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper; +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.minecraft.world.level.Level; + +@ParametersAreNonnullByDefault +public class FreezingFanRecipe extends ProcessingRecipe { + + public FreezingFanRecipe(ProcessingRecipeBuilder.ProcessingRecipeParams params) { + super(GarnishedRecipeTypes.FREEZING, params); + } + + @Override + public boolean matches(FreezingWrapper inv, Level worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0) + .test(inv.getItem(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 12; + } + + public static class FreezingWrapper extends RecipeWrapper { + public FreezingWrapper() { + super(new ItemStackHandler(1)); + } + } + +} diff --git a/src/main/java/net/dakotapride/garnished/recipe/GarnishedFanProcessing.java b/src/main/java/net/dakotapride/garnished/recipe/GarnishedFanProcessing.java new file mode 100644 index 00000000..a36ec471 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/GarnishedFanProcessing.java @@ -0,0 +1,465 @@ +package net.dakotapride.garnished.recipe; + +import java.util.List; +import java.util.Optional; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + +import com.mojang.math.Vector3f; +import com.simibubi.create.content.kinetics.fan.processing.FanProcessingType; +import com.simibubi.create.content.kinetics.fan.processing.FanProcessingTypeRegistry; +import com.simibubi.create.foundation.recipe.RecipeApplier; +import com.simibubi.create.foundation.utility.Color; + +import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; +import net.dakotapride.garnished.CreateGarnished; +import net.dakotapride.garnished.registry.GarnishedBlocks; +import net.dakotapride.garnished.registry.GarnishedDamageSource; +import net.dakotapride.garnished.registry.GarnishedFluids; +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.dakotapride.garnished.registry.GarnishedTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.Vec3; + +public class GarnishedFanProcessing { + public static final FreezingType FREEZING = register("freezing", new FreezingType()); + public static final RedDyeBlowingType RED_DYE_BLOWING = register("red_dye_blowing", new RedDyeBlowingType()); + public static final OrangeDyeBlowingType ORANGE_DYE_BLOWING = register("orange_dye_blowing", new OrangeDyeBlowingType()); + public static final YellowDyeBlowingType YELLOW_DYE_BLOWING = register("yellow_dye_blowing", new YellowDyeBlowingType()); + public static final GreenDyeBlowingType GREEN_DYE_BLOWING = register("green_dye_blowing", new GreenDyeBlowingType()); + public static final BlueDyeBlowingType BLUE_DYE_BLOWING = register("blue_dye_blowing", new BlueDyeBlowingType()); + public static final PurpleDyeBlowingType PURPLE_DYE_BLOWING = register("purple_dye_blowing", new PurpleDyeBlowingType()); + + static { + Object2ReferenceOpenHashMap map = new Object2ReferenceOpenHashMap<>(); + map.put("FREEZING", FREEZING); + map.put("RED_DYE_BLOWING", RED_DYE_BLOWING); + map.put("ORANGE_DYE_BLOWING", ORANGE_DYE_BLOWING); + map.put("YELLOW_DYE_BLOWING", YELLOW_DYE_BLOWING); + map.put("GREEN_DYE_BLOWING", GREEN_DYE_BLOWING); + map.put("BLUE_DYE_BLOWING", BLUE_DYE_BLOWING); + map.put("PURPLE_DYE_BLOWING", PURPLE_DYE_BLOWING); + map.trim(); + } + + private static T register(String id, T type) { + FanProcessingTypeRegistry.register(CreateGarnished.asResource(id), type); + return type; + } + + public static class FreezingType implements FanProcessingType { + private static final FreezingFanRecipe.FreezingWrapper FREEZING_WRAPPER = new FreezingFanRecipe.FreezingWrapper(); + + @Override + public boolean isValidAt(Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + if (fluidState.is(GarnishedTags.FAN_FREEZING_PROCESSING_FLUID_TAG)) { + return true; + } + BlockState blockState = level.getBlockState(pos); + return blockState.is(GarnishedTags.FAN_FREEZING_PROCESSING_TAG); + } + + @Override + public int getPriority() { + return 500; + } + + @Override + public boolean canProcess(ItemStack stack, Level level) { + FREEZING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.FREEZING.find(FREEZING_WRAPPER, level); + return recipe.isPresent(); + } + + @Override + @Nullable + public List process(ItemStack stack, Level level) { + FREEZING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.FREEZING.find(FREEZING_WRAPPER, level); + return recipe.map(freezingFanRecipe -> RecipeApplier.applyRecipeOn(stack, freezingFanRecipe)).orElse(null); + } + + @Override + public void spawnProcessingParticles(Level level, Vec3 pos) { + if (level.random.nextInt(8) != 0) + return; + Vector3f color = new Color(0xDDE8FF).asVectorF(); + level.addParticle(new DustParticleOptions(color, 1), pos.x + (level.random.nextFloat() - .5f) * .5f, + pos.y + .5f, pos.z + (level.random.nextFloat() - .5f) * .5f, 0, 1 / 8f, 0); + level.addParticle(ParticleTypes.SNOWFLAKE, pos.x + (level.random.nextFloat() - .5f) * .5f, pos.y + .5f, + pos.z + (level.random.nextFloat() - .5f) * .5f, 0, 1 / 8f, 0); + } + + @Override + public void morphAirFlow(AirFlowParticleAccess particleAccess, Random random) { + particleAccess.setColor(Color.mixColors(0xEEEEFF, 0xDDE8FF, random.nextFloat())); + particleAccess.setAlpha(1f); + if (random.nextFloat() < 1 / 128f) + particleAccess.spawnExtraParticle(ParticleTypes.SNOWFLAKE, .125f); + } + + @Override + public void affectEntity(Entity entity, Level level) { + if (level.isClientSide) { + return; + } + + if (entity.canFreeze()) { + entity.setTicksFrozen(120); + entity.hurt(GarnishedDamageSource.FAN_FREEZING, 2.0F); + } + + if (entity.isOnFire()) { + entity.clearFire(); + } + } + } + + public static class RedDyeBlowingType implements FanProcessingType { + private static final RedDyeBlowingFanRecipe.RedDyeBlowingWrapper RED_DYE_BLOWING_WRAPPER = new RedDyeBlowingFanRecipe.RedDyeBlowingWrapper(); + + @Override + public boolean isValidAt(Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + return fluidState.is(GarnishedFluids.RED_MASTIC_RESIN.get().getSource()) || fluidState.is(GarnishedFluids.RED_MASTIC_RESIN.get().getFlowing()); + } + + @Override + public int getPriority() { + return 600; + } + + @Override + public boolean canProcess(ItemStack stack, Level level) { + RED_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.RED_DYE_BLOWING.find(RED_DYE_BLOWING_WRAPPER, level); + return recipe.isPresent(); + } + + @Override + @Nullable + public List process(ItemStack stack, Level level) { + RED_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.RED_DYE_BLOWING.find(RED_DYE_BLOWING_WRAPPER, level); + return recipe.map(redDyeBlowingFanRecipe -> RecipeApplier.applyRecipeOn(stack, redDyeBlowingFanRecipe)).orElse(null); + } + + @Override + public void spawnProcessingParticles(Level level, Vec3 pos) { + if (level.random.nextInt(8) != 0) + return; + level.addParticle(ParticleTypes.ITEM_SLIME, pos.x, pos.y + .25f, pos.z, 0, 1 / 16f, 0); + } + + @Override + public void morphAirFlow(AirFlowParticleAccess particleAccess, Random random) { + particleAccess.setColor(Color.mixColors(0x54010A, 0xA53B32, random.nextFloat())); + particleAccess.setAlpha(.5f); + if (random.nextFloat() < 1 / 16f) + particleAccess.spawnExtraParticle(new BlockParticleOption(ParticleTypes.BLOCK, GarnishedBlocks.RED_MASTIC_BLOCK.get().defaultBlockState()), .25f); + } + + @Override + public void affectEntity(Entity entity, Level level) { + if (level.isClientSide) { + return; + } + + if (entity.isOnFire()) { + entity.clearFire(); + } + } + } + + public static class OrangeDyeBlowingType implements FanProcessingType { + private static final OrangeDyeBlowingFanRecipe.OrangeDyeBlowingWrapper ORANGE_DYE_BLOWING_WRAPPER = new OrangeDyeBlowingFanRecipe.OrangeDyeBlowingWrapper(); + + @Override + public boolean isValidAt(Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + return fluidState.is(GarnishedFluids.ORANGE_MASTIC_RESIN.get().getSource()) || fluidState.is(GarnishedFluids.ORANGE_MASTIC_RESIN.get().getFlowing()); + } + + @Override + public int getPriority() { + return 700; + } + + @Override + public boolean canProcess(ItemStack stack, Level level) { + ORANGE_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.ORANGE_DYE_BLOWING.find(ORANGE_DYE_BLOWING_WRAPPER, level); + return recipe.isPresent(); + } + + @Override + @Nullable + public List process(ItemStack stack, Level level) { + ORANGE_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.ORANGE_DYE_BLOWING.find(ORANGE_DYE_BLOWING_WRAPPER, level); + return recipe.map(orangeDyeBlowingFanRecipe -> RecipeApplier.applyRecipeOn(stack, orangeDyeBlowingFanRecipe)).orElse(null); + } + + @Override + public void spawnProcessingParticles(Level level, Vec3 pos) { + if (level.random.nextInt(8) != 0) + return; + level.addParticle(ParticleTypes.ITEM_SLIME, pos.x, pos.y + .25f, pos.z, 0, 1 / 16f, 0); + } + + @Override + public void morphAirFlow(AirFlowParticleAccess particleAccess, Random random) { + particleAccess.setColor(Color.mixColors(0x825721, 0xD39149, random.nextFloat())); + particleAccess.setAlpha(.5f); + if (random.nextFloat() < 1 / 16f) + particleAccess.spawnExtraParticle(new BlockParticleOption(ParticleTypes.BLOCK, GarnishedBlocks.ORANGE_MASTIC_BLOCK.get().defaultBlockState()), .25f); + } + + @Override + public void affectEntity(Entity entity, Level level) { + if (level.isClientSide) { + return; + } + + if (entity.isOnFire()) { + entity.clearFire(); + } + } + } + + public static class YellowDyeBlowingType implements FanProcessingType { + private static final YellowDyeBlowingFanRecipe.YellowDyeBlowingWrapper YELLOW_DYE_BLOWING_WRAPPER = new YellowDyeBlowingFanRecipe.YellowDyeBlowingWrapper(); + + @Override + public boolean isValidAt(Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + return fluidState.is(GarnishedFluids.YELLOW_MASTIC_RESIN.get().getSource()) || fluidState.is(GarnishedFluids.YELLOW_MASTIC_RESIN.get().getFlowing()); + } + + @Override + public int getPriority() { + return 800; + } + + @Override + public boolean canProcess(ItemStack stack, Level level) { + YELLOW_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.YELLOW_DYE_BLOWING.find(YELLOW_DYE_BLOWING_WRAPPER, level); + return recipe.isPresent(); + } + + @Override + @Nullable + public List process(ItemStack stack, Level level) { + YELLOW_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.YELLOW_DYE_BLOWING.find(YELLOW_DYE_BLOWING_WRAPPER, level); + return recipe.map(yellowDyeBlowingFanRecipe -> RecipeApplier.applyRecipeOn(stack, yellowDyeBlowingFanRecipe)).orElse(null); + } + + @Override + public void spawnProcessingParticles(Level level, Vec3 pos) { + if (level.random.nextInt(8) != 0) + return; + level.addParticle(ParticleTypes.ITEM_SLIME, pos.x, pos.y + .25f, pos.z, 0, 1 / 16f, 0); + } + + @Override + public void morphAirFlow(AirFlowParticleAccess particleAccess, Random random) { + particleAccess.setColor(Color.mixColors(0x827C21, 0xD3B649, random.nextFloat())); + particleAccess.setAlpha(.5f); + if (random.nextFloat() < 1 / 16f) + particleAccess.spawnExtraParticle(new BlockParticleOption(ParticleTypes.BLOCK, GarnishedBlocks.YELLOW_MASTIC_BLOCK.get().defaultBlockState()), .25f); + } + + @Override + public void affectEntity(Entity entity, Level level) { + if (level.isClientSide) { + return; + } + + if (entity.isOnFire()) { + entity.clearFire(); + } + } + } + + public static class GreenDyeBlowingType implements FanProcessingType { + private static final GreenDyeBlowingFanRecipe.GreenDyeBlowingWrapper GREEN_DYE_BLOWING_WRAPPER = new GreenDyeBlowingFanRecipe.GreenDyeBlowingWrapper(); + + @Override + public boolean isValidAt(Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + return fluidState.is(GarnishedFluids.GREEN_MASTIC_RESIN.get().getSource()) || fluidState.is(GarnishedFluids.GREEN_MASTIC_RESIN.get().getFlowing()); + } + + @Override + public int getPriority() { + return 900; + } + + @Override + public boolean canProcess(ItemStack stack, Level level) { + GREEN_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.GREEN_DYE_BLOWING.find(GREEN_DYE_BLOWING_WRAPPER, level); + return recipe.isPresent(); + } + + @Override + @Nullable + public List process(ItemStack stack, Level level) { + GREEN_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.GREEN_DYE_BLOWING.find(GREEN_DYE_BLOWING_WRAPPER, level); + return recipe.map(greenDyeBlowingFanRecipe -> RecipeApplier.applyRecipeOn(stack, greenDyeBlowingFanRecipe)).orElse(null); + } + + @Override + public void spawnProcessingParticles(Level level, Vec3 pos) { + if (level.random.nextInt(8) != 0) + return; + level.addParticle(ParticleTypes.ITEM_SLIME, pos.x, pos.y + .25f, pos.z, 0, 1 / 16f, 0); + } + + @Override + public void morphAirFlow(AirFlowParticleAccess particleAccess, Random random) { + particleAccess.setColor(Color.mixColors(0x498221, 0x9ABC49, random.nextFloat())); + particleAccess.setAlpha(.5f); + if (random.nextFloat() < 1 / 16f) + particleAccess.spawnExtraParticle(new BlockParticleOption(ParticleTypes.BLOCK, GarnishedBlocks.GREEN_MASTIC_BLOCK.get().defaultBlockState()), .25f); + } + + @Override + public void affectEntity(Entity entity, Level level) { + if (level.isClientSide) { + return; + } + + if (entity.isOnFire()) { + entity.clearFire(); + } + } + } + + public static class BlueDyeBlowingType implements FanProcessingType { + private static final BlueDyeBlowingFanRecipe.BlueDyeBlowingWrapper BLUE_DYE_BLOWING_WRAPPER = new BlueDyeBlowingFanRecipe.BlueDyeBlowingWrapper(); + + @Override + public boolean isValidAt(Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + return fluidState.is(GarnishedFluids.BLUE_MASTIC_RESIN.get().getSource()) || fluidState.is(GarnishedFluids.BLUE_MASTIC_RESIN.get().getFlowing()); + } + + @Override + public int getPriority() { + return 1000; + } + + @Override + public boolean canProcess(ItemStack stack, Level level) { + BLUE_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.BLUE_DYE_BLOWING.find(BLUE_DYE_BLOWING_WRAPPER, level); + return recipe.isPresent(); + } + + @Override + @Nullable + public List process(ItemStack stack, Level level) { + BLUE_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.BLUE_DYE_BLOWING.find(BLUE_DYE_BLOWING_WRAPPER, level); + return recipe.map(blueDyeBlowingFanRecipe -> RecipeApplier.applyRecipeOn(stack, blueDyeBlowingFanRecipe)).orElse(null); + } + + @Override + public void spawnProcessingParticles(Level level, Vec3 pos) { + if (level.random.nextInt(8) != 0) + return; + level.addParticle(ParticleTypes.ITEM_SLIME, pos.x, pos.y + .25f, pos.z, 0, 1 / 16f, 0); + } + + @Override + public void morphAirFlow(AirFlowParticleAccess particleAccess, Random random) { + particleAccess.setColor(Color.mixColors(0x18556D, 0x698F95, random.nextFloat())); + particleAccess.setAlpha(.5f); + if (random.nextFloat() < 1 / 16f) + particleAccess.spawnExtraParticle(new BlockParticleOption(ParticleTypes.BLOCK, GarnishedBlocks.BLUE_MASTIC_BLOCK.get().defaultBlockState()), .25f); + } + + @Override + public void affectEntity(Entity entity, Level level) { + if (level.isClientSide) { + return; + } + + if (entity.isOnFire()) { + entity.clearFire(); + } + } + } + + public static class PurpleDyeBlowingType implements FanProcessingType { + private static final PurpleDyeBlowingFanRecipe.PurpleDyeBlowingWrapper PURPLE_DYE_BLOWING_WRAPPER = new PurpleDyeBlowingFanRecipe.PurpleDyeBlowingWrapper(); + + @Override + public boolean isValidAt(Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + return fluidState.is(GarnishedFluids.PURPLE_MASTIC_RESIN.get().getSource()) || fluidState.is(GarnishedFluids.PURPLE_MASTIC_RESIN.get().getFlowing()); + } + + @Override + public int getPriority() { + return 1100; + } + + @Override + public boolean canProcess(ItemStack stack, Level level) { + PURPLE_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.PURPLE_DYE_BLOWING.find(PURPLE_DYE_BLOWING_WRAPPER, level); + return recipe.isPresent(); + } + + @Override + @Nullable + public List process(ItemStack stack, Level level) { + PURPLE_DYE_BLOWING_WRAPPER.setItem(0, stack); + Optional recipe = GarnishedRecipeTypes.PURPLE_DYE_BLOWING.find(PURPLE_DYE_BLOWING_WRAPPER, level); + return recipe.map(purpleDyeBlowingFanRecipe -> RecipeApplier.applyRecipeOn(stack, purpleDyeBlowingFanRecipe)).orElse(null); + } + + @Override + public void spawnProcessingParticles(Level level, Vec3 pos) { + if (level.random.nextInt(8) != 0) + return; + level.addParticle(ParticleTypes.ITEM_SLIME, pos.x, pos.y + .25f, pos.z, 0, 1 / 16f, 0); + } + + @Override + public void morphAirFlow(AirFlowParticleAccess particleAccess, Random random) { + particleAccess.setColor(Color.mixColors(0x5A2A76, 0xAB649E, random.nextFloat())); + particleAccess.setAlpha(.5f); + if (random.nextFloat() < 1 / 16f) + particleAccess.spawnExtraParticle(new BlockParticleOption(ParticleTypes.BLOCK, GarnishedBlocks.PURPLE_MASTIC_BLOCK.get().defaultBlockState()), .25f); + } + + @Override + public void affectEntity(Entity entity, Level level) { + if (level.isClientSide) { + return; + } + + if (entity.isOnFire()) { + entity.clearFire(); + } + } + } + + public static void register() {} +} diff --git a/src/main/java/net/dakotapride/garnished/recipe/GreenDyeBlowingFanRecipe.java b/src/main/java/net/dakotapride/garnished/recipe/GreenDyeBlowingFanRecipe.java new file mode 100644 index 00000000..eb769b0d --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/GreenDyeBlowingFanRecipe.java @@ -0,0 +1,44 @@ +package net.dakotapride.garnished.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipe; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; + +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.minecraft.world.level.Level; +import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; +import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper; + +@ParametersAreNonnullByDefault +public class GreenDyeBlowingFanRecipe extends ProcessingRecipe { + + public GreenDyeBlowingFanRecipe(ProcessingRecipeBuilder.ProcessingRecipeParams params) { + super(GarnishedRecipeTypes.GREEN_DYE_BLOWING, params); + } + + @Override + public boolean matches(GreenDyeBlowingWrapper inv, Level worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0) + .test(inv.getItem(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 12; + } + + public static class GreenDyeBlowingWrapper extends RecipeWrapper { + public GreenDyeBlowingWrapper() { + super(new ItemStackHandler(1)); + } + } + +} diff --git a/src/main/java/net/dakotapride/garnished/recipe/OrangeDyeBlowingFanRecipe.java b/src/main/java/net/dakotapride/garnished/recipe/OrangeDyeBlowingFanRecipe.java new file mode 100644 index 00000000..672af488 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/OrangeDyeBlowingFanRecipe.java @@ -0,0 +1,44 @@ +package net.dakotapride.garnished.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipe; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; + +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.minecraft.world.level.Level; +import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; +import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper; + +@ParametersAreNonnullByDefault +public class OrangeDyeBlowingFanRecipe extends ProcessingRecipe { + + public OrangeDyeBlowingFanRecipe(ProcessingRecipeBuilder.ProcessingRecipeParams params) { + super(GarnishedRecipeTypes.ORANGE_DYE_BLOWING, params); + } + + @Override + public boolean matches(OrangeDyeBlowingWrapper inv, Level worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0) + .test(inv.getItem(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 12; + } + + public static class OrangeDyeBlowingWrapper extends RecipeWrapper { + public OrangeDyeBlowingWrapper() { + super(new ItemStackHandler(1)); + } + } + +} diff --git a/src/main/java/net/dakotapride/garnished/recipe/PurpleDyeBlowingFanRecipe.java b/src/main/java/net/dakotapride/garnished/recipe/PurpleDyeBlowingFanRecipe.java new file mode 100644 index 00000000..a60ae8df --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/PurpleDyeBlowingFanRecipe.java @@ -0,0 +1,44 @@ +package net.dakotapride.garnished.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipe; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; + +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.minecraft.world.level.Level; +import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; +import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper; + +@ParametersAreNonnullByDefault +public class PurpleDyeBlowingFanRecipe extends ProcessingRecipe { + + public PurpleDyeBlowingFanRecipe(ProcessingRecipeBuilder.ProcessingRecipeParams params) { + super(GarnishedRecipeTypes.PURPLE_DYE_BLOWING, params); + } + + @Override + public boolean matches(PurpleDyeBlowingWrapper inv, Level worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0) + .test(inv.getItem(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 12; + } + + public static class PurpleDyeBlowingWrapper extends RecipeWrapper { + public PurpleDyeBlowingWrapper() { + super(new ItemStackHandler(1)); + } + } + +} diff --git a/src/main/java/net/dakotapride/garnished/recipe/RedDyeBlowingFanRecipe.java b/src/main/java/net/dakotapride/garnished/recipe/RedDyeBlowingFanRecipe.java new file mode 100644 index 00000000..b8b2546c --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/RedDyeBlowingFanRecipe.java @@ -0,0 +1,44 @@ +package net.dakotapride.garnished.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipe; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; + +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.minecraft.world.level.Level; +import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; +import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper; + +@ParametersAreNonnullByDefault +public class RedDyeBlowingFanRecipe extends ProcessingRecipe { + + public RedDyeBlowingFanRecipe(ProcessingRecipeBuilder.ProcessingRecipeParams params) { + super(GarnishedRecipeTypes.RED_DYE_BLOWING, params); + } + + @Override + public boolean matches(RedDyeBlowingWrapper inv, Level worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0) + .test(inv.getItem(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 12; + } + + public static class RedDyeBlowingWrapper extends RecipeWrapper { + public RedDyeBlowingWrapper() { + super(new ItemStackHandler(1)); + } + } + +} diff --git a/src/main/java/net/dakotapride/garnished/recipe/YellowDyeBlowingFanRecipe.java b/src/main/java/net/dakotapride/garnished/recipe/YellowDyeBlowingFanRecipe.java new file mode 100644 index 00000000..13019693 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/recipe/YellowDyeBlowingFanRecipe.java @@ -0,0 +1,44 @@ +package net.dakotapride.garnished.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipe; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; + +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.minecraft.world.level.Level; +import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; +import io.github.fabricators_of_create.porting_lib.transfer.item.RecipeWrapper; + +@ParametersAreNonnullByDefault +public class YellowDyeBlowingFanRecipe extends ProcessingRecipe { + + public YellowDyeBlowingFanRecipe(ProcessingRecipeBuilder.ProcessingRecipeParams params) { + super(GarnishedRecipeTypes.YELLOW_DYE_BLOWING, params); + } + + @Override + public boolean matches(YellowDyeBlowingWrapper inv, Level worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0) + .test(inv.getItem(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 12; + } + + public static class YellowDyeBlowingWrapper extends RecipeWrapper { + public YellowDyeBlowingWrapper() { + super(new ItemStackHandler(1)); + } + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/GarnishedDamageSource.java b/src/main/java/net/dakotapride/garnished/registry/GarnishedDamageSource.java index c2d24797..2b4ebb5a 100644 --- a/src/main/java/net/dakotapride/garnished/registry/GarnishedDamageSource.java +++ b/src/main/java/net/dakotapride/garnished/registry/GarnishedDamageSource.java @@ -8,5 +8,6 @@ protected GarnishedDamageSource(String messageId) { } public static final GarnishedDamageSource MULCH_MUNCHING = (new GarnishedDamageSource("garnished.mulch_munching")); + public static final GarnishedDamageSource FAN_FREEZING = (new GarnishedDamageSource("garnished.fan_freezing")); } diff --git a/src/main/java/net/dakotapride/garnished/registry/GarnishedEffects.java b/src/main/java/net/dakotapride/garnished/registry/GarnishedEffects.java index 9e335a1f..7f92a7a1 100644 --- a/src/main/java/net/dakotapride/garnished/registry/GarnishedEffects.java +++ b/src/main/java/net/dakotapride/garnished/registry/GarnishedEffects.java @@ -4,6 +4,7 @@ import net.dakotapride.garnished.effect.AversionMobEffect; import net.dakotapride.garnished.effect.CognateMobEffect; import net.dakotapride.garnished.effect.FlagrantMobEffect; +import net.dakotapride.garnished.effect.FreezingMobEffect; import net.dakotapride.garnished.effect.MummificationMobEffect; import net.dakotapride.garnished.effect.SanctityMobEffect; import net.dakotapride.garnished.effect.SpiritedResistanceMobEffect; @@ -44,6 +45,8 @@ public class GarnishedEffects { .addAttributeModifier(Attributes.MOVEMENT_SPEED, "9bfdc80b-2f5a-4e9f-9ffd-a5880ccf2a09", -0.015, AttributeModifier.Operation.MULTIPLY_TOTAL)); + public static MobEffect FREEZING = effect("freezing", new FreezingMobEffect()); + public static Potion AVERSION_POTION = potion("aversion", new Potion( new MobEffectInstance(AVERSION, 2400))); public static Potion LONG_AVERSION_POTION = potion("long_aversion", new Potion("aversion", @@ -61,6 +64,11 @@ public class GarnishedEffects { public static final Potion MUMMIFICATION_POTION = potion("mummification", new Potion(new MobEffectInstance(MUMMIFICATION, 1200))); + public static final Potion FREEZING_POTION = potion("freezing", + new Potion(new MobEffectInstance(FREEZING, 400))); + public static final Potion LONG_FREEZING_POTION = potion("long_freezing", + new Potion(new MobEffectInstance(FREEZING, 800, 1))); + private static MobEffect effect(String key, MobEffect effect) { return Registry.register(Registry.MOB_EFFECT, new ResourceLocation(CreateGarnished.ID, key), effect); } diff --git a/src/main/java/net/dakotapride/garnished/registry/GarnishedFoods.java b/src/main/java/net/dakotapride/garnished/registry/GarnishedFoods.java index 91fa1638..67998b5f 100644 --- a/src/main/java/net/dakotapride/garnished/registry/GarnishedFoods.java +++ b/src/main/java/net/dakotapride/garnished/registry/GarnishedFoods.java @@ -159,6 +159,14 @@ public class GarnishedFoods implements IGarnishedItem { public static final FoodProperties ROSY_COCKTAIL = new FoodProperties.Builder().nutrition(8).saturationMod(0.4F) .effect(new MobEffectInstance(MobEffects.REGENERATION, 100, 4), 1.0F).build(); + // Glacial Edge + public static final FoodProperties RAW_POLAR_BEAR_MEAT = new FoodProperties.Builder().nutrition(5).saturationMod(0.3F).meat().build(); + public static final FoodProperties COOKED_POLAR_BEAR_MEAT = new FoodProperties.Builder().nutrition(10).saturationMod(0.8F).meat().build(); + public static final FoodProperties FROSTED_DESSERT = new FoodProperties.Builder().nutrition(6).saturationMod(0.2F).build(); + public static final FoodProperties VOID_STROGANOFF = new FoodProperties.Builder().nutrition(14).saturationMod(0.8F).build(); + public static final FoodProperties EXPLORERS_CONCOCTION = new FoodProperties.Builder().nutrition(10).saturationMod(0.6F).build(); + public static final FoodProperties CHILLED_APPLE = new FoodProperties.Builder().nutrition(4).saturationMod(0.2F).build(); + // Farmer's Delight Foods public static final FoodProperties PECAN_PIE_SLICE = new FoodProperties.Builder().nutrition(3).saturationMod(0.2F).build(); public static final FoodProperties PHANTOM_BURGER = new FoodProperties.Builder().nutrition(8).saturationMod(0.6F).build(); diff --git a/src/main/java/net/dakotapride/garnished/registry/GarnishedItems.java b/src/main/java/net/dakotapride/garnished/registry/GarnishedItems.java index 7ed22982..c4412d84 100644 --- a/src/main/java/net/dakotapride/garnished/registry/GarnishedItems.java +++ b/src/main/java/net/dakotapride/garnished/registry/GarnishedItems.java @@ -12,6 +12,7 @@ import net.dakotapride.garnished.item.hatchet.tier.NetheriteHatchetToolItem; import net.dakotapride.garnished.item.hatchet.tier.StoneHatchetToolItem; import net.dakotapride.garnished.item.hatchet.tier.WoodenHatchetToolItem; +import net.dakotapride.garnished.item.scratch_paper.PolarHideScratchPaperItem; import net.dakotapride.garnished.item.wood.NutBoatItem; import net.dakotapride.garnished.item.wood.NutSignItem; import net.dakotapride.garnished.item.wood.SepiaSignItem; @@ -632,6 +633,31 @@ public class GarnishedItems { public static final ItemEntry BRISTLED_TORTILLA = REGISTRATE.item("bristled_tortilla", Item::new).register(); + // Garnished v1.7: Glacial Edge + public static final ItemEntry RAW_POLAR_BEAR_MEAT = + REGISTRATE.item("raw_polar_bear_meat", RawPolarBearMeatItem::new).register(); + public static final ItemEntry COOKED_POLAR_BEAR_MEAT = + REGISTRATE.item("cooked_polar_bear_meat", CookedPolarBearMeatItem::new).register(); + public static final ItemEntry FROSTED_DESSERT = + REGISTRATE.item("frosted_dessert", FrostedDessertFoodItem::new).register(); + public static final ItemEntry VOID_STROGANOFF = + REGISTRATE.item("void_stroganoff", VoidStroganoffFoodItem::new).register(); + public static final ItemEntry EXPLORERS_CONCOCTION = + REGISTRATE.item("explorers_concoction", ExplorersConcoctionFoodItem::new).register(); + public static final ItemEntry CHILLED_APPLE = + REGISTRATE.item("chilled_apple", ChilledAppleFoodItem::new).register(); + + public static final ItemEntry POLAR_HIDE_SCRATCH_PAPER = + REGISTRATE.item("polar_hide_scratch_paper", PolarHideScratchPaperItem::new).register(); + + public static final ItemEntry FROST = + REGISTRATE.item("frost", Item::new).register(); + public static final ItemEntry NUMBING_PARCHMENT = + REGISTRATE.item("numbing_parchment", Item::new).register(); + public static final ItemEntry POLAR_BEAR_HIDE = + REGISTRATE.item("polar_bear_hide", Item::new).register(); + + // Farmer's Delight Items public static final ItemEntry PECAN_PIE_SLICE = REGISTRATE.item("pecan_pie_slice", PecanPieSliceFoodItem::new).register(); diff --git a/src/main/java/net/dakotapride/garnished/registry/GarnishedRecipeTypes.java b/src/main/java/net/dakotapride/garnished/registry/GarnishedRecipeTypes.java new file mode 100644 index 00000000..79389d55 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/GarnishedRecipeTypes.java @@ -0,0 +1,94 @@ +package net.dakotapride.garnished.registry; + +import java.util.Optional; +import java.util.function.Supplier; + +import org.jetbrains.annotations.Nullable; + +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; +import com.simibubi.create.content.processing.recipe.ProcessingRecipeSerializer; +import com.simibubi.create.foundation.recipe.IRecipeTypeInfo; +import com.simibubi.create.foundation.utility.Lang; + +import io.github.fabricators_of_create.porting_lib.util.ShapedRecipeUtil; +import net.dakotapride.garnished.CreateGarnished; +import net.dakotapride.garnished.recipe.BlueDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.FreezingFanRecipe; +import net.dakotapride.garnished.recipe.GreenDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.OrangeDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.PurpleDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.RedDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.YellowDyeBlowingFanRecipe; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.Container; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; + +public enum GarnishedRecipeTypes implements IRecipeTypeInfo { + FREEZING(FreezingFanRecipe::new), + RED_DYE_BLOWING(RedDyeBlowingFanRecipe::new), + ORANGE_DYE_BLOWING(OrangeDyeBlowingFanRecipe::new), + YELLOW_DYE_BLOWING(YellowDyeBlowingFanRecipe::new), + GREEN_DYE_BLOWING(GreenDyeBlowingFanRecipe::new), + BLUE_DYE_BLOWING(BlueDyeBlowingFanRecipe::new), + PURPLE_DYE_BLOWING(PurpleDyeBlowingFanRecipe::new); + + private final ResourceLocation id; + private final RecipeSerializer serializerObject; + @Nullable + private final RecipeType typeObject; + private final Supplier> type; + + GarnishedRecipeTypes(Supplier> serializerSupplier) { + String name = Lang.asId(name()); + id = CreateGarnished.asResource(name); + serializerObject = Registry.register(Registry.RECIPE_SERIALIZER, id, serializerSupplier.get()); + typeObject = simpleType(id); + Registry.register(Registry.RECIPE_TYPE, id, typeObject); + type = () -> typeObject; + } + + GarnishedRecipeTypes(ProcessingRecipeBuilder.ProcessingRecipeFactory processingFactory) { + this(() -> new ProcessingRecipeSerializer<>(processingFactory)); + } + + public static > RecipeType simpleType(ResourceLocation id) { + String stringId = id.toString(); + return new RecipeType() { + @Override + public String toString() { + return stringId; + } + }; + } + + public static void register() { + ShapedRecipeUtil.setCraftingSize(9, 9); + // fabric: just load the class + } + + public > Optional find(C inv, Level world) { + return world.getRecipeManager().getRecipeFor(this.getType(), inv, world); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @SuppressWarnings("unchecked") + @Override + public > T getSerializer() { + return (T) serializerObject; + } + + @SuppressWarnings("unchecked") + @Override + public > T getType() { + return (T) type.get(); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/GarnishedTags.java b/src/main/java/net/dakotapride/garnished/registry/GarnishedTags.java index c8c0b6d2..c1da232b 100644 --- a/src/main/java/net/dakotapride/garnished/registry/GarnishedTags.java +++ b/src/main/java/net/dakotapride/garnished/registry/GarnishedTags.java @@ -22,6 +22,8 @@ public class GarnishedTags { public static final TagKey> IS_AFFECTED_BY_RAVAGING = commonTag("affected_by/ravaging", Registry.ENTITY_TYPE); public static final TagKey CARNOTITE_BLOCKS = garnishedTag("carnotite", Registry.BLOCK); public static final TagKey HAS_REMNANT_TAG = garnishedTag("has_remnant", Registry.BIOME_REGISTRY); + public static final TagKey FAN_FREEZING_PROCESSING_TAG = garnishedTag("fan_processing_catalysts/freezing", Registry.BLOCK); + public static final TagKey FAN_FREEZING_PROCESSING_FLUID_TAG = garnishedTag("fan_processing_catalysts/freezing", Registry.FLUID); // Integrated Tags // public static TagKey ZINC_INGOTS = commonItemTag("ingots/zinc"); diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/BlueDyeBlowingFanCategory.java b/src/main/java/net/dakotapride/garnished/registry/JEI/BlueDyeBlowingFanCategory.java new file mode 100644 index 00000000..cd968cfd --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/BlueDyeBlowingFanCategory.java @@ -0,0 +1,27 @@ +package net.dakotapride.garnished.registry.JEI; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; +import com.simibubi.create.foundation.gui.element.GuiGameElement; + +import net.dakotapride.garnished.recipe.BlueDyeBlowingFanRecipe; +import net.dakotapride.garnished.registry.GarnishedFluids; + +public class BlueDyeBlowingFanCategory extends ProcessingViaFanCategory.MultiOutput { + public BlueDyeBlowingFanCategory(Info info) { + super(info); + } + + @Override + protected void renderAttachedBlock(@NotNull PoseStack graphics) { + GuiGameElement.of(GarnishedFluids.BLUE_MASTIC_RESIN.get()) + .scale(SCALE) + .atLocal(0, 0, 2) + .lighting(AnimatedKinetics.DEFAULT_LIGHTING) + .render(graphics); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/FreezingFanCategory.java b/src/main/java/net/dakotapride/garnished/registry/JEI/FreezingFanCategory.java new file mode 100644 index 00000000..3b7d65ed --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/FreezingFanCategory.java @@ -0,0 +1,27 @@ +package net.dakotapride.garnished.registry.JEI; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; +import com.simibubi.create.foundation.gui.element.GuiGameElement; + +import net.dakotapride.garnished.recipe.FreezingFanRecipe; +import net.minecraft.world.level.block.Blocks; + +public class FreezingFanCategory extends ProcessingViaFanCategory.MultiOutput { + public FreezingFanCategory(Info info) { + super(info); + } + + @Override + protected void renderAttachedBlock(@NotNull PoseStack graphics) { + GuiGameElement.of(Blocks.POWDER_SNOW.defaultBlockState()) + .scale(SCALE) + .atLocal(0, 0, 2) + .lighting(AnimatedKinetics.DEFAULT_LIGHTING) + .render(graphics); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/GarnishedJEI.java b/src/main/java/net/dakotapride/garnished/registry/JEI/GarnishedJEI.java new file mode 100644 index 00000000..d60f4d4e --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/GarnishedJEI.java @@ -0,0 +1,160 @@ +package net.dakotapride.garnished.registry.JEI; + +import static com.simibubi.create.compat.jei.CreateJEI.consumeTypedRecipes; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.AllItems; +import com.simibubi.create.compat.jei.BlueprintTransferHandler; +import com.simibubi.create.compat.jei.CreateJEI; +import com.simibubi.create.compat.jei.DoubleItemIcon; +import com.simibubi.create.compat.jei.EmptyBackground; +import com.simibubi.create.compat.jei.ItemIcon; +import com.simibubi.create.compat.jei.category.CreateRecipeCategory; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.foundation.recipe.IRecipeTypeInfo; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.infrastructure.config.AllConfigs; +import com.simibubi.create.infrastructure.config.CRecipes; + +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.constants.RecipeTypes; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.recipe.category.IRecipeCategory; +import mezz.jei.api.registration.IRecipeCatalystRegistration; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import mezz.jei.api.registration.IRecipeTransferRegistration; +import mezz.jei.api.runtime.IIngredientManager; +import net.dakotapride.garnished.CreateGarnished; +import net.dakotapride.garnished.recipe.BlueDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.FreezingFanRecipe; +import net.dakotapride.garnished.recipe.GreenDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.OrangeDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.PurpleDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.RedDyeBlowingFanRecipe; +import net.dakotapride.garnished.recipe.YellowDyeBlowingFanRecipe; +import net.dakotapride.garnished.registry.GarnishedFluids; +import net.dakotapride.garnished.registry.GarnishedRecipeTypes; +import net.dakotapride.garnished.registry.JEI.add.RecipeCategoryBuilder; +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.ItemLike; + +// @JeiPlugin Annotation is for forge so check mod.json for the entrypoint +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +@JeiPlugin +public class GarnishedJEI implements IModPlugin { + private static final ResourceLocation ID = CreateGarnished.asResource("jei_plugin"); + + protected final List> allCategories = new ArrayList<>(); + protected IIngredientManager ingredientManager; + + @Override + public ResourceLocation getPluginUid() { + return ID; + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registration) { + loadCategories(); + registration.addRecipeCategories(allCategories.toArray(IRecipeCategory[]::new)); + } + + @Override + public void registerRecipes(IRecipeRegistration registration) { + ingredientManager = registration.getIngredientManager(); + allCategories.forEach(c -> c.registerRecipes(registration)); + + // fabric: hide flowing fluids + // registration.getIngredientManager().removeIngredientsAtRuntime( + // FabricTypes.FLUID_STACK, + // List.of( + // new JeiFluidIngredient(GarnishedFluids.GARNISH.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.APPLE_CIDER.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.PEANUT_OIL.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.CASHEW_MIXTURE.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.MASTIC_RESIN.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.RED_MASTIC_RESIN.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.ORANGE_MASTIC_RESIN.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.YELLOW_MASTIC_RESIN.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.GREEN_MASTIC_RESIN.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.BLUE_MASTIC_RESIN.get().getFlowing(), 1), + // new JeiFluidIngredient(GarnishedFluids.PURPLE_MASTIC_RESIN.get().getFlowing(), 1) + // ) + // ); + } + + @Override + public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { + allCategories.forEach(c -> c.registerCatalysts(registration)); + } + + private static > RecipeCategoryBuilder builder(Class cls) { + return new RecipeCategoryBuilder<>(CreateGarnished.ID, cls); + } + + private void loadCategories() { + allCategories.clear(); + allCategories.add( + builder(FreezingFanRecipe.class).addTypedRecipes(GarnishedRecipeTypes.FREEZING::getType) + .catalystStack(ProcessingViaFanCategory.getFan("garnished.fan_freezing")) + .doubleItemIcon(AllItems.PROPELLER.get(), Items.POWDER_SNOW_BUCKET) + .emptyBackground(178, 72) + .build("fan_freezing", FreezingFanCategory::new)); + allCategories.add( + builder(RedDyeBlowingFanRecipe.class).addTypedRecipes(GarnishedRecipeTypes.RED_DYE_BLOWING::getType) + .catalystStack(ProcessingViaFanCategory.getFan("garnished.red_dye_blowing")) + .doubleItemIcon(AllItems.PROPELLER.get(), GarnishedFluids.RED_MASTIC_RESIN.get().getBucket()) + .emptyBackground(178, 72) + .build("red_dye_blowing", RedDyeBlowingFanCategory::new)); + allCategories.add(builder(OrangeDyeBlowingFanRecipe.class) + .addTypedRecipes(GarnishedRecipeTypes.ORANGE_DYE_BLOWING::getType) + .catalystStack(ProcessingViaFanCategory.getFan("garnished.orange_dye_blowing")) + .doubleItemIcon(AllItems.PROPELLER.get(), GarnishedFluids.ORANGE_MASTIC_RESIN.get().getBucket()) + .emptyBackground(178, 72) + .build("orange_dye_blowing", OrangeDyeBlowingFanCategory::new)); + allCategories.add(builder(YellowDyeBlowingFanRecipe.class) + .addTypedRecipes(GarnishedRecipeTypes.YELLOW_DYE_BLOWING::getType) + .catalystStack(ProcessingViaFanCategory.getFan("garnished.yellow_dye_blowing")) + .doubleItemIcon(AllItems.PROPELLER.get(), GarnishedFluids.YELLOW_MASTIC_RESIN.get().getBucket()) + .emptyBackground(178, 72) + .build("yellow_dye_blowing", YellowDyeBlowingFanCategory::new)); + allCategories.add(builder(GreenDyeBlowingFanRecipe.class) + .addTypedRecipes(GarnishedRecipeTypes.GREEN_DYE_BLOWING::getType) + .catalystStack(ProcessingViaFanCategory.getFan("garnished.green_dye_blowing")) + .doubleItemIcon(AllItems.PROPELLER.get(), GarnishedFluids.GREEN_MASTIC_RESIN.get().getBucket()) + .emptyBackground(178, 72) + .build("green_dye_blowing", GreenDyeBlowingFanCategory::new)); + allCategories.add(builder(BlueDyeBlowingFanRecipe.class) + .addTypedRecipes(GarnishedRecipeTypes.BLUE_DYE_BLOWING::getType) + .catalystStack(ProcessingViaFanCategory.getFan("garnished.blue_dye_blowing")) + .doubleItemIcon(AllItems.PROPELLER.get(), GarnishedFluids.BLUE_MASTIC_RESIN.get().getBucket()) + .emptyBackground(178, 72) + .build("blue_dye_blowing", BlueDyeBlowingFanCategory::new)); + allCategories.add(builder(PurpleDyeBlowingFanRecipe.class) + .addTypedRecipes(GarnishedRecipeTypes.PURPLE_DYE_BLOWING::getType) + .catalystStack(ProcessingViaFanCategory.getFan("garnished.purple_dye_blowing")) + .doubleItemIcon(AllItems.PROPELLER.get(), GarnishedFluids.PURPLE_MASTIC_RESIN.get().getBucket()) + .emptyBackground(178, 72) + .build("purple_dye_blowing", PurpleDyeBlowingFanCategory::new)); + } +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/GreenDyeBlowingFanCategory.java b/src/main/java/net/dakotapride/garnished/registry/JEI/GreenDyeBlowingFanCategory.java new file mode 100644 index 00000000..a2fb9097 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/GreenDyeBlowingFanCategory.java @@ -0,0 +1,27 @@ +package net.dakotapride.garnished.registry.JEI; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; +import com.simibubi.create.foundation.gui.element.GuiGameElement; + +import net.dakotapride.garnished.recipe.GreenDyeBlowingFanRecipe; +import net.dakotapride.garnished.registry.GarnishedFluids; + +public class GreenDyeBlowingFanCategory extends ProcessingViaFanCategory.MultiOutput { + public GreenDyeBlowingFanCategory(Info info) { + super(info); + } + + @Override + protected void renderAttachedBlock(@NotNull PoseStack graphics) { + GuiGameElement.of(GarnishedFluids.GREEN_MASTIC_RESIN.get()) + .scale(SCALE) + .atLocal(0, 0, 2) + .lighting(AnimatedKinetics.DEFAULT_LIGHTING) + .render(graphics); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/OrangeDyeBlowingFanCategory.java b/src/main/java/net/dakotapride/garnished/registry/JEI/OrangeDyeBlowingFanCategory.java new file mode 100644 index 00000000..be8d80e9 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/OrangeDyeBlowingFanCategory.java @@ -0,0 +1,27 @@ +package net.dakotapride.garnished.registry.JEI; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; +import com.simibubi.create.foundation.gui.element.GuiGameElement; + +import net.dakotapride.garnished.recipe.OrangeDyeBlowingFanRecipe; +import net.dakotapride.garnished.registry.GarnishedFluids; + +public class OrangeDyeBlowingFanCategory extends ProcessingViaFanCategory.MultiOutput { + public OrangeDyeBlowingFanCategory(Info info) { + super(info); + } + + @Override + protected void renderAttachedBlock(@NotNull PoseStack graphics) { + GuiGameElement.of(GarnishedFluids.ORANGE_MASTIC_RESIN.get()) + .scale(SCALE) + .atLocal(0, 0, 2) + .lighting(AnimatedKinetics.DEFAULT_LIGHTING) + .render(graphics); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/PurpleDyeBlowingFanCategory.java b/src/main/java/net/dakotapride/garnished/registry/JEI/PurpleDyeBlowingFanCategory.java new file mode 100644 index 00000000..9d4590bf --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/PurpleDyeBlowingFanCategory.java @@ -0,0 +1,27 @@ +package net.dakotapride.garnished.registry.JEI; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; +import com.simibubi.create.foundation.gui.element.GuiGameElement; + +import net.dakotapride.garnished.recipe.PurpleDyeBlowingFanRecipe; +import net.dakotapride.garnished.registry.GarnishedFluids; + +public class PurpleDyeBlowingFanCategory extends ProcessingViaFanCategory.MultiOutput { + public PurpleDyeBlowingFanCategory(Info info) { + super(info); + } + + @Override + protected void renderAttachedBlock(@NotNull PoseStack graphics) { + GuiGameElement.of(GarnishedFluids.PURPLE_MASTIC_RESIN.get()) + .scale(SCALE) + .atLocal(0, 0, 2) + .lighting(AnimatedKinetics.DEFAULT_LIGHTING) + .render(graphics); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/RedDyeBlowingFanCategory.java b/src/main/java/net/dakotapride/garnished/registry/JEI/RedDyeBlowingFanCategory.java new file mode 100644 index 00000000..3949e133 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/RedDyeBlowingFanCategory.java @@ -0,0 +1,27 @@ +package net.dakotapride.garnished.registry.JEI; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; +import com.simibubi.create.foundation.gui.element.GuiGameElement; + +import net.dakotapride.garnished.recipe.RedDyeBlowingFanRecipe; +import net.dakotapride.garnished.registry.GarnishedFluids; + +public class RedDyeBlowingFanCategory extends ProcessingViaFanCategory.MultiOutput { + public RedDyeBlowingFanCategory(Info info) { + super(info); + } + + @Override + protected void renderAttachedBlock(@NotNull PoseStack graphics) { + GuiGameElement.of(GarnishedFluids.RED_MASTIC_RESIN.get()) + .scale(SCALE) + .atLocal(0, 0, 2) + .lighting(AnimatedKinetics.DEFAULT_LIGHTING) + .render(graphics); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/YellowDyeBlowingFanCategory.java b/src/main/java/net/dakotapride/garnished/registry/JEI/YellowDyeBlowingFanCategory.java new file mode 100644 index 00000000..5f9a7f16 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/YellowDyeBlowingFanCategory.java @@ -0,0 +1,27 @@ +package net.dakotapride.garnished.registry.JEI; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; +import com.simibubi.create.foundation.gui.element.GuiGameElement; + +import net.dakotapride.garnished.recipe.YellowDyeBlowingFanRecipe; +import net.dakotapride.garnished.registry.GarnishedFluids; + +public class YellowDyeBlowingFanCategory extends ProcessingViaFanCategory.MultiOutput { + public YellowDyeBlowingFanCategory(Info info) { + super(info); + } + + @Override + protected void renderAttachedBlock(@NotNull PoseStack graphics) { + GuiGameElement.of(GarnishedFluids.YELLOW_MASTIC_RESIN.get()) + .scale(SCALE) + .atLocal(0, 0, 2) + .lighting(AnimatedKinetics.DEFAULT_LIGHTING) + .render(graphics); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/JEI/add/RecipeCategoryBuilder.java b/src/main/java/net/dakotapride/garnished/registry/JEI/add/RecipeCategoryBuilder.java new file mode 100644 index 00000000..0ace0cac --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/JEI/add/RecipeCategoryBuilder.java @@ -0,0 +1,210 @@ +package net.dakotapride.garnished.registry.JEI.add; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; + +import com.simibubi.create.compat.jei.CreateJEI; +import com.simibubi.create.compat.jei.DoubleItemIcon; +import com.simibubi.create.compat.jei.EmptyBackground; +import com.simibubi.create.compat.jei.ItemIcon; +import com.simibubi.create.compat.jei.category.CreateRecipeCategory; +import com.simibubi.create.foundation.config.ConfigBase; +import com.simibubi.create.foundation.recipe.IRecipeTypeInfo; +import com.simibubi.create.infrastructure.config.AllConfigs; +import com.simibubi.create.infrastructure.config.CRecipes; + +import mezz.jei.api.gui.drawable.IDrawable; +import net.dakotapride.garnished.registry.utility.GarnishedLang; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.ItemLike; + +/* +MIT License + +Copyright (c) 2019 simibubi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ + +public class RecipeCategoryBuilder> { + private final String modid; + private final Class recipeClass; + private Predicate predicate = cRecipes -> true; + + private IDrawable background; + private IDrawable icon; + + private final List>> recipeListConsumers = new ArrayList<>(); + private final List> catalysts = new ArrayList<>(); + + public RecipeCategoryBuilder(String modid, Class recipeClass) { + this.modid = modid; + this.recipeClass = recipeClass; + } + + public RecipeCategoryBuilder enableIf(Predicate predicate) { + this.predicate = predicate; + return this; + } + + public RecipeCategoryBuilder enableWhen(Function configValue) { + predicate = c -> configValue.apply(c).get(); + return this; + } + + public RecipeCategoryBuilder addRecipeListConsumer(Consumer> consumer) { + recipeListConsumers.add(consumer); + return this; + } + + public RecipeCategoryBuilder addRecipes(Supplier> collection) { + return addRecipeListConsumer(recipes -> recipes.addAll(collection.get())); + } + + @SuppressWarnings("unchecked") + public RecipeCategoryBuilder addAllRecipesIf(Predicate> pred) { + return addRecipeListConsumer(recipes -> CreateJEI.consumeAllRecipes(recipe -> { + if (pred.test(recipe)) { + recipes.add((T) recipe); + } + })); + } + + public RecipeCategoryBuilder addAllRecipesIf(Predicate> pred, Function, T> converter) { + return addRecipeListConsumer(recipes -> CreateJEI.consumeAllRecipes(recipe -> { + if (pred.test(recipe)) { + recipes.add(converter.apply(recipe)); + } + })); + } + + public > RecipeCategoryBuilder addTransformedRecipes(Supplier> recipeType, Function converter) { + return addRecipeListConsumer(recipes -> CreateJEI.consumeTypedRecipes(recipe -> recipes.add(converter.apply(recipe)), recipeType.get())); + } + + public RecipeCategoryBuilder addTypedRecipes(IRecipeTypeInfo recipeTypeEntry) { + return addTypedRecipes(recipeTypeEntry::getType); + } + + public RecipeCategoryBuilder addTypedRecipes(Supplier> recipeType) { + return addRecipeListConsumer(recipes -> CreateJEI.consumeTypedRecipes(recipes::add, recipeType.get())); + } + + public RecipeCategoryBuilder addTypedRecipesIf(Supplier> recipeType, Predicate> pred) { + return addRecipeListConsumer(recipes -> CreateJEI.consumeTypedRecipes(recipe -> { + if (pred.test(recipe)) { + recipes.add(recipe); + } + }, recipeType.get())); + } + + public RecipeCategoryBuilder addTypedRecipesExcluding(Supplier> recipeType, + Supplier> excluded) { + return addRecipeListConsumer(recipes -> { + List> excludedRecipes = CreateJEI.getTypedRecipes(excluded.get()); + CreateJEI.consumeTypedRecipes(recipe -> { + for (Recipe excludedRecipe : excludedRecipes) { + if (CreateJEI.doInputsMatch(recipe, excludedRecipe)) { + return; + } + } + recipes.add(recipe); + }, recipeType.get()); + }); + } + + public RecipeCategoryBuilder removeRecipes(Supplier> recipeType) { + return addRecipeListConsumer(recipes -> { + List> excludedRecipes = CreateJEI.getTypedRecipes(recipeType.get()); + recipes.removeIf(recipe -> { + for (Recipe excludedRecipe : excludedRecipes) { + if (CreateJEI.doInputsMatch(recipe, excludedRecipe)) { + return true; + } + } + return false; + }); + }); + } + + public RecipeCategoryBuilder catalystStack(Supplier supplier) { + catalysts.add(supplier); + return this; + } + + public RecipeCategoryBuilder catalyst(Supplier supplier) { + return catalystStack(() -> new ItemStack(supplier.get() + .asItem())); + } + + public RecipeCategoryBuilder icon(IDrawable icon) { + this.icon = icon; + return this; + } + + public RecipeCategoryBuilder itemIcon(ItemLike item) { + icon(new ItemIcon(() -> new ItemStack(item))); + return this; + } + + public RecipeCategoryBuilder doubleItemIcon(ItemLike item1, ItemLike item2) { + icon(new DoubleItemIcon(() -> new ItemStack(item1), () -> new ItemStack(item2))); + return this; + } + + public RecipeCategoryBuilder background(IDrawable background) { + this.background = background; + return this; + } + + public RecipeCategoryBuilder emptyBackground(int width, int height) { + background(new EmptyBackground(width, height)); + return this; + } + + public CreateRecipeCategory build(String name, CreateRecipeCategory.Factory factory) { + Supplier> recipesSupplier; + if (predicate.test(AllConfigs.server().recipes)) { + recipesSupplier = () -> { + List recipes = new ArrayList<>(); + for (Consumer> consumer : recipeListConsumers) + consumer.accept(recipes); + return recipes; + }; + } else { + recipesSupplier = Collections::emptyList; + } + ResourceLocation id = new ResourceLocation(modid, name); + CreateRecipeCategory.Info info = new CreateRecipeCategory.Info<>( + new mezz.jei.api.recipe.RecipeType<>(id, recipeClass), + GarnishedLang.fromRL("recipe", id).component(), + background, icon, recipesSupplier, catalysts); + return factory.create(info); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/NewIndex.java b/src/main/java/net/dakotapride/garnished/registry/NewIndex.java new file mode 100644 index 00000000..66f9f3cf --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/NewIndex.java @@ -0,0 +1,94 @@ +package net.dakotapride.garnished.registry; + +import com.simibubi.create.foundation.ponder.PonderRegistrationHelper; +import com.simibubi.create.foundation.ponder.PonderRegistry; +import com.simibubi.create.foundation.ponder.PonderTag; +import com.simibubi.create.foundation.ponder.SceneBuilder; +import com.simibubi.create.foundation.ponder.SceneBuildingUtil; +import com.tterrag.registrate.util.entry.ItemProviderEntry; + +import io.github.fabricators_of_create.porting_lib.util.FluidStack; +import net.dakotapride.garnished.CreateGarnished; +import net.minecraft.core.Direction; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.material.Fluid; + +public class NewIndex { + static final PonderRegistrationHelper HELPER = new PonderRegistrationHelper(CreateGarnished.ID); + + public static void index() { + forComponents(GarnishedItems.CRACKED_ALMOND, GarnishedItems.CRACKED_BUHG, GarnishedItems.CRACKED_CASHEW, + GarnishedItems.CRACKED_CHESTNUT, GarnishedItems.CRACKED_HAZELNUT, GarnishedItems.CRACKED_MACADAMIA, + GarnishedItems.CRACKED_PECAN, GarnishedItems.CRACKED_PISTACHIO, GarnishedItems.CRACKED_WALNUT) + .addStoryBoard(IndexUtils.TUTORIAL + "/nut_tree", ScenesAndInteractions::nutTreeScene) + .addStoryBoard(IndexUtils.TUTORIAL + "/garnished_nut_blocks", ScenesAndInteractions::garnishedNutBlockScene) + .addStoryBoard(IndexUtils.TUTORIAL + "/ungarnished_nut_blocks", ScenesAndInteractions::ungarnishedNutBlockScene); + forComponents(GarnishedBlocks.GARNISHED_NUT_BLOCK, GarnishedBlocks.UNGARNISHED_NUT_BLOCK) + .addStoryBoard(IndexUtils.TUTORIAL + "/garnished_nut_blocks", ScenesAndInteractions::garnishedNutBlockScene) + .addStoryBoard(IndexUtils.TUTORIAL + "/ungarnished_nut_blocks", ScenesAndInteractions::ungarnishedNutBlockScene); + } + + public static PonderRegistrationHelper.MultiSceneBuilder forComponents(ItemProviderEntry... entries) { + return HELPER.forComponents(entries); + } + + public static class ScenesAndInteractions { + public static void nutTreeScene(SceneBuilder scene, SceneBuildingUtil util) { + showBaseArea("nut_tree", scene, util); + markFinished(scene); + } + + public static void garnishedNutBlockScene(SceneBuilder scene, SceneBuildingUtil util) { + showBaseArea("garnished_nut_block", scene, util); + markFinished(scene); + } + + public static void ungarnishedNutBlockScene(SceneBuilder scene, SceneBuildingUtil util) { + showBaseArea("ungarnished_nut_block", scene, util); + markFinished(scene); + } + + public static void markFinished(SceneBuilder scene) { + scene.idle(sec(6)); + scene.markAsFinished(); + } + + public static void showBaseArea(String title, SceneBuilder scene, SceneBuildingUtil util) { + scene.title(title, title); + scene.showBasePlate(); + scene.idle(10); + scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); + scene.idle(10); + } + + private static int sec(int seconds) { + return 20 * seconds; + } + + private static FluidStack fluid(Fluid source, int mb) { + return new FluidStack(source, mb); + } + } + + public static class PonderIndexTags { + public static PonderTag + CRACKED_NUTS = create("cracked_nuts", "cracked_nuts_description", GarnishedItems.CRACKED_WALNUT.get()); + + private static PonderTag create(String id, String desc, Item representedItem) { + return new PonderTag(CreateGarnished.asResource(id)).item(representedItem).defaultLang(id, desc).addToIndex(); + } + + public static void tags() { + PonderRegistry.TAGS.forTag(CRACKED_NUTS).add(GarnishedItems.CRACKED_ALMOND).add(GarnishedItems.CRACKED_BUHG) + .add(GarnishedItems.CRACKED_CASHEW).add(GarnishedItems.CRACKED_CHESTNUT).add(GarnishedItems.CRACKED_HAZELNUT) + .add(GarnishedItems.CRACKED_MACADAMIA).add(GarnishedItems.CRACKED_PECAN).add(GarnishedItems.CRACKED_PISTACHIO) + .add(GarnishedItems.CRACKED_WALNUT); + } + } + + public static class IndexUtils { + public static String INCINERATION = "incineration", DESOLATION = "desolation", SNARE_TEAR = "snare_tear", NUT_TYPING = "nut_typing", + SUGARCOATED = "sugarcoated", GLOOMY_MEATS = "gloomy_meats", BOUNDLESS_SEA = "boundless_sea", BEFOULED = "befouled", + GLACIAL_EDGE = "glacial_edge", TUTORIAL = "tutorial"; + } +} diff --git a/src/main/java/net/dakotapride/garnished/registry/utility/GarnishedLang.java b/src/main/java/net/dakotapride/garnished/registry/utility/GarnishedLang.java new file mode 100644 index 00000000..7f092f36 --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/utility/GarnishedLang.java @@ -0,0 +1,58 @@ +package net.dakotapride.garnished.registry.utility; + +import com.simibubi.create.foundation.utility.Components; +import com.simibubi.create.foundation.utility.LangBuilder; + +import com.simibubi.create.foundation.utility.LangNumberFormat; + +import io.github.fabricators_of_create.porting_lib.util.FluidStack; +import net.dakotapride.garnished.CreateGarnished; +import net.minecraft.Util; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; + +public class GarnishedLang { + + public static LangBuilder builder() { + return new GarnishedLangBuilder(CreateGarnished.ID); + } + + + public static LangBuilder blockName(BlockState state) { + return builder().add(state.getBlock() + .getName()); + } + + public static LangBuilder itemName(ItemStack stack) { + return builder().add(stack.getHoverName() + .copy()); + } + + public static LangBuilder fluidName(FluidStack stack) { + return builder().add(stack.getDisplayName() + .copy()); + } + + public static LangBuilder fromRL(String category, ResourceLocation loc, Object... args) { + return builder().add(Components.translatable(Util.makeDescriptionId(category, loc), args)); + } + + public static LangBuilder tooltip(Item item, String suffix, Object... args) { + return builder().add(Components.translatable(item.getDescriptionId() + ".tooltip." + suffix, args)); + } + + public static LangBuilder number(double d) { + return builder().text(LangNumberFormat.format(d)); + } + + public static LangBuilder translate(String langKey, Object... args) { + return builder().translate(langKey, args); + } + + public static LangBuilder text(String text) { + return builder().text(text); + } + +} diff --git a/src/main/java/net/dakotapride/garnished/registry/utility/GarnishedLangBuilder.java b/src/main/java/net/dakotapride/garnished/registry/utility/GarnishedLangBuilder.java new file mode 100644 index 00000000..bdf98cac --- /dev/null +++ b/src/main/java/net/dakotapride/garnished/registry/utility/GarnishedLangBuilder.java @@ -0,0 +1,21 @@ +package net.dakotapride.garnished.registry.utility; + +import com.simibubi.create.foundation.utility.LangBuilder; +import joptsimple.internal.Strings; +import net.minecraft.network.chat.MutableComponent; + +import java.util.List; + +public class GarnishedLangBuilder extends LangBuilder { + public GarnishedLangBuilder(String namespace) { + super(namespace); + } + + @Override + public void forGoggles(List tooltip, int indents) { + tooltip.add(GarnishedLang.builder() + .text(Strings.repeat(' ', 4 + indents)) + .add(this) + .component()); + } +} diff --git a/src/main/resources/assets/garnished/lang/en_ca.json b/src/main/resources/assets/garnished/lang/en_ca.json index 9bdd675a..25a1fe65 100644 --- a/src/main/resources/assets/garnished/lang/en_ca.json +++ b/src/main/resources/assets/garnished/lang/en_ca.json @@ -491,6 +491,40 @@ "item.minecraft.lingering_potion.effect.mummification": "Lingering Potion of Mummification", "item.minecraft.tipped_arrow.effect.mummification": "Tipped Arrow of Mummification", + "item.garnished.frost": "Frost", + "item.garnished.numbing_parchment": "Numbing Parchment", + "item.garnished.polar_bear_hide": "Polar Bear Hide", + "item.garnished.chilled_apple": "Chilled Apple", + "item.garnished.raw_polar_bear_meat": "Raw Polar Bear Meat", + "item.garnished.cooked_polar_bear_meat": "Cooked Polar Bear Meat", + "item.garnished.frosted_dessert": "Frosted Dessert", + "item.garnished.void_stroganoff": "Void Stroganoff", + "item.garnished.explorers_concoction": "Explorer's Concoction", + "item.garnished.polar_hide_scratch_paper": "Polar Hide Scratch Paper", + "effect.garnished.freezing": "Freezing", + "item.minecraft.potion.effect.freezing": "Potion of Freezing", + "item.minecraft.splash_potion.effect.freezing": "Splash Potion of Freezing", + "item.minecraft.lingering_potion.effect.freezing": "Lingering Potion of Freezing", + "item.minecraft.tipped_arrow.effect.freezing": "Tipped Arrow of Freezing", + "item.minecraft.potion.effect.long_freezing": "Potion of Freezing", + "item.minecraft.splash_potion.effect.long_freezing": "Splash Potion of Freezing", + "item.minecraft.lingering_potion.effect.long_freezing": "Lingering Potion of Freezing", + "item.minecraft.tipped_arrow.effect.long_freezing": "Tipped Arrow of Freezing", + "create.recipe.garnished.fan_freezing.fan": "Fan behind Powder Snow", + "recipe.garnished.fan_freezing": "Bulk Freezing", + "create.recipe.garnished.red_dye_blowing.fan": "Fan behind Red Liquefied Mastic Resin", + "recipe.garnished.red_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.orange_dye_blowing.fan": "Fan behind Orange Liquefied Mastic Resin", + "recipe.garnished.orange_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.yellow_dye_blowing.fan": "Fan behind Yellow Liquefied Mastic Resin", + "recipe.garnished.yellow_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.green_dye_blowing.fan": "Fan behind Green Liquefied Mastic Resin", + "recipe.garnished.green_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.blue_dye_blowing.fan": "Fan behind Blue Liquefied Mastic Resin", + "recipe.garnished.blue_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.purple_dye_blowing.fan": "Fan behind Purple Liquefied Mastic Resin", + "recipe.garnished.purple_dye_blowing": "Bulk Dyeing", + "block.garnished.peanut_sack": "Compacted Nut Sack", "block.garnished.cashew_sack": "Compacted Nut Sack", "block.garnished.almond_sack": "Compacted Nut Sack", @@ -529,19 +563,19 @@ "block.garnished.peanut_oil": "Peanut Oil", "fluid.cashew_mixture": "Cashew Mixture", "block.garnished.cashew_mixture": "Cashew Mixture", - "fluid.garnished.mastic_resin": "Liquefied Mastic Resin", + "fluid.mastic_resin": "Liquefied Mastic Resin", "block.garnished.mastic_resin": "Liquefied Mastic Resin", - "fluid.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.red_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.orange_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.green_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.blue_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.purple_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.nut_plant": "[Legacy] Nut Growth", diff --git a/src/main/resources/assets/garnished/lang/en_us.json b/src/main/resources/assets/garnished/lang/en_us.json index 9608e743..33803f3a 100644 --- a/src/main/resources/assets/garnished/lang/en_us.json +++ b/src/main/resources/assets/garnished/lang/en_us.json @@ -491,6 +491,40 @@ "item.minecraft.lingering_potion.effect.mummification": "Lingering Potion of Mummification", "item.minecraft.tipped_arrow.effect.mummification": "Tipped Arrow of Mummification", + "item.garnished.frost": "Frost", + "item.garnished.numbing_parchment": "Numbing Parchment", + "item.garnished.polar_bear_hide": "Polar Bear Hide", + "item.garnished.chilled_apple": "Chilled Apple", + "item.garnished.raw_polar_bear_meat": "Raw Polar Bear Meat", + "item.garnished.cooked_polar_bear_meat": "Cooked Polar Bear Meat", + "item.garnished.frosted_dessert": "Frosted Dessert", + "item.garnished.void_stroganoff": "Void Stroganoff", + "item.garnished.explorers_concoction": "Explorer's Concoction", + "item.garnished.polar_hide_scratch_paper": "Polar Hide Scratch Paper", + "effect.garnished.freezing": "Freezing", + "item.minecraft.potion.effect.freezing": "Potion of Freezing", + "item.minecraft.splash_potion.effect.freezing": "Splash Potion of Freezing", + "item.minecraft.lingering_potion.effect.freezing": "Lingering Potion of Freezing", + "item.minecraft.tipped_arrow.effect.freezing": "Tipped Arrow of Freezing", + "item.minecraft.potion.effect.long_freezing": "Potion of Freezing", + "item.minecraft.splash_potion.effect.long_freezing": "Splash Potion of Freezing", + "item.minecraft.lingering_potion.effect.long_freezing": "Lingering Potion of Freezing", + "item.minecraft.tipped_arrow.effect.long_freezing": "Tipped Arrow of Freezing", + "create.recipe.garnished.fan_freezing.fan": "Fan behind Powder Snow", + "recipe.garnished.fan_freezing": "Bulk Freezing", + "create.recipe.garnished.red_dye_blowing.fan": "Fan behind Red Liquefied Mastic Resin", + "recipe.garnished.red_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.orange_dye_blowing.fan": "Fan behind Orange Liquefied Mastic Resin", + "recipe.garnished.orange_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.yellow_dye_blowing.fan": "Fan behind Yellow Liquefied Mastic Resin", + "recipe.garnished.yellow_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.green_dye_blowing.fan": "Fan behind Green Liquefied Mastic Resin", + "recipe.garnished.green_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.blue_dye_blowing.fan": "Fan behind Blue Liquefied Mastic Resin", + "recipe.garnished.blue_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.purple_dye_blowing.fan": "Fan behind Purple Liquefied Mastic Resin", + "recipe.garnished.purple_dye_blowing": "Bulk Dyeing", + "block.garnished.peanut_sack": "Compacted Nut Sack", "block.garnished.cashew_sack": "Compacted Nut Sack", "block.garnished.almond_sack": "Compacted Nut Sack", @@ -529,19 +563,19 @@ "block.garnished.peanut_oil": "Peanut Oil", "fluid.cashew_mixture": "Cashew Mixture", "block.garnished.cashew_mixture": "Cashew Mixture", - "fluid.garnished.mastic_resin": "Liquefied Mastic Resin", + "fluid.mastic_resin": "Liquefied Mastic Resin", "block.garnished.mastic_resin": "Liquefied Mastic Resin", - "fluid.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.red_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.orange_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.green_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.blue_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.purple_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.nut_plant": "Nut Growth", diff --git a/src/main/resources/assets/garnished/lang/lzh.json b/src/main/resources/assets/garnished/lang/lzh.json index 8852ef05..f85bc59d 100644 --- a/src/main/resources/assets/garnished/lang/lzh.json +++ b/src/main/resources/assets/garnished/lang/lzh.json @@ -490,6 +490,40 @@ "item.minecraft.lingering_potion.effect.mummification": "Lingering Potion of Mummification", "item.minecraft.tipped_arrow.effect.mummification": "Tipped Arrow of Mummification", + "item.garnished.frost": "Frost", + "item.garnished.numbing_parchment": "Numbing Parchment", + "item.garnished.polar_bear_hide": "Polar Bear Hide", + "item.garnished.chilled_apple": "Chilled Apple", + "item.garnished.raw_polar_bear_meat": "Raw Polar Bear Meat", + "item.garnished.cooked_polar_bear_meat": "Cooked Polar Bear Meat", + "item.garnished.frosted_dessert": "Frosted Dessert", + "item.garnished.void_stroganoff": "Void Stroganoff", + "item.garnished.explorers_concoction": "Explorer's Concoction", + "item.garnished.polar_hide_scratch_paper": "Polar Hide Scratch Paper", + "effect.garnished.freezing": "Freezing", + "item.minecraft.potion.effect.freezing": "Potion of Freezing", + "item.minecraft.splash_potion.effect.freezing": "Splash Potion of Freezing", + "item.minecraft.lingering_potion.effect.freezing": "Lingering Potion of Freezing", + "item.minecraft.tipped_arrow.effect.freezing": "Tipped Arrow of Freezing", + "item.minecraft.potion.effect.long_freezing": "Potion of Freezing", + "item.minecraft.splash_potion.effect.long_freezing": "Splash Potion of Freezing", + "item.minecraft.lingering_potion.effect.long_freezing": "Lingering Potion of Freezing", + "item.minecraft.tipped_arrow.effect.long_freezing": "Tipped Arrow of Freezing", + "create.recipe.garnished.fan_freezing.fan": "Fan behind Powder Snow", + "recipe.garnished.fan_freezing": "Bulk Freezing", + "create.recipe.garnished.red_dye_blowing.fan": "Fan behind Red Liquefied Mastic Resin", + "recipe.garnished.red_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.orange_dye_blowing.fan": "Fan behind Orange Liquefied Mastic Resin", + "recipe.garnished.orange_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.yellow_dye_blowing.fan": "Fan behind Yellow Liquefied Mastic Resin", + "recipe.garnished.yellow_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.green_dye_blowing.fan": "Fan behind Green Liquefied Mastic Resin", + "recipe.garnished.green_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.blue_dye_blowing.fan": "Fan behind Blue Liquefied Mastic Resin", + "recipe.garnished.blue_dye_blowing": "Bulk Dyeing", + "create.recipe.garnished.purple_dye_blowing.fan": "Fan behind Purple Liquefied Mastic Resin", + "recipe.garnished.purple_dye_blowing": "Bulk Dyeing", + "block.garnished.peanut_sack": "Compacted Nut Sack", "block.garnished.cashew_sack": "Compacted Nut Sack", "block.garnished.almond_sack": "Compacted Nut Sack", @@ -528,19 +562,19 @@ "block.garnished.peanut_oil": "Peanut Oil", "fluid.cashew_mixture": "Cashew Mixture", "block.garnished.cashew_mixture": "Cashew Mixture", - "fluid.garnished.mastic_resin": "Liquefied Mastic Resin", + "fluid.mastic_resin": "Liquefied Mastic Resin", "block.garnished.mastic_resin": "Liquefied Mastic Resin", - "fluid.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.red_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.orange_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.green_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.blue_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", - "fluid.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", + "fluid.purple_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", "block.garnished.nut_plant": "Nut Growth", diff --git a/src/main/resources/assets/garnished/lang/ru_ru.json b/src/main/resources/assets/garnished/lang/ru_ru.json index 58f5a885..c2041a34 100644 --- a/src/main/resources/assets/garnished/lang/ru_ru.json +++ b/src/main/resources/assets/garnished/lang/ru_ru.json @@ -490,6 +490,40 @@ "item.minecraft.lingering_potion.effect.mummification": "Lingering Potion of Mummification", // "item.minecraft.tipped_arrow.effect.mummification": "Tipped Arrow of Mummification", // + "item.garnished.frost": "Frost", // + "item.garnished.numbing_parchment": "Numbing Parchment", // + "item.garnished.polar_bear_hide": "Polar Bear Hide", // + "item.garnished.chilled_apple": "Chilled Apple", // + "item.garnished.raw_polar_bear_meat": "Raw Polar Bear Meat", // + "item.garnished.cooked_polar_bear_meat": "Cooked Polar Bear Meat", // + "item.garnished.frosted_dessert": "Frosted Dessert", // + "item.garnished.void_stroganoff": "Void Stroganoff", // + "item.garnished.explorers_concoction": "Explorer's Concoction", // + "item.garnished.polar_hide_scratch_paper": "Polar Hide Scratch Paper", // + "effect.garnished.freezing": "Freezing", // + "item.minecraft.potion.effect.freezing": "Potion of Freezing", // + "item.minecraft.splash_potion.effect.freezing": "Splash Potion of Freezing", // + "item.minecraft.lingering_potion.effect.freezing": "Lingering Potion of Freezing", // + "item.minecraft.tipped_arrow.effect.freezing": "Tipped Arrow of Freezing", // + "item.minecraft.potion.effect.long_freezing": "Potion of Freezing", // + "item.minecraft.splash_potion.effect.long_freezing": "Splash Potion of Freezing", // + "item.minecraft.lingering_potion.effect.long_freezing": "Lingering Potion of Freezing", // + "item.minecraft.tipped_arrow.effect.long_freezing": "Tipped Arrow of Freezing", // + "create.recipe.garnished.fan_freezing.fan": "Fan behind Powder Snow", // + "recipe.garnished.fan_freezing": "Bulk Freezing", // + "create.recipe.garnished.red_dye_blowing.fan": "Fan behind Red Liquefied Mastic Resin", // + "recipe.garnished.red_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.orange_dye_blowing.fan": "Fan behind Orange Liquefied Mastic Resin", // + "recipe.garnished.orange_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.yellow_dye_blowing.fan": "Fan behind Yellow Liquefied Mastic Resin", // + "recipe.garnished.yellow_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.green_dye_blowing.fan": "Fan behind Green Liquefied Mastic Resin", // + "recipe.garnished.green_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.blue_dye_blowing.fan": "Fan behind Blue Liquefied Mastic Resin", // + "recipe.garnished.blue_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.purple_dye_blowing.fan": "Fan behind Purple Liquefied Mastic Resin" , // + "recipe.garnished.purple_dye_blowing": "Bulk Dyeing", // + "block.garnished.peanut_sack": "Мешочек орехов", "block.garnished.cashew_sack": "Мешочек орехов", "block.garnished.almond_sack": "Мешочек орехов", @@ -528,19 +562,19 @@ "block.garnished.peanut_oil": "Арахисовое масло", "fluid.cashew_mixture": "Смесь кешью", "block.garnished.cashew_mixture": "Смесь кешью", - "fluid.garnished.mastic_resin": "Жидкая мастическая смола", + "fluid.mastic_resin": "Жидкая мастическая смола", "block.garnished.mastic_resin": "Жидкая мастическая смола", - "fluid.garnished.red_mastic_resin": "Жидкая цветная мастическая смола", + "fluid.red_mastic_resin": "Жидкая цветная мастическая смола", "block.garnished.red_mastic_resin": "Жидкая цветная мастическая смола", - "fluid.garnished.orange_mastic_resin": "Жидкая цветная мастическая смола", + "fluid.orange_mastic_resin": "Жидкая цветная мастическая смола", "block.garnished.orange_mastic_resin": "Жидкая цветная мастическая смола", - "fluid.garnished.yellow_mastic_resin": "Жидкая цветная мастическая смола", + "fluid.yellow_mastic_resin": "Жидкая цветная мастическая смола", "block.garnished.yellow_mastic_resin": "Жидкая цветная мастическая смола", - "fluid.garnished.green_mastic_resin": "Жидкая цветная мастическая смола", + "fluid.green_mastic_resin": "Жидкая цветная мастическая смола", "block.garnished.green_mastic_resin": "Жидкая цветная мастическая смола", - "fluid.garnished.blue_mastic_resin": "Жидкая цветная мастическая смола", + "fluid.blue_mastic_resin": "Жидкая цветная мастическая смола", "block.garnished.blue_mastic_resin": "Жидкая цветная мастическая смола", - "fluid.garnished.purple_mastic_resin": "Жидкая цветная мастическая смола", + "fluid.purple_mastic_resin": "Жидкая цветная мастическая смола", "block.garnished.purple_mastic_resin": "Жидкая цветная мастическая смола", "block.garnished.nut_plant": "Ореховый росток", diff --git a/src/main/resources/assets/garnished/lang/zh_cn.json b/src/main/resources/assets/garnished/lang/zh_cn.json index 6012aeba..70519948 100644 --- a/src/main/resources/assets/garnished/lang/zh_cn.json +++ b/src/main/resources/assets/garnished/lang/zh_cn.json @@ -491,6 +491,40 @@ "item.minecraft.lingering_potion.effect.mummification": "Lingering Potion of Mummification", // "item.minecraft.tipped_arrow.effect.mummification": "Tipped Arrow of Mummification", // + "item.garnished.frost": "Frost", // + "item.garnished.numbing_parchment": "Numbing Parchment", // + "item.garnished.polar_bear_hide": "Polar Bear Hide", // + "item.garnished.chilled_apple": "Chilled Apple", // + "item.garnished.raw_polar_bear_meat": "Raw Polar Bear Meat", // + "item.garnished.cooked_polar_bear_meat": "Cooked Polar Bear Meat", // + "item.garnished.frosted_dessert": "Frosted Dessert", // + "item.garnished.void_stroganoff": "Void Stroganoff", // + "item.garnished.explorers_concoction": "Explorer's Concoction", // + "item.garnished.polar_hide_scratch_paper": "Polar Hide Scratch Paper", // + "effect.garnished.freezing": "Freezing", // + "item.minecraft.potion.effect.freezing": "Potion of Freezing", // + "item.minecraft.splash_potion.effect.freezing": "Splash Potion of Freezing", // + "item.minecraft.lingering_potion.effect.freezing": "Lingering Potion of Freezing", // + "item.minecraft.tipped_arrow.effect.freezing": "Tipped Arrow of Freezing", // + "item.minecraft.potion.effect.long_freezing": "Potion of Freezing", // + "item.minecraft.splash_potion.effect.long_freezing": "Splash Potion of Freezing", // + "item.minecraft.lingering_potion.effect.long_freezing": "Lingering Potion of Freezing", // + "item.minecraft.tipped_arrow.effect.long_freezing": "Tipped Arrow of Freezing", // + "create.recipe.garnished.fan_freezing.fan": "Fan behind Powder Snow", // + "recipe.garnished.fan_freezing": "Bulk Freezing", // + "create.recipe.garnished.red_dye_blowing.fan": "Fan behind Red Liquefied Mastic Resin", // + "recipe.garnished.red_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.orange_dye_blowing.fan": "Fan behind Orange Liquefied Mastic Resin", // + "recipe.garnished.orange_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.yellow_dye_blowing.fan": "Fan behind Yellow Liquefied Mastic Resin", // + "recipe.garnished.yellow_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.green_dye_blowing.fan": "Fan behind Green Liquefied Mastic Resin", // + "recipe.garnished.green_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.blue_dye_blowing.fan": "Fan behind Blue Liquefied Mastic Resin", // + "recipe.garnished.blue_dye_blowing": "Bulk Dyeing", // + "create.recipe.garnished.purple_dye_blowing.fan": "Fan behind Purple Liquefied Mastic Resin" , // + "recipe.garnished.purple_dye_blowing": "Bulk Dyeing", // + "block.garnished.peanut_sack": "压实坚果袋", "block.garnished.cashew_sack": "压实坚果袋", "block.garnished.almond_sack": "压实坚果袋", @@ -529,19 +563,19 @@ "block.garnished.peanut_oil": "花生油", "fluid.cashew_mixture": "腰果混合物", "block.garnished.cashew_mixture": "腰果混合物", - "fluid.garnished.mastic_resin": "Liquefied Mastic Resin", // + "fluid.mastic_resin": "Liquefied Mastic Resin", // "block.garnished.mastic_resin": "Liquefied Mastic Resin", // - "fluid.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", // + "fluid.red_mastic_resin": "Liquefied Coloured Mastic Resin", // "block.garnished.red_mastic_resin": "Liquefied Coloured Mastic Resin", // - "fluid.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", // + "fluid.orange_mastic_resin": "Liquefied Coloured Mastic Resin", // "block.garnished.orange_mastic_resin": "Liquefied Coloured Mastic Resin", // - "fluid.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", // + "fluid.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", // "block.garnished.yellow_mastic_resin": "Liquefied Coloured Mastic Resin", // - "fluid.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", // + "fluid.green_mastic_resin": "Liquefied Coloured Mastic Resin", // "block.garnished.green_mastic_resin": "Liquefied Coloured Mastic Resin", // - "fluid.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", // + "fluid.blue_mastic_resin": "Liquefied Coloured Mastic Resin", // "block.garnished.blue_mastic_resin": "Liquefied Coloured Mastic Resin", // - "fluid.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", // + "fluid.purple_mastic_resin": "Liquefied Coloured Mastic Resin", // "block.garnished.purple_mastic_resin": "Liquefied Coloured Mastic Resin", // "block.garnished.nut_plant": "坚果植株", diff --git a/src/main/resources/assets/garnished/models/item/chilled_apple.json b/src/main/resources/assets/garnished/models/item/chilled_apple.json new file mode 100644 index 00000000..f0faf064 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/chilled_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/chilled_apple" + } +} diff --git a/src/main/resources/assets/garnished/models/item/cooked_polar_bear_meat.json b/src/main/resources/assets/garnished/models/item/cooked_polar_bear_meat.json new file mode 100644 index 00000000..72019b18 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/cooked_polar_bear_meat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/cooked_polar_bear_meat" + } +} diff --git a/src/main/resources/assets/garnished/models/item/explorers_concoction.json b/src/main/resources/assets/garnished/models/item/explorers_concoction.json new file mode 100644 index 00000000..f258f008 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/explorers_concoction.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/explorers_concoction" + } +} diff --git a/src/main/resources/assets/garnished/models/item/frost.json b/src/main/resources/assets/garnished/models/item/frost.json new file mode 100644 index 00000000..692a21af --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/frost.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/frost" + } +} diff --git a/src/main/resources/assets/garnished/models/item/frosted_dessert.json b/src/main/resources/assets/garnished/models/item/frosted_dessert.json new file mode 100644 index 00000000..9df8fcf2 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/frosted_dessert.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/frosted_dessert" + } +} diff --git a/src/main/resources/assets/garnished/models/item/ice_bucket.json b/src/main/resources/assets/garnished/models/item/ice_bucket.json new file mode 100644 index 00000000..4f760896 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/ice_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/ice_bucket" + } +} diff --git a/src/main/resources/assets/garnished/models/item/numbing_parchment.json b/src/main/resources/assets/garnished/models/item/numbing_parchment.json new file mode 100644 index 00000000..dbb5b0b9 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/numbing_parchment.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/numbing_parchment" + } +} diff --git a/src/main/resources/assets/garnished/models/item/polar_bear_hide.json b/src/main/resources/assets/garnished/models/item/polar_bear_hide.json new file mode 100644 index 00000000..1f1028a8 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/polar_bear_hide.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/polar_bear_hide" + } +} diff --git a/src/main/resources/assets/garnished/models/item/polar_hide_scratch_paper.json b/src/main/resources/assets/garnished/models/item/polar_hide_scratch_paper.json new file mode 100644 index 00000000..00550ae7 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/polar_hide_scratch_paper.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/polar_hide_scratch_paper" + } +} diff --git a/src/main/resources/assets/garnished/models/item/raw_polar_bear_meat.json b/src/main/resources/assets/garnished/models/item/raw_polar_bear_meat.json new file mode 100644 index 00000000..ddcd053d --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/raw_polar_bear_meat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/raw_polar_bear_meat" + } +} diff --git a/src/main/resources/assets/garnished/models/item/void_stroganoff.json b/src/main/resources/assets/garnished/models/item/void_stroganoff.json new file mode 100644 index 00000000..27eeecd7 --- /dev/null +++ b/src/main/resources/assets/garnished/models/item/void_stroganoff.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "garnished:item/void_stroganoff" + } +} diff --git a/src/main/resources/assets/garnished/textures/item/chilled_apple.png b/src/main/resources/assets/garnished/textures/item/chilled_apple.png new file mode 100644 index 00000000..717fc5de Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/chilled_apple.png differ diff --git a/src/main/resources/assets/garnished/textures/item/cooked_polar_bear_meat.png b/src/main/resources/assets/garnished/textures/item/cooked_polar_bear_meat.png new file mode 100644 index 00000000..59ba44c3 Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/cooked_polar_bear_meat.png differ diff --git a/src/main/resources/assets/garnished/textures/item/cooked_tenebrous_meat.png b/src/main/resources/assets/garnished/textures/item/cooked_tenebrous_meat.png index c99ae802..98a97b06 100644 Binary files a/src/main/resources/assets/garnished/textures/item/cooked_tenebrous_meat.png and b/src/main/resources/assets/garnished/textures/item/cooked_tenebrous_meat.png differ diff --git a/src/main/resources/assets/garnished/textures/item/explorers_concoction.png b/src/main/resources/assets/garnished/textures/item/explorers_concoction.png new file mode 100644 index 00000000..6b9874a5 Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/explorers_concoction.png differ diff --git a/src/main/resources/assets/garnished/textures/item/frost.png b/src/main/resources/assets/garnished/textures/item/frost.png new file mode 100644 index 00000000..69ce0774 Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/frost.png differ diff --git a/src/main/resources/assets/garnished/textures/item/frosted_dessert.png b/src/main/resources/assets/garnished/textures/item/frosted_dessert.png new file mode 100644 index 00000000..b67ed2d2 Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/frosted_dessert.png differ diff --git a/src/main/resources/assets/garnished/textures/item/ghast_tendril.png b/src/main/resources/assets/garnished/textures/item/ghast_tendril.png index 8cf58deb..20a110e7 100644 Binary files a/src/main/resources/assets/garnished/textures/item/ghast_tendril.png and b/src/main/resources/assets/garnished/textures/item/ghast_tendril.png differ diff --git a/src/main/resources/assets/garnished/textures/item/ice_bucket.png b/src/main/resources/assets/garnished/textures/item/ice_bucket.png new file mode 100644 index 00000000..482d3daa Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/ice_bucket.png differ diff --git a/src/main/resources/assets/garnished/textures/item/numbing_parchment.png b/src/main/resources/assets/garnished/textures/item/numbing_parchment.png new file mode 100644 index 00000000..ded6adfa Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/numbing_parchment.png differ diff --git a/src/main/resources/assets/garnished/textures/item/polar_bear_hide.png b/src/main/resources/assets/garnished/textures/item/polar_bear_hide.png new file mode 100644 index 00000000..4f27f82b Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/polar_bear_hide.png differ diff --git a/src/main/resources/assets/garnished/textures/item/polar_hide_scratch_paper.png b/src/main/resources/assets/garnished/textures/item/polar_hide_scratch_paper.png new file mode 100644 index 00000000..6ff7cc7d Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/polar_hide_scratch_paper.png differ diff --git a/src/main/resources/assets/garnished/textures/item/porkchop_and_wheat_graze.png b/src/main/resources/assets/garnished/textures/item/porkchop_and_wheat_graze.png index 322cd0a4..a315e097 100644 Binary files a/src/main/resources/assets/garnished/textures/item/porkchop_and_wheat_graze.png and b/src/main/resources/assets/garnished/textures/item/porkchop_and_wheat_graze.png differ diff --git a/src/main/resources/assets/garnished/textures/item/raw_polar_bear_meat.png b/src/main/resources/assets/garnished/textures/item/raw_polar_bear_meat.png new file mode 100644 index 00000000..ad427433 Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/raw_polar_bear_meat.png differ diff --git a/src/main/resources/assets/garnished/textures/item/raw_tenebrous_meat.png b/src/main/resources/assets/garnished/textures/item/raw_tenebrous_meat.png index 609f2137..beba8b59 100644 Binary files a/src/main/resources/assets/garnished/textures/item/raw_tenebrous_meat.png and b/src/main/resources/assets/garnished/textures/item/raw_tenebrous_meat.png differ diff --git a/src/main/resources/assets/garnished/textures/item/void_stroganoff.png b/src/main/resources/assets/garnished/textures/item/void_stroganoff.png new file mode 100644 index 00000000..c3c1d7dd Binary files /dev/null and b/src/main/resources/assets/garnished/textures/item/void_stroganoff.png differ diff --git a/src/main/resources/assets/garnished/textures/mob_effect/freezing.png b/src/main/resources/assets/garnished/textures/mob_effect/freezing.png new file mode 100644 index 00000000..4534ac4f Binary files /dev/null and b/src/main/resources/assets/garnished/textures/mob_effect/freezing.png differ diff --git a/src/main/resources/data/c/tags/items/buckets/mastic_resin.json b/src/main/resources/data/c/tags/items/buckets/mastic_resin.json index fe539e55..4fe758ac 100644 --- a/src/main/resources/data/c/tags/items/buckets/mastic_resin.json +++ b/src/main/resources/data/c/tags/items/buckets/mastic_resin.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ + "garnished:mastic_resin_bucket", "garnished:red_mastic_resin_bucket", "garnished:orange_mastic_resin_bucket", "garnished:yellow_mastic_resin_bucket", @@ -8,4 +9,4 @@ "garnished:blue_mastic_resin_bucket", "garnished:purple_mastic_resin_bucket" ] -} \ No newline at end of file +} diff --git a/src/main/resources/data/create/tags/items/upright_on_belt.json b/src/main/resources/data/create/tags/items/upright_on_belt.json index 43f4daa7..7639eff4 100644 --- a/src/main/resources/data/create/tags/items/upright_on_belt.json +++ b/src/main/resources/data/create/tags/items/upright_on_belt.json @@ -47,6 +47,9 @@ "garnished:prickly_pear_stew", "garnished:overgrown_brew", "garnished:rosy_cocktail", + "garnished:frosted_dessert", + "garnished:void_stroganoff", + "garnished:explorers_concoction", "#garnished:venerable_delicacies", "#garnished:slime_drops", "#c:tools/hatchets" diff --git a/src/main/resources/data/garnished/advancements/consume_all_foods.json b/src/main/resources/data/garnished/advancements/consume_all_foods.json index fc7fc75c..22cc203a 100644 --- a/src/main/resources/data/garnished/advancements/consume_all_foods.json +++ b/src/main/resources/data/garnished/advancements/consume_all_foods.json @@ -1762,6 +1762,179 @@ ] } } + }, + + "overgrown_brew": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:overgrown_brew" + ] + } + } + }, + "prickly_pear_stew": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:prickly_pear_stew" + ] + } + } + }, + "stew_of_the_damned": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:stew_of_the_damned" + ] + } + } + }, + "sinopia_rock_sweet": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:sinopia_rock_sweet" + ] + } + } + }, + "nopalito_wrap": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:nopalito_wrap" + ] + } + } + }, + "nopalito_wrap_supreme": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:nopalito_wrap_supreme" + ] + } + } + }, + "bamboo_clod": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:bamboo_clod" + ] + } + } + }, + "prickly_pear": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:prickly_pear" + ] + } + } + }, + "thorn_on_a_stick": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:thorn_on_a_stick" + ] + } + } + }, + "rosy_cocktail": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:rosy_cocktail" + ] + } + } + }, + + "explorers_concoction": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:explorers_concoction" + ] + } + } + }, + "void_stroganoff": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:void_stroganoff" + ] + } + } + }, + "frosted_dessert": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:frosted_dessert" + ] + } + } + }, + "chilled_apple": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:chilled_apple" + ] + } + } + }, + "cooked_polar_bear_meat": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:cooked_polar_bear_meat" + ] + } + } + }, + "raw_polar_bear_meat": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:raw_polar_bear_meat" + ] + } + } + }, + + "molten_stew": { + "trigger": "minecraft:consume_item", + "conditions": { + "item": { + "items": [ + "garnished:molten_stew" + ] + } + } } }, @@ -2301,6 +2474,60 @@ ], [ "galvanic_haunting" + ], + + [ + "overgrown_brew" + ], + [ + "prickly_pear_stew" + ], + [ + "stew_of_the_damned" + ], + [ + "sinopia_rock_sweet" + ], + [ + "nopalito_wrap" + ], + [ + "nopalito_wrap_supreme" + ], + [ + "bamboo_clod" + ], + [ + "prickly_pear" + ], + [ + "thorn_on_a_stick" + ], + [ + "rosy_cocktail" + ], + + [ + "explorers_concoction" + ], + [ + "void_stroganoff" + ], + [ + "frosted_dessert" + ], + [ + "chilled_apple" + ], + [ + "cooked_polar_bear_meat" + ], + [ + "raw_polar_bear_meat" + ], + + [ + "molten_stew" ] ], "rewards": { diff --git a/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_campfire_smoking.json b/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_campfire_smoking.json new file mode 100644 index 00000000..ab93c89e --- /dev/null +++ b/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_campfire_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "garnished:raw_polar_bear_meat" + }, + "result": "garnished:cooked_polar_bear_meat", + "experience": 0.35, + "cookingtime": 600 +} diff --git a/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_smelting.json b/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_smelting.json new file mode 100644 index 00000000..65c9cbde --- /dev/null +++ b/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_smelting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "garnished:raw_polar_bear_meat" + }, + "result": "garnished:cooked_polar_bear_meat", + "experience": 0.35, + "cookingtime": 200 +} diff --git a/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_smoking.json b/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_smoking.json new file mode 100644 index 00000000..854f74df --- /dev/null +++ b/src/main/resources/data/garnished/recipes/cooked_polar_bear_meat_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "garnished:raw_polar_bear_meat" + }, + "result": "garnished:cooked_polar_bear_meat", + "experience": 0.35, + "cookingtime": 100 +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_banner.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_banner.json new file mode 100644 index 00000000..760a6644 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_banner.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:banners" + } + ], + "results": [ + { + "item": "minecraft:blue_banner", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_bed.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_bed.json new file mode 100644 index 00000000..ffd07449 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_bed.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:beds" + } + ], + "results": [ + { + "item": "minecraft:blue_bed", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_candle.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_candle.json new file mode 100644 index 00000000..8f2cfa66 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_candle.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:candles" + } + ], + "results": [ + { + "item": "minecraft:blue_candle", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_carpet.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_carpet.json new file mode 100644 index 00000000..4d59cdfa --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_carpet.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool_carpets" + } + ], + "results": [ + { + "item": "minecraft:blue_carpet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_glazed_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_glazed_terracotta.json new file mode 100644 index 00000000..3d3c0d0c --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_glazed_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:glazed_terracotta" + } + ], + "results": [ + { + "item": "minecraft:blue_glazed_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_block_from_mastic_block_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_block_from_mastic_block_tag.json new file mode 100644 index 00000000..738c1e68 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_block_from_mastic_block_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_blocks" + } + ], + "results": [ + { + "item": "garnished:blue_mastic_block", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_paste_from_mastic_paste_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_paste_from_mastic_paste_tag.json new file mode 100644 index 00000000..0465d9e7 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_paste_from_mastic_paste_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_paste" + } + ], + "results": [ + { + "item": "garnished:mastic_paste_blue", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_resin_from_mastic_resin_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_resin_from_mastic_resin_tag.json new file mode 100644 index 00000000..03cc0436 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_mastic_resin_from_mastic_resin_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_resin" + } + ], + "results": [ + { + "item": "garnished:mastic_resin_blue", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_shulker_box.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_shulker_box.json new file mode 100644 index 00000000..2acb206f --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_shulker_box.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:shulker_boxes" + } + ], + "results": [ + { + "item": "minecraft:blue_shulker_box", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_stained_glass.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_stained_glass.json new file mode 100644 index 00000000..e80b4436 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_stained_glass.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass" + }, + { + "item": "minecraft:glass" + } + ] + ], + "results": [ + { + "item": "minecraft:blue_stained_glass", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_stained_glass_pane.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_stained_glass_pane.json new file mode 100644 index 00000000..4f010ea1 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_stained_glass_pane.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass_panes" + }, + { + "item": "minecraft:glass_pane" + } + ] + ], + "results": [ + { + "item": "minecraft:blue_stained_glass_pane", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_terracotta.json new file mode 100644 index 00000000..f4932696 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:terracotta" + } + ], + "results": [ + { + "item": "minecraft:blue_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_wool.json b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_wool.json new file mode 100644 index 00000000..7d60080b --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/blue/blue_wool.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:blue_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:blue_wool", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_banner.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_banner.json new file mode 100644 index 00000000..2142a145 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_banner.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:banners" + } + ], + "results": [ + { + "item": "minecraft:green_banner", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_bed.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_bed.json new file mode 100644 index 00000000..ff86b590 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_bed.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:beds" + } + ], + "results": [ + { + "item": "minecraft:green_bed", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_candle.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_candle.json new file mode 100644 index 00000000..fab494c5 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_candle.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:candles" + } + ], + "results": [ + { + "item": "minecraft:green_candle", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_carpet.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_carpet.json new file mode 100644 index 00000000..bd4296e1 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_carpet.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool_carpets" + } + ], + "results": [ + { + "item": "minecraft:green_carpet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_glazed_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_glazed_terracotta.json new file mode 100644 index 00000000..7d99d312 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_glazed_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:glazed_terracotta" + } + ], + "results": [ + { + "item": "minecraft:green_glazed_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_block_from_mastic_block_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_block_from_mastic_block_tag.json new file mode 100644 index 00000000..a43fe16b --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_block_from_mastic_block_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_blocks" + } + ], + "results": [ + { + "item": "garnished:green_mastic_block", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_paste_from_mastic_paste_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_paste_from_mastic_paste_tag.json new file mode 100644 index 00000000..5a305d30 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_paste_from_mastic_paste_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_paste" + } + ], + "results": [ + { + "item": "garnished:mastic_paste_green", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_resin_from_mastic_resin_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_resin_from_mastic_resin_tag.json new file mode 100644 index 00000000..1bf808f8 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_mastic_resin_from_mastic_resin_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_resin" + } + ], + "results": [ + { + "item": "garnished:mastic_resin_green", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_shulker_box.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_shulker_box.json new file mode 100644 index 00000000..eed1137e --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_shulker_box.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:shulker_boxes" + } + ], + "results": [ + { + "item": "minecraft:green_shulker_box", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_stained_glass.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_stained_glass.json new file mode 100644 index 00000000..d619975b --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_stained_glass.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass" + }, + { + "item": "minecraft:glass" + } + ] + ], + "results": [ + { + "item": "minecraft:green_stained_glass", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_stained_glass_pane.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_stained_glass_pane.json new file mode 100644 index 00000000..a3d60988 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_stained_glass_pane.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass_panes" + }, + { + "item": "minecraft:glass_pane" + } + ] + ], + "results": [ + { + "item": "minecraft:green_stained_glass_pane", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_terracotta.json new file mode 100644 index 00000000..9a0dfcf1 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:terracotta" + } + ], + "results": [ + { + "item": "minecraft:green_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/green/green_wool.json b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_wool.json new file mode 100644 index 00000000..1822b997 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/green/green_wool.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:green_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:green_wool", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_banner.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_banner.json new file mode 100644 index 00000000..f30c446b --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_banner.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:banners" + } + ], + "results": [ + { + "item": "minecraft:orange_banner", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_bed.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_bed.json new file mode 100644 index 00000000..e9165a02 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_bed.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:beds" + } + ], + "results": [ + { + "item": "minecraft:orange_bed", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_candle.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_candle.json new file mode 100644 index 00000000..a3df5320 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_candle.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:candles" + } + ], + "results": [ + { + "item": "minecraft:orange_candle", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_carpet.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_carpet.json new file mode 100644 index 00000000..e1647936 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_carpet.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool_carpets" + } + ], + "results": [ + { + "item": "minecraft:orange_carpet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_glazed_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_glazed_terracotta.json new file mode 100644 index 00000000..512472ff --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_glazed_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:glazed_terracotta" + } + ], + "results": [ + { + "item": "minecraft:orange_glazed_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_block_from_mastic_block_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_block_from_mastic_block_tag.json new file mode 100644 index 00000000..1dd3bdd0 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_block_from_mastic_block_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_blocks" + } + ], + "results": [ + { + "item": "garnished:orange_mastic_block", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_paste_from_mastic_paste_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_paste_from_mastic_paste_tag.json new file mode 100644 index 00000000..5cade4fb --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_paste_from_mastic_paste_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_paste" + } + ], + "results": [ + { + "item": "garnished:mastic_paste_orange", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_resin_from_mastic_resin_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_resin_from_mastic_resin_tag.json new file mode 100644 index 00000000..2e357364 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_mastic_resin_from_mastic_resin_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_resin" + } + ], + "results": [ + { + "item": "garnished:mastic_resin_orange", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_shulker_box.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_shulker_box.json new file mode 100644 index 00000000..31ad5f3a --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_shulker_box.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:shulker_boxes" + } + ], + "results": [ + { + "item": "minecraft:orange_shulker_box", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_stained_glass.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_stained_glass.json new file mode 100644 index 00000000..f2296ea8 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_stained_glass.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass" + }, + { + "item": "minecraft:glass" + } + ] + ], + "results": [ + { + "item": "minecraft:orange_stained_glass", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_stained_glass_pane.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_stained_glass_pane.json new file mode 100644 index 00000000..e4f7744c --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_stained_glass_pane.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass_panes" + }, + { + "item": "minecraft:glass_pane" + } + ] + ], + "results": [ + { + "item": "minecraft:orange_stained_glass_pane", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_terracotta.json new file mode 100644 index 00000000..071aa8d1 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:terracotta" + } + ], + "results": [ + { + "item": "minecraft:orange_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_wool.json b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_wool.json new file mode 100644 index 00000000..a3f61e1e --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/orange/orange_wool.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:orange_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:orange_wool", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_banner.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_banner.json new file mode 100644 index 00000000..c90c78fd --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_banner.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:banners" + } + ], + "results": [ + { + "item": "minecraft:purple_banner", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_bed.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_bed.json new file mode 100644 index 00000000..b3223000 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_bed.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:beds" + } + ], + "results": [ + { + "item": "minecraft:purple_bed", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_candle.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_candle.json new file mode 100644 index 00000000..01b391e3 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_candle.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:candles" + } + ], + "results": [ + { + "item": "minecraft:purple_candle", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_carpet.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_carpet.json new file mode 100644 index 00000000..9e84ec2f --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_carpet.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool_carpets" + } + ], + "results": [ + { + "item": "minecraft:purple_carpet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_glazed_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_glazed_terracotta.json new file mode 100644 index 00000000..44bf0d7c --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_glazed_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:glazed_terracotta" + } + ], + "results": [ + { + "item": "minecraft:purple_glazed_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_block_from_mastic_block_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_block_from_mastic_block_tag.json new file mode 100644 index 00000000..c2062276 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_block_from_mastic_block_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_blocks" + } + ], + "results": [ + { + "item": "garnished:purple_mastic_block", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_paste_from_mastic_paste_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_paste_from_mastic_paste_tag.json new file mode 100644 index 00000000..2ce42bfe --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_paste_from_mastic_paste_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_paste" + } + ], + "results": [ + { + "item": "garnished:mastic_paste_purple", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_resin_from_mastic_resin_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_resin_from_mastic_resin_tag.json new file mode 100644 index 00000000..a2a32ac0 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_mastic_resin_from_mastic_resin_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_resin" + } + ], + "results": [ + { + "item": "garnished:mastic_resin_purple", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_shulker_box.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_shulker_box.json new file mode 100644 index 00000000..4a2a55df --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_shulker_box.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:shulker_boxes" + } + ], + "results": [ + { + "item": "minecraft:purple_shulker_box", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_stained_glass.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_stained_glass.json new file mode 100644 index 00000000..f31cb85d --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_stained_glass.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass" + }, + { + "item": "minecraft:glass" + } + ] + ], + "results": [ + { + "item": "minecraft:purple_stained_glass", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_stained_glass_pane.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_stained_glass_pane.json new file mode 100644 index 00000000..f94f3701 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_stained_glass_pane.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass_panes" + }, + { + "item": "minecraft:glass_pane" + } + ] + ], + "results": [ + { + "item": "minecraft:purple_stained_glass_pane", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_terracotta.json new file mode 100644 index 00000000..fef6f5e4 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:terracotta" + } + ], + "results": [ + { + "item": "minecraft:purple_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_wool.json b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_wool.json new file mode 100644 index 00000000..a7abe953 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/purple/purple_wool.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:purple_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:purple_wool", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_banner.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_banner.json new file mode 100644 index 00000000..a4e41acc --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_banner.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:banners" + } + ], + "results": [ + { + "item": "minecraft:red_banner", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_bed.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_bed.json new file mode 100644 index 00000000..1c170717 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_bed.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:beds" + } + ], + "results": [ + { + "item": "minecraft:red_bed", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_candle.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_candle.json new file mode 100644 index 00000000..5e418ad3 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_candle.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:candles" + } + ], + "results": [ + { + "item": "minecraft:red_candle", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_carpet.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_carpet.json new file mode 100644 index 00000000..3c8f1833 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_carpet.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool_carpets" + } + ], + "results": [ + { + "item": "minecraft:red_carpet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_glazed_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_glazed_terracotta.json new file mode 100644 index 00000000..576c6756 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_glazed_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:glazed_terracotta" + } + ], + "results": [ + { + "item": "minecraft:red_glazed_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_block_from_mastic_block_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_block_from_mastic_block_tag.json new file mode 100644 index 00000000..6e48de33 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_block_from_mastic_block_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_blocks" + } + ], + "results": [ + { + "item": "garnished:red_mastic_block", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_paste_from_mastic_paste_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_paste_from_mastic_paste_tag.json new file mode 100644 index 00000000..4826329c --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_paste_from_mastic_paste_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_paste" + } + ], + "results": [ + { + "item": "garnished:mastic_paste_red", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_resin_from_mastic_resin_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_resin_from_mastic_resin_tag.json new file mode 100644 index 00000000..bf782086 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_mastic_resin_from_mastic_resin_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_resin" + } + ], + "results": [ + { + "item": "garnished:mastic_resin_red", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_shulker_box.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_shulker_box.json new file mode 100644 index 00000000..c7ed296a --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_shulker_box.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:shulker_boxes" + } + ], + "results": [ + { + "item": "minecraft:red_shulker_box", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_stained_glass.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_stained_glass.json new file mode 100644 index 00000000..eff4e1f5 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_stained_glass.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass" + }, + { + "item": "minecraft:glass" + } + ] + ], + "results": [ + { + "item": "minecraft:red_stained_glass", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_stained_glass_pane.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_stained_glass_pane.json new file mode 100644 index 00000000..dc382bfe --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_stained_glass_pane.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass_panes" + }, + { + "item": "minecraft:glass_pane" + } + ] + ], + "results": [ + { + "item": "minecraft:red_stained_glass_pane", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_terracotta.json new file mode 100644 index 00000000..b0bb822e --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:terracotta" + } + ], + "results": [ + { + "item": "minecraft:red_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/red/red_wool.json b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_wool.json new file mode 100644 index 00000000..ef11fb9f --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/red/red_wool.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:red_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:red_wool", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_banner.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_banner.json new file mode 100644 index 00000000..60524ec7 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_banner.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:banners" + } + ], + "results": [ + { + "item": "minecraft:yellow_banner", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_bed.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_bed.json new file mode 100644 index 00000000..d8ab9a68 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_bed.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:beds" + } + ], + "results": [ + { + "item": "minecraft:yellow_bed", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_candle.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_candle.json new file mode 100644 index 00000000..26f43fdc --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_candle.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:candles" + } + ], + "results": [ + { + "item": "minecraft:yellow_candle", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_carpet.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_carpet.json new file mode 100644 index 00000000..fb87dc32 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_carpet.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool_carpets" + } + ], + "results": [ + { + "item": "minecraft:yellow_carpet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_glazed_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_glazed_terracotta.json new file mode 100644 index 00000000..4db3e54a --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_glazed_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:glazed_terracotta" + } + ], + "results": [ + { + "item": "minecraft:yellow_glazed_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_block_from_mastic_block_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_block_from_mastic_block_tag.json new file mode 100644 index 00000000..9b26159c --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_block_from_mastic_block_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_blocks" + } + ], + "results": [ + { + "item": "garnished:yellow_mastic_block", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_paste_from_mastic_paste_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_paste_from_mastic_paste_tag.json new file mode 100644 index 00000000..308065aa --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_paste_from_mastic_paste_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_paste" + } + ], + "results": [ + { + "item": "garnished:mastic_paste_yellow", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_resin_from_mastic_resin_tag.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_resin_from_mastic_resin_tag.json new file mode 100644 index 00000000..8c5f351e --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_mastic_resin_from_mastic_resin_tag.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "garnished:mastic_resin" + } + ], + "results": [ + { + "item": "garnished:mastic_resin_yellow", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_shulker_box.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_shulker_box.json new file mode 100644 index 00000000..bb6299b5 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_shulker_box.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:shulker_boxes" + } + ], + "results": [ + { + "item": "minecraft:yellow_shulker_box", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_stained_glass.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_stained_glass.json new file mode 100644 index 00000000..51bfffc2 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_stained_glass.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass" + }, + { + "item": "minecraft:glass" + } + ] + ], + "results": [ + { + "item": "minecraft:yellow_stained_glass", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_stained_glass_pane.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_stained_glass_pane.json new file mode 100644 index 00000000..d77d7cc8 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_stained_glass_pane.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + [ + { + "tag": "c:stained_glass_panes" + }, + { + "item": "minecraft:glass_pane" + } + ] + ], + "results": [ + { + "item": "minecraft:yellow_stained_glass_pane", + "count": 1 + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_terracotta.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_terracotta.json new file mode 100644 index 00000000..9a336942 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_terracotta.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:terracotta" + } + ], + "results": [ + { + "item": "minecraft:yellow_terracotta", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_wool.json b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_wool.json new file mode 100644 index 00000000..e7192a2a --- /dev/null +++ b/src/main/resources/data/garnished/recipes/dye_blowing/yellow/yellow_wool.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:yellow_dye_blowing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:yellow_wool", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/explorers_concoction.json b/src/main/resources/data/garnished/recipes/explorers_concoction.json new file mode 100644 index 00000000..d7135a4b --- /dev/null +++ b/src/main/resources/data/garnished/recipes/explorers_concoction.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:bowl" + }, + { + "item": "garnished:cosmic_powder" + }, + { + "item": "garnished:ender_jelly" + }, + { + "item": "garnished:mastic_paste_green" + } + ], + "result": { + "item": "garnished:explorers_concoction" + } +} diff --git a/src/main/resources/data/garnished/recipes/freezing/create/scoria_from_scorchia.json b/src/main/resources/data/garnished/recipes/freezing/create/scoria_from_scorchia.json new file mode 100644 index 00000000..2ec5df6b --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/create/scoria_from_scorchia.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "create:scorchia" + } + ], + "results": [ + { + "item": "create:scoria", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/garnished/brittle_dust_from_cinder_flour.json b/src/main/resources/data/garnished/recipes/freezing/garnished/brittle_dust_from_cinder_flour.json new file mode 100644 index 00000000..fec180cc --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/garnished/brittle_dust_from_cinder_flour.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "create:cinder_flour" + } + ], + "results": [ + { + "item": "garnished:brittle_dust", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/garnished/chilled_apple_from_apple.json b/src/main/resources/data/garnished/recipes/freezing/garnished/chilled_apple_from_apple.json new file mode 100644 index 00000000..6ab7c038 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/garnished/chilled_apple_from_apple.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:apple" + } + ], + "results": [ + { + "item": "garnished:chilled_apple", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/garnished/frost_from_sugar.json b/src/main/resources/data/garnished/recipes/freezing/garnished/frost_from_sugar.json new file mode 100644 index 00000000..a2caf9a3 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/garnished/frost_from_sugar.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:sugar" + } + ], + "results": [ + { + "item": "garnished:frost", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/garnished/icy_mastic_chunk.json b/src/main/resources/data/garnished/recipes/freezing/garnished/icy_mastic_chunk.json new file mode 100644 index 00000000..4906ac74 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/garnished/icy_mastic_chunk.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:mastic_resin_blue" + } + ], + "results": [ + { + "item": "garnished:icy_mastic_chunk", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/garnished/void_dust_from_volatile_dust.json b/src/main/resources/data/garnished/recipes/freezing/garnished/void_dust_from_volatile_dust.json new file mode 100644 index 00000000..efcbb183 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/garnished/void_dust_from_volatile_dust.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:volatile_dust" + } + ], + "results": [ + { + "item": "garnished:void_dust", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/garnished/voltaic_sea_grass_from_sea_grass.json b/src/main/resources/data/garnished/recipes/freezing/garnished/voltaic_sea_grass_from_sea_grass.json new file mode 100644 index 00000000..07da61af --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/garnished/voltaic_sea_grass_from_sea_grass.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:seagrass" + } + ], + "results": [ + { + "item": "garnished:voltaic_sea_grass", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/blue_ice_from_packed_ice.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/blue_ice_from_packed_ice.json new file mode 100644 index 00000000..9d27a6eb --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/blue_ice_from_packed_ice.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:packed_ice" + } + ], + "results": [ + { + "item": "minecraft:blue_ice", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/chorus_flower_from_chorus_plant.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/chorus_flower_from_chorus_plant.json new file mode 100644 index 00000000..964966fb --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/chorus_flower_from_chorus_plant.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:chorus_plant" + } + ], + "results": [ + { + "item": "minecraft:chorus_flower", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dried_kelp_block_from_garnished_kelp_block.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dried_kelp_block_from_garnished_kelp_block.json new file mode 100644 index 00000000..01c83029 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dried_kelp_block_from_garnished_kelp_block.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "tag": "garnished:kelp_blocks" + } + ], + "results": [ + { + "item": "minecraft:dried_kelp_block", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dried_kelp_from_garnished_kelp.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dried_kelp_from_garnished_kelp.json new file mode 100644 index 00000000..1054426b --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dried_kelp_from_garnished_kelp.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "tag": "garnished:dried_kelp" + } + ], + "results": [ + { + "item": "minecraft:dried_kelp", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/blue_from_mastic_paste.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/blue_from_mastic_paste.json new file mode 100644 index 00000000..6ba250df --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/blue_from_mastic_paste.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:mastic_paste_blue" + } + ], + "results": [ + { + "item": "minecraft:blue_dye", + "count": 2 + }, + { + "chance": 0.25, + "item": "minecraft:blue_dye", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/green_from_mastic_paste.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/green_from_mastic_paste.json new file mode 100644 index 00000000..b051b0e7 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/green_from_mastic_paste.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:mastic_paste_green" + } + ], + "results": [ + { + "item": "minecraft:green_dye", + "count": 2 + }, + { + "chance": 0.25, + "item": "minecraft:green_dye", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/orange_from_mastic_paste.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/orange_from_mastic_paste.json new file mode 100644 index 00000000..f48cb9ad --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/orange_from_mastic_paste.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:mastic_paste_orange" + } + ], + "results": [ + { + "item": "minecraft:orange_dye", + "count": 2 + }, + { + "chance": 0.25, + "item": "minecraft:orange_dye", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/purple_from_mastic_paste.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/purple_from_mastic_paste.json new file mode 100644 index 00000000..f26b5839 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/purple_from_mastic_paste.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:mastic_paste_purple" + } + ], + "results": [ + { + "item": "minecraft:purple_dye", + "count": 2 + }, + { + "chance": 0.25, + "item": "minecraft:purple_dye", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/red_from_mastic_paste.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/red_from_mastic_paste.json new file mode 100644 index 00000000..40690950 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/red_from_mastic_paste.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:mastic_paste_red" + } + ], + "results": [ + { + "item": "minecraft:red_dye", + "count": 2 + }, + { + "chance": 0.25, + "item": "minecraft:red_dye", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/yellow_from_mastic_paste.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/yellow_from_mastic_paste.json new file mode 100644 index 00000000..0828b200 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/dye/yellow_from_mastic_paste.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:mastic_paste_yellow" + } + ], + "results": [ + { + "item": "minecraft:yellow_dye", + "count": 2 + }, + { + "chance": 0.25, + "item": "minecraft:yellow_dye", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/end_stone_from_blackstone.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/end_stone_from_blackstone.json new file mode 100644 index 00000000..0ffdfdea --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/end_stone_from_blackstone.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:blackstone" + } + ], + "results": [ + { + "item": "minecraft:end_stone", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/kelp_from_garnished_kelp.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/kelp_from_garnished_kelp.json new file mode 100644 index 00000000..ee75bee0 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/kelp_from_garnished_kelp.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "tag": "garnished:kelp" + } + ], + "results": [ + { + "item": "minecraft:kelp", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/netherrack_from_magma_block.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/netherrack_from_magma_block.json new file mode 100644 index 00000000..920bbd89 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/netherrack_from_magma_block.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:magma_block" + } + ], + "results": [ + { + "item": "minecraft:netherrack", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/packed_ice_from_ice.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/packed_ice_from_ice.json new file mode 100644 index 00000000..7f472d31 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/packed_ice_from_ice.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:ice" + } + ], + "results": [ + { + "item": "minecraft:packed_ice", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/powder_snow_bucket_from_water_bucket.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/powder_snow_bucket_from_water_bucket.json new file mode 100644 index 00000000..c9b1768d --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/powder_snow_bucket_from_water_bucket.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:water_bucket" + } + ], + "results": [ + { + "item": "minecraft:powder_snow_bucket", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/slime_ball_from_magma_cream.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/slime_ball_from_magma_cream.json new file mode 100644 index 00000000..e248ae07 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/slime_ball_from_magma_cream.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:magma_cream" + } + ], + "results": [ + { + "item": "minecraft:slime_ball", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/soul_soil_from_soul_sand.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/soul_soil_from_soul_sand.json new file mode 100644 index 00000000..68504542 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/soul_soil_from_soul_sand.json @@ -0,0 +1,14 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "minecraft:soul_sand" + } + ], + "results": [ + { + "item": "minecraft:soul_soil", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/freezing/minecraft/sugar_from_void_dust.json.json b/src/main/resources/data/garnished/recipes/freezing/minecraft/sugar_from_void_dust.json.json new file mode 100644 index 00000000..62576499 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/freezing/minecraft/sugar_from_void_dust.json.json @@ -0,0 +1,19 @@ +{ + "type": "garnished:freezing", + "ingredients": [ + { + "item": "garnished:garnish_powder" + } + ], + "results": [ + { + "item": "minecraft:sugar", + "count": 1 + }, + { + "chance": 0.25, + "item": "minecraft:sugar", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/recipes/frosted_dessert.json b/src/main/resources/data/garnished/recipes/frosted_dessert.json new file mode 100644 index 00000000..f8e5fd29 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/frosted_dessert.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "garnished:frost" + }, + { + "item": "garnished:solemn_dust" + }, + { + "item": "garnished:crushed_shroomlight" + }, + { + "item": "garnished:cashew_sorbet_scoop" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "garnished:frosted_dessert" + } +} diff --git a/src/main/resources/data/garnished/recipes/haunting/amber_remnant.json b/src/main/resources/data/garnished/recipes/haunting/amber_remnant.json new file mode 100644 index 00000000..09b9035a --- /dev/null +++ b/src/main/resources/data/garnished/recipes/haunting/amber_remnant.json @@ -0,0 +1,13 @@ +{ + "type": "create:haunting", + "ingredients": [ + { + "item": "minecraft:amethyst_shard" + } + ], + "results": [ + { + "item": "garnished:amber_remnant" + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/item_application/chilled_apple.json b/src/main/resources/data/garnished/recipes/item_application/chilled_apple.json new file mode 100644 index 00000000..d4b28871 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/item_application/chilled_apple.json @@ -0,0 +1,16 @@ +{ + "type": "create:item_application", + "ingredients": [ + { + "item": "minecraft:apple" + }, + { + "item": "garnished:frost" + } + ], + "results": [ + { + "item": "garnished:chilled_apple" + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/item_application/polar_hide_scratch_paper.json b/src/main/resources/data/garnished/recipes/item_application/polar_hide_scratch_paper.json new file mode 100644 index 00000000..e2e5b487 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/item_application/polar_hide_scratch_paper.json @@ -0,0 +1,16 @@ +{ + "type": "create:item_application", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "item": "garnished:polar_bear_hide" + } + ], + "results": [ + { + "item": "garnished:polar_hide_scratch_paper" + } + ] +} diff --git a/src/main/resources/data/garnished/recipes/powder_snow_bucket_from_frost.json b/src/main/resources/data/garnished/recipes/powder_snow_bucket_from_frost.json new file mode 100644 index 00000000..f9c07824 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/powder_snow_bucket_from_frost.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "garnished:frost" + }, + { + "item": "garnished:frost" + }, + { + "item": "garnished:frost" + }, + { + "item": "garnished:frost" + }, + { + "item": "minecraft:bucket" + } + ], + "result": { + "item": "minecraft:powder_snow_bucket", + "count": 1 + } +} diff --git a/src/main/resources/data/garnished/recipes/void_stroganoff.json b/src/main/resources/data/garnished/recipes/void_stroganoff.json new file mode 100644 index 00000000..ea0a78f8 --- /dev/null +++ b/src/main/resources/data/garnished/recipes/void_stroganoff.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "garnished:garnish_powder" + }, + { + "item": "garnished:void_dust" + }, + { + "item": "garnished:cooked_polar_bear_meat" + }, + { + "item": "garnished:numbing_parchment" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "garnished:void_stroganoff" + } +} diff --git a/src/main/resources/data/garnished/tags/blocks/fan_processing_catalysts/freezing.json b/src/main/resources/data/garnished/tags/blocks/fan_processing_catalysts/freezing.json new file mode 100644 index 00000000..2d254b4a --- /dev/null +++ b/src/main/resources/data/garnished/tags/blocks/fan_processing_catalysts/freezing.json @@ -0,0 +1,10 @@ +{ + "values": [ + "minecraft:powder_snow", + + { + "id": "create_dd:freezing_sail", + "required": false + } + ] +} diff --git a/src/main/resources/data/garnished/tags/fluids/fan_processing_catalysts/freezing.json b/src/main/resources/data/garnished/tags/fluids/fan_processing_catalysts/freezing.json new file mode 100644 index 00000000..f72d209d --- /dev/null +++ b/src/main/resources/data/garnished/tags/fluids/fan_processing_catalysts/freezing.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/tags/items/coloured_mastic_blocks.json b/src/main/resources/data/garnished/tags/items/coloured_mastic_blocks.json new file mode 100644 index 00000000..1a2e7e94 --- /dev/null +++ b/src/main/resources/data/garnished/tags/items/coloured_mastic_blocks.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "garnished:red_mastic_block", + "garnished:orange_mastic_block", + "garnished:yellow_mastic_block", + "garnished:green_mastic_block", + "garnished:blue_mastic_block", + "garnished:purple_mastic_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/tags/items/dried_kelp.json b/src/main/resources/data/garnished/tags/items/dried_kelp.json new file mode 100644 index 00000000..9cbe640b --- /dev/null +++ b/src/main/resources/data/garnished/tags/items/dried_kelp.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "garnished:dried_dulse_kelp", + "garnished:dried_vermilion_kelp" + ] +} diff --git a/src/main/resources/data/garnished/tags/items/kelp.json b/src/main/resources/data/garnished/tags/items/kelp.json new file mode 100644 index 00000000..99f7bf98 --- /dev/null +++ b/src/main/resources/data/garnished/tags/items/kelp.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "garnished:dulse_kelp", + "garnished:vermilion_kelp" + ] +} diff --git a/src/main/resources/data/garnished/tags/items/kelp_blocks.json b/src/main/resources/data/garnished/tags/items/kelp_blocks.json new file mode 100644 index 00000000..2850c779 --- /dev/null +++ b/src/main/resources/data/garnished/tags/items/kelp_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "garnished:dried_dulse_kelp_block", + "garnished:dried_vermilion_kelp_block" + ] +} diff --git a/src/main/resources/data/garnished/tags/items/mastic_blocks.json b/src/main/resources/data/garnished/tags/items/mastic_blocks.json new file mode 100644 index 00000000..f484432d --- /dev/null +++ b/src/main/resources/data/garnished/tags/items/mastic_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "garnished:mastic_block", + "#garnished:coloured_mastic_blocks" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/garnished/tags/items/sweetened_nuts.json b/src/main/resources/data/garnished/tags/items/sweetened_nuts.json index a29d86d2..e16adf49 100644 --- a/src/main/resources/data/garnished/tags/items/sweetened_nuts.json +++ b/src/main/resources/data/garnished/tags/items/sweetened_nuts.json @@ -8,6 +8,7 @@ "garnished:sweetened_pistachio", "garnished:sweetened_macadamia", "garnished:sweetened_peanut", - "garnished:sweetened_hazelnut" + "garnished:sweetened_hazelnut", + "garnished:sweetened_chestnut" ] } diff --git a/src/main/resources/data/minecraft/tags/items/glazed_terracotta.json b/src/main/resources/data/minecraft/tags/items/glazed_terracotta.json new file mode 100644 index 00000000..26cb2df2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/glazed_terracotta.json @@ -0,0 +1,20 @@ +{ + "values": [ + "minecraft:white_glazed_terracotta", + "minecraft:orange_glazed_terracotta", + "minecraft:magenta_glazed_terracotta", + "minecraft:light_blue_glazed_terracotta", + "minecraft:yellow_glazed_terracotta", + "minecraft:lime_glazed_terracotta", + "minecraft:pink_glazed_terracotta", + "minecraft:gray_glazed_terracotta", + "minecraft:light_gray_glazed_terracotta", + "minecraft:cyan_glazed_terracotta", + "minecraft:purple_glazed_terracotta", + "minecraft:blue_glazed_terracotta", + "minecraft:brown_glazed_terracotta", + "minecraft:green_glazed_terracotta", + "minecraft:red_glazed_terracotta", + "minecraft:black_glazed_terracotta" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/shulker_boxes.json b/src/main/resources/data/minecraft/tags/items/shulker_boxes.json new file mode 100644 index 00000000..525e33e9 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/shulker_boxes.json @@ -0,0 +1,21 @@ +{ + "values": [ + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ] +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 137d2f57..8e69685a 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -20,6 +20,9 @@ ], "client": [ "net.dakotapride.garnished.CreateGarnishedClient" + ], + "jei_mod_plugin": [ + "net.dakotapride.garnished.registry.JEI.GarnishedJEI" ] }, "mixins": [