Skip to content

Commit c27e67a

Browse files
committed
feat: honey bottle cures and heals
1 parent f5ae758 commit c27e67a

1 file changed

Lines changed: 141 additions & 0 deletions

File tree

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: Aniket Joshi <arealronin@gmail.com>
3+
Date: Thu, 6 Oct 2022 14:11:41 +0530
4+
Subject: [PATCH] Honey bottle cures and heals
5+
6+
7+
diff --git a/src/main/java/net/minecraft/world/item/HoneyBottleItem.java b/src/main/java/net/minecraft/world/item/HoneyBottleItem.java
8+
index c8d6b5e60b6c8c612fa8580c63a32c4a8f8b0a7b..4f9ec6b66b0d923a1c2c2e95272c3472da8840de 100644
9+
--- a/src/main/java/net/minecraft/world/item/HoneyBottleItem.java
10+
+++ b/src/main/java/net/minecraft/world/item/HoneyBottleItem.java
11+
@@ -7,10 +7,17 @@ import net.minecraft.sounds.SoundEvents;
12+
import net.minecraft.stats.Stats;
13+
import net.minecraft.world.InteractionHand;
14+
import net.minecraft.world.InteractionResultHolder;
15+
+import net.minecraft.world.effect.MobEffect;
16+
+import net.minecraft.world.effect.MobEffectInstance;
17+
import net.minecraft.world.effect.MobEffects;
18+
import net.minecraft.world.entity.LivingEntity;
19+
import net.minecraft.world.entity.player.Player;
20+
import net.minecraft.world.level.Level;
21+
+import org.bukkit.event.entity.EntityPotionEffectEvent;
22+
+import org.bukkit.event.entity.EntityRegainHealthEvent;
23+
+
24+
+import java.util.List;
25+
+import java.util.Map;
26+
27+
public class HoneyBottleItem extends Item {
28+
private static final int DRINK_DURATION = 40;
29+
@@ -29,6 +36,33 @@ public class HoneyBottleItem extends Item {
30+
31+
if (!world.isClientSide) {
32+
user.removeEffect(MobEffects.POISON, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.FOOD); // Paper
33+
+
34+
+ // Purpur start - honey bottle cures and heals
35+
+ if (world.purpurConfig.honeyBottleCures) {
36+
+ Map<MobEffect, MobEffectInstance> effects = user.activeEffects;
37+
+ if (!effects.isEmpty()) {
38+
+ for (MobEffect effect : effects.keySet()) {
39+
+ if (world.purpurConfig.honeyBottleCurableEffects.contains(effect) &&
40+
+ user.hasEffect(effect))
41+
+ user.removeEffect(effect, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.FOOD);
42+
+ }
43+
+ }
44+
+ }
45+
+
46+
+ if (world.purpurConfig.honeyBottleHeals) {
47+
+ user.heal(world.purpurConfig.honeyBottleRegenAmount, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.EATING);
48+
+ }
49+
+
50+
+ if (world.purpurConfig.honeyBottleAddsPositiveEffects) {
51+
+ List<MobEffect> effects = world.purpurConfig.honeyBottleAddedEffects;
52+
+ if (!effects.isEmpty()) {
53+
+ for (MobEffect effect : effects) {
54+
+ user.addEffect(new MobEffectInstance(effect, world.purpurConfig.honeyBottlePotionEffectsDuration),
55+
+ org.bukkit.event.entity.EntityPotionEffectEvent.Cause.FOOD);
56+
+ }
57+
+ }
58+
+ }
59+
+ // Purpur end
60+
}
61+
62+
if (stack.isEmpty()) {
63+
@@ -70,4 +104,4 @@ public class HoneyBottleItem extends Item {
64+
public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
65+
return ItemUtils.startUsingInstantly(world, user, hand);
66+
}
67+
-}
68+
+}
69+
\ No newline at end of file
70+
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
71+
index a6356d19f0fc664be523f19c2ea1704191a7a73a..f70903ad70a0c215f313f9c5636a92a6c2decaa6 100644
72+
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
73+
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
74+
@@ -4,15 +4,20 @@ import gg.pufferfish.pufferfish.PufferfishConfig;
75+
import net.minecraft.core.Registry;
76+
import net.minecraft.resources.ResourceLocation;
77+
import net.minecraft.util.Mth;
78+
+import net.minecraft.world.effect.MobEffect;
79+
+import net.minecraft.world.effect.MobEffects;
80+
import net.minecraft.world.entity.Entity;
81+
import net.minecraft.world.entity.EntityType;
82+
import net.minecraft.world.item.DyeColor;
83+
import net.minecraft.world.item.Item;
84+
import net.minecraft.world.item.Items;
85+
+import net.minecraft.world.item.alchemy.Potion;
86+
+import net.minecraft.world.item.alchemy.Potions;
87+
import net.minecraft.world.level.Explosion;
88+
import net.minecraft.world.level.block.Block;
89+
import net.minecraft.world.level.block.Blocks;
90+
import net.minecraft.world.level.block.state.properties.Tilt;
91+
+import org.bukkit.potion.PotionEffectType;
92+
import org.purpurmc.purpur.entity.GlowSquidColor;
93+
import org.purpurmc.purpur.tool.Strippable;
94+
import org.purpurmc.purpur.tool.Tillable;
95+
@@ -3131,5 +3136,44 @@ public class PurpurWorldConfig {
96+
cauldronDripstoneWaterFillChance = (float) getDouble("blocks.cauldron.fill-chances.dripstone-water", cauldronDripstoneWaterFillChance);
97+
cauldronDripstoneLavaFillChance = (float) getDouble("blocks.cauldron.fill-chances.dripstone-lava", cauldronDripstoneLavaFillChance);
98+
}
99+
-}
100+
101+
+ public boolean honeyBottleCures = false;
102+
+ public boolean honeyBottleHeals = false;
103+
+ public float honeyBottleRegenAmount = 1.5f;
104+
+ public boolean honeyBottleAddsPositiveEffects = true;
105+
+ public int honeyBottlePotionEffectsDuration = 200;
106+
+ public List<MobEffect> honeyBottleCurableEffects = new ArrayList<>();
107+
+ public List<MobEffect> honeyBottleAddedEffects = new ArrayList<>();
108+
+ private void honeyBottleSettings() {
109+
+ honeyBottleCures = getBoolean("gameplay-mechanics.item.honey-bottle.cures-effects", honeyBottleCures);
110+
+ honeyBottleHeals = getBoolean("gameplay-mechanics.item.honey-bottle.heals", honeyBottleHeals);
111+
+ honeyBottleAddsPositiveEffects = getBoolean("gameplay-mechanics.item.honey-bottle.adds-effects", honeyBottleAddsPositiveEffects);
112+
+ honeyBottleRegenAmount = (float) getDouble("gameplay-mechanics.item.honey-bottle.regen-health-amount", honeyBottleRegenAmount);
113+
+ honeyBottlePotionEffectsDuration = getInt("gameplay-mechanics.item.honey-bottle.potion-effects-duration", honeyBottlePotionEffectsDuration);
114+
+
115+
+ getList("gameplay-mechanics.item.honey-bottle.curable-effects", new ArrayList<String>(){{
116+
+ add("minecraft:slowness");
117+
+ add("minecraft:mining_fatigue");
118+
+ add("minecraft:nausea");
119+
+ add("minecraft:blindness");
120+
+ add("minecraft:poison");
121+
+ add("minecraft:wither");
122+
+ add("minecraft:levitation");
123+
+ add("minecraft:unluck");
124+
+ add("minecraft:bad_omen");
125+
+ }}).forEach(key -> {
126+
+ MobEffect curableEffect = Registry.MOB_EFFECT.get(new ResourceLocation(key.toString()));
127+
+ honeyBottleCurableEffects.add(curableEffect);
128+
+ });
129+
+
130+
+ getList("gameplay-mechanics.item.honey-bottle.added-effects", new ArrayList<String>(){{
131+
+ add("minecraft:strength");
132+
+ add("minecraft:regeneration");
133+
+ add("minecraft:saturation");
134+
+ add("minecraft:glowing");
135+
+ }}).forEach(key -> {
136+
+ MobEffect addedEffect = Registry.MOB_EFFECT.get(new ResourceLocation(key.toString()));
137+
+ honeyBottleAddedEffects.add(addedEffect);
138+
+ });
139+
+ }
140+
+}
141+
\ No newline at end of file

0 commit comments

Comments
 (0)