Skip to content

Commit

Permalink
Update coffee bottles and Caffeine effect
Browse files Browse the repository at this point in the history
  • Loading branch information
Chikorita-Lover committed Oct 8, 2024
1 parent 875339c commit ef10a4b
Show file tree
Hide file tree
Showing 22 changed files with 130 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ public void run() {
String recipeBookGroup = mappingResolver.mapClassName("intermediary", "net.minecraft.class_314");
String itemStack = "[L" + mappingResolver.mapClassName("intermediary", "net.minecraft.class_1799") + ';';
ClassTinkerers.enumBuilder(recipeBookGroup, itemStack).addEnum("CAFFEINATED_SMOKER_MISC", () -> new Object[]{new ItemStack[]{new ItemStack(Items.LAVA_BUCKET), new ItemStack(CaffeinatedItems.COFFEE_BERRIES)}}).build();
ClassTinkerers.enumBuilder(recipeBookGroup, itemStack).addEnum("CAFFEINATED_COFFEE_BREWING", () -> new Object[]{new ItemStack[]{new ItemStack(CaffeinatedItems.BLACK_COFFEE_BOTTLE)}}).build();
ClassTinkerers.enumBuilder(recipeBookGroup, itemStack).addEnum("CAFFEINATED_COFFEE_BREWING", () -> new Object[]{new ItemStack[]{new ItemStack(CaffeinatedItems.COFFEE_BOTTLE)}}).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,10 @@
import net.minecraft.advancement.AdvancementFrame;
import net.minecraft.advancement.AdvancementRewards;
import net.minecraft.advancement.criterion.InventoryChangedCriterion;
import net.minecraft.advancement.criterion.ItemCriterion;
import net.minecraft.item.Item;
import net.minecraft.predicate.BlockPredicate;
import net.minecraft.predicate.entity.LocationPredicate;
import net.minecraft.predicate.item.ItemPredicate;
import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.registry.entry.RegistryEntryList;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;

Expand All @@ -42,8 +37,8 @@ private static Advancement.Builder requireAllCoffeeBottlesBrewed(Advancement.Bui
@Override
public void generateAdvancement(RegistryWrapper.WrapperLookup registryLookup, Consumer<AdvancementEntry> consumer) {
AdvancementEntry husbandryRoot = new AdvancementEntry(Identifier.ofVanilla("husbandry/root"), null);
AdvancementEntry brewCoffee = Advancement.Builder.create().parent(husbandryRoot).display(CaffeinatedItems.BLACK_COFFEE_BOTTLE, Text.translatable("advancements.husbandry.brew_coffee.title"), Text.translatable("advancements.husbandry.brew_coffee.description"), null, AdvancementFrame.TASK, true, true, false).criterion("brew_coffee", BrewCoffeeCriterion.Conditions.create(ItemPredicate.Builder.create().tag(CaffeinatedItemTags.BLACK_COFFEE_BOTTLES))).build(consumer, Caffeinated.NAMESPACE + ":husbandry/brew_coffee");
requireAllCoffeeBottlesBrewed(Advancement.Builder.create().parent(brewCoffee).display(CaffeinatedItems.LATTE_COFFEE_BOTTLE, Text.translatable("advancements.husbandry.brew_all_coffee.title"), Text.translatable("advancements.husbandry.brew_all_coffee.description"), null, AdvancementFrame.CHALLENGE, true, true, false), registryLookup, CaffeinatedItems.BLACK_COFFEE_BOTTLE, CaffeinatedItems.LATTE_COFFEE_BOTTLE, CaffeinatedItems.CAFE_MIEL_COFFEE_BOTTLE).rewards(AdvancementRewards.Builder.experience(100)).build(consumer, Caffeinated.NAMESPACE + ":husbandry/brew_all_coffee");
AdvancementEntry brewCoffee = Advancement.Builder.create().parent(husbandryRoot).display(CaffeinatedItems.COFFEE_BOTTLE, Text.translatable("advancements.husbandry.brew_coffee.title"), Text.translatable("advancements.husbandry.brew_coffee.description"), null, AdvancementFrame.TASK, true, true, false).criterion("brew_coffee", BrewCoffeeCriterion.Conditions.create(ItemPredicate.Builder.create().tag(CaffeinatedItemTags.BLACK_COFFEE_BOTTLES))).build(consumer, Caffeinated.NAMESPACE + ":husbandry/brew_coffee");
requireAllCoffeeBottlesBrewed(Advancement.Builder.create().parent(brewCoffee).display(CaffeinatedItems.LATTE_COFFEE_BOTTLE, Text.translatable("advancements.husbandry.brew_all_coffee.title"), Text.translatable("advancements.husbandry.brew_all_coffee.description"), null, AdvancementFrame.CHALLENGE, true, true, false), registryLookup, CaffeinatedItems.COFFEE_BOTTLE, CaffeinatedItems.LATTE_COFFEE_BOTTLE, CaffeinatedItems.CAFE_MIEL_COFFEE_BOTTLE).rewards(AdvancementRewards.Builder.experience(100)).build(consumer, Caffeinated.NAMESPACE + ":husbandry/brew_all_coffee");
Advancement.Builder.create().parent(brewCoffee).display(CaffeinatedBlocks.TIRAMISU, Text.translatable("advancements.husbandry.bake_tiramisu.title"), Text.translatable("advancements.husbandry.bake_tiramisu.description"), null, AdvancementFrame.TASK, true, true, false).criterion("bake_tiramisu", InventoryChangedCriterion.Conditions.items(CaffeinatedBlocks.TIRAMISU)).build(consumer, Caffeinated.NAMESPACE + ":husbandry/bake_tiramisu");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public void generateBlockStateModels(BlockStateModelGenerator generator) {

@Override
public void generateItemModels(ItemModelGenerator generator) {
generator.register(CaffeinatedItems.BLACK_COFFEE_BOTTLE, Models.GENERATED);
generator.register(CaffeinatedItems.COFFEE_BOTTLE, Models.GENERATED);
generator.register(CaffeinatedItems.LATTE_COFFEE_BOTTLE, Models.GENERATED);
generator.register(CaffeinatedItems.CAFE_MIEL_COFFEE_BOTTLE, Models.GENERATED);
generator.register(CaffeinatedItems.TIRAMISU_SLICE, Models.GENERATED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void generate(RecipeExporter exporter) {
ShapelessRecipeJsonBuilder.create(RecipeCategory.FOOD, CaffeinatedBlocks.TIRAMISU).input(CaffeinatedItemTags.BLACK_COFFEE_BOTTLES).input(Items.WHEAT).input(Items.SUGAR).input(ConventionalItemTags.MILK_BUCKETS).input(Items.EGG).group(getItemPath(CaffeinatedBlocks.TIRAMISU)).criterion("has_black_coffee_bottle", conditionsFromTag(CaffeinatedItemTags.BLACK_COFFEE_BOTTLES)).offerTo(exporter);
ShapedRecipeJsonBuilder.create(RecipeCategory.FOOD, CaffeinatedBlocks.TIRAMISU).input('#', CaffeinatedItems.TIRAMISU_SLICE).pattern("##").pattern("##").group(getItemPath(CaffeinatedBlocks.TIRAMISU)).criterion(hasItem(CaffeinatedItems.TIRAMISU_SLICE), conditionsFromItem(CaffeinatedItems.TIRAMISU_SLICE)).offerTo(farmersDelightExporter, Caffeinated.of("tiramisu_from_slices"));

CoffeeBrewingRecipeJsonBuilder.create(Ingredient.ofItems(Items.POTION), Ingredient.ofItems(CaffeinatedItems.GROUND_COFFEE), RecipeCategory.FOOD, CaffeinatedItems.BLACK_COFFEE_BOTTLE, 1.0F, 600).criterion(hasItem(CaffeinatedItems.GROUND_COFFEE), conditionsFromItem(CaffeinatedItems.GROUND_COFFEE)).offerTo(exporter);
CoffeeBrewingRecipeJsonBuilder.create(Ingredient.ofItems(Items.POTION), Ingredient.ofItems(CaffeinatedItems.GROUND_COFFEE), RecipeCategory.FOOD, CaffeinatedItems.COFFEE_BOTTLE, 1.0F, 600).criterion(hasItem(CaffeinatedItems.GROUND_COFFEE), conditionsFromItem(CaffeinatedItems.GROUND_COFFEE)).offerTo(exporter);
CoffeeBrewingRecipeJsonBuilder.create(Ingredient.fromTag(CaffeinatedItemTags.BLACK_COFFEE_BOTTLES), Ingredient.fromTag(ConventionalItemTags.MILK_BUCKETS), RecipeCategory.FOOD, CaffeinatedItems.LATTE_COFFEE_BOTTLE, 1.0F, 600).criterion(hasItem(Items.MILK_BUCKET), conditionsFromTag(ConventionalItemTags.MILK_BUCKETS)).offerTo(exporter);
CoffeeBrewingRecipeJsonBuilder.create(Ingredient.fromTag(CaffeinatedItemTags.BLACK_COFFEE_BOTTLES), Ingredient.ofItems(Items.HONEY_BOTTLE), RecipeCategory.FOOD, CaffeinatedItems.CAFE_MIEL_COFFEE_BOTTLE, 1.0F, 600).criterion(hasItem(Items.HONEY_BOTTLE), conditionsFromItem(Items.HONEY_BOTTLE)).offerTo(exporter);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package net.chikorita_lover.caffeinated.item;

import net.chikorita_lover.caffeinated.registry.CaffeinatedStatusEffects;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

import java.util.ArrayList;

public class CafeMielCoffeeBottleItem extends CoffeeBottleItem {
public CafeMielCoffeeBottleItem(Settings settings) {
super(settings);
public class CafeMielBottleItem extends CoffeeBottleItem {
public CafeMielBottleItem(Settings settings) {
super(settings, false);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@

import java.util.ArrayList;

public class LatteCoffeeBottleItem extends CoffeeBottleItem {
public LatteCoffeeBottleItem(Settings settings) {
super(settings);
public class CaffeLatteBottleItem extends CoffeeBottleItem {
public CaffeLatteBottleItem(Settings settings) {
super(settings, true);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package net.chikorita_lover.caffeinated.item;

import net.chikorita_lover.caffeinated.Caffeinated;
import com.google.common.collect.Lists;
import com.mojang.datafixers.util.Pair;
import net.chikorita_lover.caffeinated.registry.CaffeinatedSoundEvents;
import net.minecraft.advancement.criterion.Criteria;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.FoodComponent;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffectUtil;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
Expand All @@ -13,21 +19,30 @@
import net.minecraft.item.Items;
import net.minecraft.item.tooltip.TooltipType;
import net.minecraft.registry.Registries;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.sound.SoundEvent;
import net.minecraft.stat.Stats;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.*;
import net.minecraft.world.World;

import java.util.ArrayList;
import java.util.List;

public class CoffeeBottleItem extends Item {
private static final int MAX_USE_TIME = 40;
private static final String TRANSLATION_KEY = Util.createTranslationKey("item", Caffeinated.of("coffee_bottle"));
private final boolean tooltipDesc;

public CoffeeBottleItem(Item.Settings settings) {
public CoffeeBottleItem(Item.Settings settings, boolean tooltipDesc) {
super(settings);
this.tooltipDesc = tooltipDesc;
}

public static float getEffectMultiplier(StatusEffectInstance effect) {
int level = effect.getAmplifier() + 1;
return 1.0F - level * 0.2F;
}

@Override
Expand All @@ -37,10 +52,9 @@ public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) {
Criteria.CONSUME_ITEM.trigger(serverPlayer, stack);
serverPlayer.incrementStat(Stats.USED.getOrCreateStat(this));
}
if (!world.isClient) {
if (!world.isClient()) {
user.removeStatusEffect(StatusEffects.SLOWNESS);
}

if (stack.isEmpty()) {
return new ItemStack(Items.GLASS_BOTTLE);
}
Expand Down Expand Up @@ -81,20 +95,26 @@ public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand han
@Override
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
super.appendTooltip(stack, context, tooltip, type);
tooltip.add(Text.translatable(Util.createTranslationKey("item", Registries.ITEM.getId(this)).concat(".desc")).formatted(Formatting.GRAY));
}

public static float getEffectChance(StatusEffectInstance effect) {
return getEffectChance(effect.getAmplifier());
}

public static float getEffectChance(int i) {
return (i + 1) * 0.2F;
}

@Override
public String getTranslationKey() {
return TRANSLATION_KEY;
if (this.tooltipDesc) {
// tooltip.add(Text.translatable(Util.createTranslationKey("item", Registries.ITEM.getId(this)).concat(".description")).formatted(Formatting.GRAY));
}
if (!stack.contains(DataComponentTypes.FOOD)) {
return;
}
for (FoodComponent.StatusEffectEntry entry : stack.get(DataComponentTypes.FOOD).effects()) {
if (entry.probability() < 1.0F) {
continue;
}
StatusEffectInstance effect = entry.effect();
MutableText text = Text.translatable(effect.getTranslationKey());
if (effect.getAmplifier() > 0) {
text = Text.translatable("potion.withAmplifier", text, Text.translatable("potion.potency." + effect.getAmplifier()));
}
if (!effect.isDurationBelow(20)) {
text = Text.translatable("potion.withDuration", text, StatusEffectUtil.getDurationText(effect, 1.0F, context.getUpdateTickRate()));
}
tooltip.add(text.formatted(effect.getEffectType().value().getCategory().getFormatting()));
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.chikorita_lover.caffeinated.mixin;

import com.llamalad7.mixinextras.sugar.Local;
import net.chikorita_lover.caffeinated.item.CoffeeBottleItem;
import net.chikorita_lover.caffeinated.registry.CaffeinatedStatusEffects;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.player.HungerManager;
import net.minecraft.entity.player.PlayerEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;

@Mixin(HungerManager.class)
public class HungerManagerMixin {
@ModifyArg(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/HungerManager;addExhaustion(F)V"))
private float modifyExhaustion(float exhaustion, @Local(argsOnly = true) PlayerEntity player) {
if (player.hasStatusEffect(CaffeinatedStatusEffects.CAFFEINE)) {
StatusEffectInstance effect = player.getStatusEffect(CaffeinatedStatusEffects.CAFFEINE);
exhaustion *= CoffeeBottleItem.getEffectMultiplier(effect);
}
return exhaustion;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package net.chikorita_lover.caffeinated.mixin;

import com.llamalad7.mixinextras.sugar.Local;
import net.chikorita_lover.caffeinated.registry.CaffeinatedStatusEffects;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;

@Mixin(InGameHud.class)
public class InGameHudMixin {
@Shadow private int ticks;

@ModifyVariable(method = "renderFood", at = @At("STORE"), ordinal = 4)
private int offsetCaffeineHunger(int k, @Local(argsOnly = true) PlayerEntity player, @Local(ordinal = 3) int j) {
if (player.hasStatusEffect(CaffeinatedStatusEffects.CAFFEINE) && j == this.ticks % MathHelper.ceil(50.0F)) {
k -= 2;
}
return k;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,20 @@
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.ModifyVariable;

@Mixin(PlayerEntity.class)
public abstract class PlayerEntityMixin extends LivingEntity {
protected PlayerEntityMixin(EntityType<? extends LivingEntity> entityType, World world) {
super(entityType, world);
}

@Inject(method = "addExhaustion", at = @At(value = "HEAD"), cancellable = true)
private void tryCancelExhaustion(float exhaustion, CallbackInfo ci) {
@ModifyVariable(method = "addExhaustion", at = @At(value = "HEAD"), ordinal = 0, argsOnly = true)
private float modifyExhaustion(float exhaustion) {
if (this.hasStatusEffect(CaffeinatedStatusEffects.CAFFEINE)) {
StatusEffectInstance effect = this.getStatusEffect(CaffeinatedStatusEffects.CAFFEINE);
if (this.getRandom().nextFloat() < CoffeeBottleItem.getEffectChance(effect)) {
ci.cancel();
}
exhaustion *= CoffeeBottleItem.getEffectMultiplier(effect);
}
return exhaustion;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

public class CaffeinatedFoodComponents {
public static final FoodComponent COFFEE_BERRIES = new FoodComponent.Builder().nutrition(2).saturationModifier(0.1F).build();
public static final FoodComponent BLACK_COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 3600, 1), 1.0F).build();
public static final FoodComponent LATTE_COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(3).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 2700, 0), 1.0F).build();
public static final FoodComponent CAFE_MIEL_COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(3).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 2700, 0), 1.0F).statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 440, 0), 1.0F).build();
public static final FoodComponent COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 3600, 1), 1.0F).build();
public static final FoodComponent LATTE_COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 3200, 0), 1.0F).build();
public static final FoodComponent CAFE_MIEL_COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 1800, 0), 1.0F).statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 240, 0), 1.0F).build();
public static final FoodComponent TIRAMISU_SLICE = (new FoodComponent.Builder()).nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 600, 1), 1.0F).snack().build();
}
Loading

0 comments on commit ef10a4b

Please sign in to comment.