From d169c29de34025b2bc911fc5f5b0b4a9f8b4be33 Mon Sep 17 00:00:00 2001 From: steev Date: Sun, 15 Sep 2024 22:30:16 +0200 Subject: [PATCH] all drinkable and edible items got effects and mechanics as in concept --- .../brewcraft/item/ModCreativeModeTabs.java | 10 ++- .../slpnetwork/brewcraft/item/ModItems.java | 75 +++++++++++------- .../brewcraft/item/drinks/AppleBeer.java | 55 +++++++++++++ .../brewcraft/item/drinks/AppleJuice.java | 53 +++++++++++++ .../brewcraft/item/drinks/CornBeer.java | 54 +++++++++++++ .../brewcraft/item/drinks/GrapeJuice.java | 53 +++++++++++++ .../brewcraft/item/drinks/HopBeer.java | 55 +++++++++++++ .../brewcraft/item/drinks/PilsBeer.java | 55 +++++++++++++ .../brewcraft/item/drinks/Sake.java | 55 +++++++++++++ .../brewcraft/item/drinks/Water.java | 47 +++++++++++ .../brewcraft/item/drinks/Whine.java | 55 +++++++++++++ .../brewcraft/item/drinks/YeastBeer.java | 55 +++++++++++++ .../slpnetwork/brewcraft/item/food/Grape.java | 20 +++++ .../slpnetwork/brewcraft/item/food/Rice.java | 21 +++++ .../slpnetwork/brewcraft/item/food/Yeast.java | 24 ++++++ .../assets/brewcraft/lang/en_us.json | 6 +- .../textures/item/bottle_of_apple_beer.png | Bin 0 -> 339 bytes .../textures/item/bottle_of_yeast_beer.png | Bin 0 -> 318 bytes .../textures/item/glass_of_apple_beer.png | Bin 0 -> 398 bytes .../textures/item/glass_of_yeast_beer.png | Bin 0 -> 387 bytes tex/bottle_of_apple_beer.psd | Bin 0 -> 26828 bytes ...le_juice.psd => bottle_of_apple_juice.psd} | Bin tex/bottle_of_yeast_beer.psd | Bin 0 -> 20976 bytes tex/glass_of_apple_beer.psd | Bin 0 -> 26441 bytes tex/glass_of_yeast_beer.psd | Bin 0 -> 21044 bytes 25 files changed, 660 insertions(+), 33 deletions(-) create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleBeer.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleJuice.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/CornBeer.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/GrapeJuice.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/HopBeer.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/PilsBeer.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/Sake.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/Water.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/Whine.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/drinks/YeastBeer.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/food/Grape.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/food/Rice.java create mode 100644 src/main/java/de/slpnetwork/brewcraft/item/food/Yeast.java create mode 100644 src/main/resources/assets/brewcraft/textures/item/bottle_of_apple_beer.png create mode 100644 src/main/resources/assets/brewcraft/textures/item/bottle_of_yeast_beer.png create mode 100644 src/main/resources/assets/brewcraft/textures/item/glass_of_apple_beer.png create mode 100644 src/main/resources/assets/brewcraft/textures/item/glass_of_yeast_beer.png create mode 100644 tex/bottle_of_apple_beer.psd rename tex/{apple_juice.psd => bottle_of_apple_juice.psd} (100%) create mode 100644 tex/bottle_of_yeast_beer.psd create mode 100644 tex/glass_of_apple_beer.psd create mode 100644 tex/glass_of_yeast_beer.psd diff --git a/src/main/java/de/slpnetwork/brewcraft/item/ModCreativeModeTabs.java b/src/main/java/de/slpnetwork/brewcraft/item/ModCreativeModeTabs.java index 0dd75ca..c6e6490 100644 --- a/src/main/java/de/slpnetwork/brewcraft/item/ModCreativeModeTabs.java +++ b/src/main/java/de/slpnetwork/brewcraft/item/ModCreativeModeTabs.java @@ -6,6 +6,8 @@ import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; @@ -40,12 +42,16 @@ public class ModCreativeModeTabs { pOutput.accept(ModItems.Pressed_Iron.get()); pOutput.accept(ModItems.Pressure_Body.get()); pOutput.accept(ModItems.Glass.get()); + pOutput.accept(ModBlocks.SAPPHIRE_BLOCK.get()); + pOutput.accept(ModItems.Glass_Of_Apple_Beer.get()); + pOutput.accept(ModItems.Bottle_Of_Apple_Beer.get()); + pOutput.accept(ModItems.Glass_Of_Apple_Juice.get()); + pOutput.accept(ModItems.Bottle_Of_Apple_Juice.get()); pOutput.accept(ModItems.Glass_Of_Whine.get()); pOutput.accept(ModItems.Glass_Of_Corn_Beer.get()); pOutput.accept(ModItems.Glass_Of_Hop_Beer.get()); pOutput.accept(ModItems.Glass_Of_Yeast_Beer.get()); pOutput.accept(ModItems.Glass_Of_Pils_Beer.get()); - pOutput.accept(ModItems.Glass_Of_Apple_Beer.get()); pOutput.accept(ModItems.Glass_Of_Apple_Juice.get()); pOutput.accept(ModItems.Glass_Of_Grape_Juice.get()); pOutput.accept(ModItems.Glass_Of_Water.get()); @@ -55,11 +61,9 @@ public class ModCreativeModeTabs { pOutput.accept(ModItems.Bottle_Of_Hop_Beer.get()); pOutput.accept(ModItems.Bottle_Of_Yeast_Beer.get()); pOutput.accept(ModItems.Bottle_Of_Pils_Beer.get()); - pOutput.accept(ModItems.Bottle_Of_Apple_Beer.get()); pOutput.accept(ModItems.Bottle_Of_Apple_Juice.get()); pOutput.accept(ModItems.Bottle_Of_Grape_Juice.get()); pOutput.accept(ModItems.Bottle_Of_Sake.get()); - pOutput.accept(ModBlocks.SAPPHIRE_BLOCK.get()); }) .build()); diff --git a/src/main/java/de/slpnetwork/brewcraft/item/ModItems.java b/src/main/java/de/slpnetwork/brewcraft/item/ModItems.java index bd652a7..de4210a 100644 --- a/src/main/java/de/slpnetwork/brewcraft/item/ModItems.java +++ b/src/main/java/de/slpnetwork/brewcraft/item/ModItems.java @@ -1,7 +1,14 @@ package de.slpnetwork.brewcraft.item; import de.slpnetwork.brewcraft.Brewcraft; +import de.slpnetwork.brewcraft.item.food.Grape; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.alchemy.Potion; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; @@ -13,41 +20,51 @@ import net.minecraftforge.registries.RegistryObject; public class ModItems { public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Brewcraft.MODID); - public static final RegistryObject Saphire = ITEMS.register("sapphire", () -> new Item(new Item.Properties())); - public static final RegistryObject Yeast = ITEMS.register("yeast", () -> new Item(new Item.Properties())); - public static final RegistryObject Cider_Yeast = ITEMS.register("cider-yeast", () -> new Item(new Item.Properties())); - public static final RegistryObject Hop = ITEMS.register("hop", () -> new Item(new Item.Properties())); - public static final RegistryObject Rice = ITEMS.register("rice", () -> new Item(new Item.Properties())); - public static final RegistryObject Grape = ITEMS.register("grape", () -> new Item(new Item.Properties())); - public static final RegistryObject Barley = ITEMS.register("barley", () -> new Item(new Item.Properties())); - public static final RegistryObject Malt = ITEMS.register("malt", () -> new Item(new Item.Properties())); - public static final RegistryObject Barley_Malt = ITEMS.register("barley_malt", () -> new Item(new Item.Properties())); + // Items + public static final RegistryObject Glass = ITEMS.register("glass", () -> new Item(new Item.Properties())); public static final RegistryObject Heater_Body = ITEMS.register("heater_body", () -> new Item(new Item.Properties())); public static final RegistryObject Heater_Element = ITEMS.register("heater_element", () -> new Item(new Item.Properties())); public static final RegistryObject Mashine_Body = ITEMS.register("mashine_body", () -> new Item(new Item.Properties())); public static final RegistryObject Milling_Stone = ITEMS.register("milling_stone", () -> new Item(new Item.Properties())); public static final RegistryObject Pressed_Iron = ITEMS.register("pressed_iron", () -> new Item(new Item.Properties())); public static final RegistryObject Pressure_Body = ITEMS.register("pressure_body", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Corn_Beer = ITEMS.register("bottle_of_corn_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Hop_Beer = ITEMS.register("bottle_of_hop_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Pils_Beer = ITEMS.register("bottle_of_pils_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Yeast_Beer = ITEMS.register("bottle_of_yeast_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Apple_Beer = ITEMS.register("bottle_of_apple_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Whine = ITEMS.register("bottle_of_whine", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Grape_Juice = ITEMS.register("bottle_of_grape_juice", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Apple_Juice = ITEMS.register("bottle_of_apple_juice", () -> new Item(new Item.Properties())); - public static final RegistryObject Bottle_Of_Sake = ITEMS.register("bottle_of_sake", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass = ITEMS.register("glass", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Corn_Beer = ITEMS.register("glass_of_corn_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Hop_Beer = ITEMS.register("glass_of_hop_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Yeast_Beer = ITEMS.register("glass_of_yeast_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Apple_Beer = ITEMS.register("glass_of_apple_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Pils_Beer = ITEMS.register("glass_of_pils_beer", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Whine = ITEMS.register("glass_of_whine", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Grape_Juice = ITEMS.register("glass_of_grape_juice", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Apple_Juice = ITEMS.register("glass_of_apple_juice", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Water = ITEMS.register("glass_of_water", () -> new Item(new Item.Properties())); - public static final RegistryObject Glass_Of_Sake = ITEMS.register("glass_of_sake", () -> new Item(new Item.Properties())); + + // blocks + public static final RegistryObject Saphire = ITEMS.register("sapphire", () -> new Item(new Item.Properties())); + + // ingredients + public static final RegistryObject Cider_Yeast = ITEMS.register("cider-yeast", () -> new Item(new Item.Properties())); + public static final RegistryObject Hop = ITEMS.register("hop", () -> new Item(new Item.Properties())); + public static final RegistryObject Barley = ITEMS.register("barley", () -> new Item(new Item.Properties())); + public static final RegistryObject Malt = ITEMS.register("malt", () -> new Item(new Item.Properties())); + public static final RegistryObject Barley_Malt = ITEMS.register("barley_malt", () -> new Item(new Item.Properties())); + + // edible ingredients + public static final RegistryObject Yeast = ITEMS.register("yeast",de.slpnetwork.brewcraft.item.food.Yeast::GetItem); + public static final RegistryObject Rice = ITEMS.register("rice", de.slpnetwork.brewcraft.item.food.Rice::GetItem); + public static final RegistryObject Grape = ITEMS.register("grape", de.slpnetwork.brewcraft.item.food.Grape::GetItem); + + // drinks + public static final RegistryObject Bottle_Of_Apple_Beer = ITEMS.register("bottle_of_apple_beer",() -> new de.slpnetwork.brewcraft.item.drinks.AppleBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Apple_Beer = ITEMS.register("glass_of_apple_beer",() -> new de.slpnetwork.brewcraft.item.drinks.AppleBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Apple_Juice = ITEMS.register("bottle_of_apple_juice",() -> new de.slpnetwork.brewcraft.item.drinks.AppleJuice(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Apple_Juice = ITEMS.register("glass_of_apple_juice",() -> new de.slpnetwork.brewcraft.item.drinks.AppleJuice(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Grape_Juice = ITEMS.register("bottle_of_grape_juice",() -> new de.slpnetwork.brewcraft.item.drinks.GrapeJuice(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Grape_Juice = ITEMS.register("glass_of_grape_juice",() -> new de.slpnetwork.brewcraft.item.drinks.GrapeJuice(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Corn_Beer = ITEMS.register("bottle_of_corn_beer",() -> new de.slpnetwork.brewcraft.item.drinks.CornBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Corn_Beer = ITEMS.register("glass_of_corn_beer",() -> new de.slpnetwork.brewcraft.item.drinks.CornBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Yeast_Beer = ITEMS.register("bottle_of_yeast_beer",() -> new de.slpnetwork.brewcraft.item.drinks.YeastBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Yeast_Beer = ITEMS.register("glass_of_yeast_beer",() -> new de.slpnetwork.brewcraft.item.drinks.YeastBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Hop_Beer = ITEMS.register("bottle_of_hop_beer",() -> new de.slpnetwork.brewcraft.item.drinks.HopBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Hop_Beer = ITEMS.register("glass_of_hop_beer",() -> new de.slpnetwork.brewcraft.item.drinks.HopBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Pils_Beer = ITEMS.register("bottle_of_pils_beer",() -> new de.slpnetwork.brewcraft.item.drinks.PilsBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Pils_Beer = ITEMS.register("glass_of_pils_beer",() -> new de.slpnetwork.brewcraft.item.drinks.PilsBeer(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Sake = ITEMS.register("bottle_of_sake",() -> new de.slpnetwork.brewcraft.item.drinks.Sake(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Sake = ITEMS.register("glass_of_sake",() -> new de.slpnetwork.brewcraft.item.drinks.Sake(new Item.Properties().stacksTo(1))); + public static final RegistryObject Bottle_Of_Whine = ITEMS.register("bottle_of_whine",() -> new de.slpnetwork.brewcraft.item.drinks.Whine(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Whine = ITEMS.register("glass_of_whine",() -> new de.slpnetwork.brewcraft.item.drinks.Whine(new Item.Properties().stacksTo(1))); + public static final RegistryObject Glass_Of_Water = ITEMS.register("glass_of_water",() -> new de.slpnetwork.brewcraft.item.drinks.Water(new Item.Properties().stacksTo(1))); + /*** * registers the deferredregister * @param eventBus the mods eventbus diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleBeer.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleBeer.java new file mode 100644 index 0000000..00ed4a7 --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleBeer.java @@ -0,0 +1,55 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class AppleBeer extends Item { + int secondInTicks = 20; + + public AppleBeer(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, secondInTicks * 10, 3)); + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 25, 2)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, secondInTicks * 10, 3)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleJuice.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleJuice.java new file mode 100644 index 0000000..cfb7963 --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/AppleJuice.java @@ -0,0 +1,53 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class AppleJuice extends Item { + int secondInTicks = 20; + + public AppleJuice(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 2, 2)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/CornBeer.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/CornBeer.java new file mode 100644 index 0000000..3265b76 --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/CornBeer.java @@ -0,0 +1,54 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class CornBeer extends Item { + int secondInTicks = 20; + + public CornBeer(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, secondInTicks * 10, 3)); + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 25, 2)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, secondInTicks * 10, 3)); } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/GrapeJuice.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/GrapeJuice.java new file mode 100644 index 0000000..ac4fcbe --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/GrapeJuice.java @@ -0,0 +1,53 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class GrapeJuice extends Item { + int secondInTicks = 20; + + public GrapeJuice(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 2, 2)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/HopBeer.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/HopBeer.java new file mode 100644 index 0000000..c064a1b --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/HopBeer.java @@ -0,0 +1,55 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class HopBeer extends Item { + int secondInTicks = 20; + + public HopBeer(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, secondInTicks * 10, 3)); + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 25, 2)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, secondInTicks * 10, 3)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/PilsBeer.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/PilsBeer.java new file mode 100644 index 0000000..4836807 --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/PilsBeer.java @@ -0,0 +1,55 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class PilsBeer extends Item { + int secondInTicks = 20; + + public PilsBeer(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, secondInTicks * 10, 3)); + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 25, 2)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, secondInTicks * 10, 3)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/Sake.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/Sake.java new file mode 100644 index 0000000..bdcad4e --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/Sake.java @@ -0,0 +1,55 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class Sake extends Item { + int secondInTicks = 20; + + public Sake(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, secondInTicks * 10, 3)); + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 25, 2)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, secondInTicks * 10, 3)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/Water.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/Water.java new file mode 100644 index 0000000..f8983c9 --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/Water.java @@ -0,0 +1,47 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class Water extends Item { + int secondInTicks = 20; + + public Water(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/Whine.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/Whine.java new file mode 100644 index 0000000..1773e5e --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/Whine.java @@ -0,0 +1,55 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class Whine extends Item { + int secondInTicks = 20; + + public Whine(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, secondInTicks * 10, 3)); + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 25, 2)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, secondInTicks * 10, 3)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/drinks/YeastBeer.java b/src/main/java/de/slpnetwork/brewcraft/item/drinks/YeastBeer.java new file mode 100644 index 0000000..60dabf7 --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/drinks/YeastBeer.java @@ -0,0 +1,55 @@ +package de.slpnetwork.brewcraft.item.drinks; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.UseAnim; +import net.minecraft.world.level.Level; + + +public class YeastBeer extends Item { + int secondInTicks = 20; + + public YeastBeer(Item.Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity entity) { + if (!world.isClientSide()) { + if (entity instanceof Player player) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, secondInTicks * 10, 3)); + player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, secondInTicks * 25, 2)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, secondInTicks * 10, 3)); + } + } + + if (entity instanceof Player player && !player.getAbilities().instabuild) { + stack.shrink(1); // Verringert den Item-Stack nach dem Trinken, außer im Kreativmodus + } + + return stack; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; // Zeigt das Trinken-Animation + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; // Die Zeit, die zum Trinken benötigt wird (in Ticks) + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + player.startUsingItem(hand); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, player.getItemInHand(hand)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/food/Grape.java b/src/main/java/de/slpnetwork/brewcraft/item/food/Grape.java new file mode 100644 index 0000000..346503c --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/food/Grape.java @@ -0,0 +1,20 @@ +package de.slpnetwork.brewcraft.item.food; + +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; + +public class Grape { + public static Item GetItem() { + return new Item( + new Item.Properties(). + stacksTo(64). + food( + new FoodProperties.Builder(). + nutrition(2). + saturationMod(0.5f). + build() + ). + rarity(Rarity.COMMON)); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/food/Rice.java b/src/main/java/de/slpnetwork/brewcraft/item/food/Rice.java new file mode 100644 index 0000000..8ad7a0d --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/food/Rice.java @@ -0,0 +1,21 @@ +package de.slpnetwork.brewcraft.item.food; + +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; + +public class Rice { + public static Item GetItem() { + return new Item( + new Item.Properties(). + stacksTo(64). + food( + new FoodProperties.Builder(). + nutrition(1). + saturationMod(0.5f). + build() + ). + rarity(Rarity.COMMON) + ); + } +} diff --git a/src/main/java/de/slpnetwork/brewcraft/item/food/Yeast.java b/src/main/java/de/slpnetwork/brewcraft/item/food/Yeast.java new file mode 100644 index 0000000..a465a8b --- /dev/null +++ b/src/main/java/de/slpnetwork/brewcraft/item/food/Yeast.java @@ -0,0 +1,24 @@ +package de.slpnetwork.brewcraft.item.food; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; + +public class Yeast { + public static Item GetItem() { + return new Item( + new Item.Properties(). + stacksTo(64). + food( + new FoodProperties.Builder(). + nutrition(1). + saturationMod(0.5f). + effect(() -> new MobEffectInstance(MobEffects.POISON, 600, 3, false, true), 0.8f). + build() + ). + rarity(Rarity.COMMON) + ); + } +} diff --git a/src/main/resources/assets/brewcraft/lang/en_us.json b/src/main/resources/assets/brewcraft/lang/en_us.json index 5fbfe88..f2416ff 100644 --- a/src/main/resources/assets/brewcraft/lang/en_us.json +++ b/src/main/resources/assets/brewcraft/lang/en_us.json @@ -15,21 +15,25 @@ "item.brewcraft.pressed_iron": "Pressed Iron", "item.brewcraft.pressure_body": "Pressure Body", "item.brewcraft.bottle_of_corn_beer": "Bottle of Corn Beer", + "item.brewcraft.bottle_of_hop_beer": "Bottle of Hop Beer", "item.brewcraft.bottle_of_whine": "Bottle of Whine", "item.brewcraft.bottle_of_apple_juice": "Bottle of Apple Juice", + "item.brewcraft.bottle_of_apple_beer": "Bottle of Apple Beer", "item.brewcraft.bottle_of_grape_juice": "Bottle of Grape Juice", "item.brewcraft.bottle_of_sake": "Bottle of Sake", "item.brewcraft.bottle_of_yeast_beer": "Bottle of Yeast Beer", "item.brewcraft.bottle_of_pils_beer": "Bottle of Pils Beer", "item.brewcraft.glass_of_corn_beer": "Glass of Corn Beer", + "item.brewcraft.glass_of_hop_beer": "Glass of Hop Beer", "item.brewcraft.glass_of_whine": "Glass of Whine", "item.brewcraft.glass_of_apple_juice": "Glass of Apple Juice", + "item.brewcraft.glass_of_apple_beer": "Glass of Apple Beer", "item.brewcraft.glass_of_grape_juice": "Glass of Grape Juice", "item.brewcraft.glass_of_water": "Glass of Water", "item.brewcraft.glass_of_sake": "Glass of Sake", "item.brewcraft.glass_of_yeast_beer": "Glass of Yeast Beer", "item.brewcraft.glass_of_pils_beer": "Glass of Pils Beer", - "item.brewcraft.glass": "Glass", + "items.brewcraft.glass": "Glass", "block.brewcraft.sapphire_block": "Block of Sapphire", diff --git a/src/main/resources/assets/brewcraft/textures/item/bottle_of_apple_beer.png b/src/main/resources/assets/brewcraft/textures/item/bottle_of_apple_beer.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba1208327458b6a57e191aa71c5a2f0e2e18ecf GIT binary patch literal 339 zcmV-Z0j&OsP)$Gg+I3c(0^QNmb=9e!XM(`t2VBCl5aZ^N)vE)nK>)6n!Au{w$YaVEy-*fm=wC;ro}540p^= z5NE)u1J~fTJ$?5d?EKF^AnE7Rw|^K0U`>f2f4batfouHkd6I#1yE(&2?cEHE3++(! l;7rQcLL6N)<$!^K0RUt@e;UZCB2@qY002ovPDHLkV1gp0nO6V+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/brewcraft/textures/item/bottle_of_yeast_beer.png b/src/main/resources/assets/brewcraft/textures/item/bottle_of_yeast_beer.png new file mode 100644 index 0000000000000000000000000000000000000000..f164f908f2bd7cc08ef92db07290c4ab268db7df GIT binary patch literal 318 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 literal 0 HcmV?d00001 diff --git a/tex/apple_juice.psd b/tex/bottle_of_apple_juice.psd similarity index 100% rename from tex/apple_juice.psd rename to tex/bottle_of_apple_juice.psd diff --git a/tex/bottle_of_yeast_beer.psd b/tex/bottle_of_yeast_beer.psd new file mode 100644 index 0000000000000000000000000000000000000000..4d3e0ad7efebe69df18a11d485e18bee5e21d387 GIT binary patch literal 20976 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 literal 0 HcmV?d00001 diff --git a/tex/glass_of_apple_beer.psd b/tex/glass_of_apple_beer.psd new file mode 100644 index 0000000000000000000000000000000000000000..797bc7821e5bb1d929ab3967fa9e315e1a17e554 GIT binary patch literal 26441 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 S9-mbokj8E7p`27#%x-|L# literal 0 HcmV?d00001 diff --git a/tex/glass_of_yeast_beer.psd b/tex/glass_of_yeast_beer.psd new file mode 100644 index 0000000000000000000000000000000000000000..0916cc94e417c69354340cb2d58cd8a008b00184 GIT binary patch literal 21044 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 DEn_