Skip to content

Commit 6fc733e

Browse files
committed
Merge remote-tracking branch 'origin/1.20.1-aria-for-painters' into 1.20.1-aria-for-painters
2 parents 4d7edb1 + b33c729 commit 6fc733e

22 files changed

Lines changed: 242 additions & 66 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package de.dafuqs.spectrum.items.food;
2+
3+
import net.minecraft.client.item.TooltipContext;
4+
import net.minecraft.item.FoodComponent;
5+
import net.minecraft.item.ItemStack;
6+
import net.minecraft.text.Text;
7+
import net.minecraft.util.Formatting;
8+
import net.minecraft.world.World;
9+
10+
import java.util.List;
11+
12+
public class SlushslideItem extends DrinkItem {
13+
14+
public SlushslideItem(Settings settings) {
15+
super(settings);
16+
}
17+
18+
@Override
19+
public void appendTooltip(ItemStack itemStack, World world, List<Text> tooltip, TooltipContext tooltipContext) {
20+
tooltip.add(Text.translatable("item.spectrum.slushslide.tooltip").formatted(Formatting.GRAY));
21+
super.appendTooltip(itemStack, world, tooltip, tooltipContext);
22+
}
23+
24+
}

src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public static boolean testEffectFor(LivingEntity entity, StatusEffect effect) {
4848
if (effect.isBeneficial())
4949
return false;
5050

51-
if (SpectrumStatusEffectTags.isIn(SpectrumStatusEffectTags.SOPORIFIC, effect))
51+
if (SpectrumStatusEffectTags.bypassesNectarGloves(effect))
5252
return false;
5353

5454
var trinkets = TrinketsApi.getTrinketComponent(entity);

src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public static void removeSingleStatusEffect(@NotNull LivingEntity entity, Status
3636
List<StatusEffectInstance> negativeEffects = new ArrayList<>();
3737
for (StatusEffectInstance statusEffectInstance : currentEffects) {
3838
StatusEffect effect = statusEffectInstance.getEffectType();
39-
if (effect.getCategory() == category && !SpectrumStatusEffectTags.isIn(SpectrumStatusEffectTags.SOPORIFIC, effect) && !SpectrumStatusEffectTags.isUnclearable(effect)) {
39+
if (effect.getCategory() == category && !SpectrumStatusEffectTags.isIn(SpectrumStatusEffectTags.SOPORIFIC, effect) && !SpectrumStatusEffectTags.bypassesWhispyCirclet(effect)) {
4040
negativeEffects.add(statusEffectInstance);
4141
}
4242
}
@@ -90,7 +90,7 @@ public static void shortenNegativeStatusEffects(@NotNull LivingEntity entity, in
9090
}
9191

9292
public static boolean affects(StatusEffect statusEffect) {
93-
return statusEffect.getCategory() == StatusEffectCategory.HARMFUL && !SpectrumStatusEffectTags.isIn(SpectrumStatusEffectTags.SOPORIFIC, statusEffect) && !SpectrumStatusEffectTags.isUnclearable(statusEffect);
93+
return statusEffect.getCategory() == StatusEffectCategory.HARMFUL && !SpectrumStatusEffectTags.bypassesWhispyCirclet(statusEffect);
9494
}
9595

9696
public static void preventPhantomSpawns(@NotNull ServerPlayerEntity serverPlayerEntity) {

src/main/java/de/dafuqs/spectrum/mixin/EffectCommandMixin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.llamalad7.mixinextras.sugar.Local;
44
import de.dafuqs.spectrum.api.status_effect.Incurable;
5+
import de.dafuqs.spectrum.registries.*;
56
import net.minecraft.entity.Entity;
67
import net.minecraft.entity.LivingEntity;
78
import net.minecraft.entity.effect.StatusEffect;
@@ -26,6 +27,8 @@ private static void clearIncurableEffects(ServerCommandSource source, Collection
2627
if (((Incurable) effect).spectrum$isIncurable())
2728
((Incurable) effect).spectrum$setIncurable(false);
2829
}
30+
// manually remove fatal slumber to bypass turning it into eternal slumber
31+
living.removeStatusEffect(SpectrumStatusEffects.FATAL_SLUMBER);
2932
}
3033
}
3134

src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -226,21 +226,48 @@ public abstract class LivingEntityMixin {
226226
private boolean spectrum$canHaveStatusEffect(boolean original, @Local(argsOnly = true) StatusEffectInstance statusEffectInstance) {
227227
var instance = (LivingEntity) (Object) this;
228228

229-
if (original && this.hasStatusEffect(SpectrumStatusEffects.IMMUNITY) && statusEffectInstance.getEffectType().getCategory() == StatusEffectCategory.HARMFUL && !SpectrumStatusEffectTags.isImmunityImmune(statusEffectInstance.getEffectType())) {
230-
if (Incurable.isIncurable(statusEffectInstance)) {
229+
// if fatal slumber is applied, incoming immunity converts fatal->eternal and doesn't apply immunity
230+
if (original && this.hasStatusEffect(SpectrumStatusEffects.FATAL_SLUMBER) && statusEffectInstance.getEffectType() == SpectrumStatusEffects.IMMUNITY) {
231+
ImmunityStatusEffect.removeNegativeStatusEffects(instance);
232+
addStatusEffect(new StatusEffectInstance(SpectrumStatusEffects.ETERNAL_SLUMBER, 6000));
233+
return false;
234+
}
235+
236+
// if eternal slumber is applied, incoming immunity loses 30s of duration but does still apply
237+
if (original && this.hasStatusEffect(SpectrumStatusEffects.ETERNAL_SLUMBER) && statusEffectInstance.getEffectType() == SpectrumStatusEffects.IMMUNITY) {
238+
ImmunityStatusEffect.removeNegativeStatusEffects(instance);
239+
((StatusEffectInstanceAccessor) statusEffectInstance).setDuration(Math.max(0, statusEffectInstance.getDuration() - 600));
240+
if (!instance.getWorld().isClient()) {
241+
((ServerWorld) instance.getWorld()).getChunkManager().sendToNearbyPlayers(instance, new EntityStatusEffectS2CPacket(instance.getId(), statusEffectInstance));
242+
}
243+
return true;
244+
}
245+
246+
// normal immunity handling (block incoming negative effects)
247+
if (original && this.hasStatusEffect(SpectrumStatusEffects.IMMUNITY) && statusEffectInstance.getEffectType().getCategory() == StatusEffectCategory.HARMFUL && !SpectrumStatusEffectTags.bypassesImmunity(statusEffectInstance.getEffectType())) {
248+
// incurable effects (and eternal slumber) cost chunks of immunity duration to block
249+
if (Incurable.isIncurable(statusEffectInstance) || statusEffectInstance.getEffectType() == SpectrumStatusEffects.ETERNAL_SLUMBER) {
231250
var immunity = getStatusEffect(SpectrumStatusEffects.IMMUNITY);
232251
var cost = 600 * (statusEffectInstance.getAmplifier() + 1);
252+
var immDuration = immunity.getDuration();
233253

234-
if (immunity.getDuration() >= cost) {
235-
((StatusEffectInstanceAccessor) immunity).setDuration(Math.max(5, immunity.getDuration() - cost));
254+
if (immDuration >= cost) {
255+
((StatusEffectInstanceAccessor) immunity).setDuration(immDuration - cost);
236256
if (!instance.getWorld().isClient()) {
237257
((ServerWorld) instance.getWorld()).getChunkManager().sendToNearbyPlayers(instance, new EntityStatusEffectS2CPacket(instance.getId(), immunity));
238258
}
239259
return false;
260+
} else {
261+
removeStatusEffect(SpectrumStatusEffects.IMMUNITY);
262+
return false;
240263
}
241-
else {
242-
return true;
243-
}
264+
}
265+
266+
// fatal slumber removes the immunity and then turns into eternal slumber
267+
if (statusEffectInstance.getEffectType() == SpectrumStatusEffects.FATAL_SLUMBER) {
268+
removeStatusEffect(SpectrumStatusEffects.IMMUNITY);
269+
addStatusEffect(new StatusEffectInstance(SpectrumStatusEffects.ETERNAL_SLUMBER, 6000));
270+
return false;
244271
}
245272

246273
return false;
@@ -495,8 +522,10 @@ private float getToughness() {
495522
@Inject(method = "addStatusEffect(Lnet/minecraft/entity/effect/StatusEffectInstance;Lnet/minecraft/entity/Entity;)Z", at = @At("HEAD"), cancellable = true)
496523
private void spectrum$modifyOrCancelEffects(StatusEffectInstance effect, Entity source, CallbackInfoReturnable<Boolean> cir) {
497524
var entity = (LivingEntity) (Object) this;
525+
var effectType = effect.getEffectType();
498526

499-
if (AetherGracedNectarGlovesItem.testEffectFor(entity, effect.getEffectType())) {
527+
// trigger gloves only if you don't have immunity, or if you do have immunity but the incoming effect bypasses it
528+
if ((!entity.hasStatusEffect(SpectrumStatusEffects.IMMUNITY) || SpectrumStatusEffectTags.bypassesImmunity(effectType)) && AetherGracedNectarGlovesItem.testEffectFor(entity, effectType)) {
500529
var cost = (effect.getAmplifier() + 1) * AetherGracedNectarGlovesItem.HARMFUL_EFFECT_COST;
501530

502531
if (Incurable.isIncurable(effect))
@@ -509,13 +538,13 @@ private float getToughness() {
509538
}
510539

511540
var resistanceModifier = MathHelper.clamp(SleepStatusEffect.getSleepResistance(effect, entity), 0.1F, 10F);
512-
if (effect.getEffectType() == SpectrumStatusEffects.ETERNAL_SLUMBER) {
541+
if (effectType == SpectrumStatusEffects.ETERNAL_SLUMBER) {
513542
if (SleepStatusEffect.isImmuneish(entity)) {
514543
((StatusEffectInstanceAccessor) effect).setDuration(Math.round(effect.getDuration() / resistanceModifier));
515544
} else if (!entity.getType().isIn(SpectrumEntityTypeTags.SLEEP_RESISTANT)) {
516545
((StatusEffectInstanceAccessor) effect).setDuration(StatusEffectInstance.INFINITE);
517546
}
518-
} else if (effect.getEffectType() == SpectrumStatusEffects.FATAL_SLUMBER) {
547+
} else if (effectType == SpectrumStatusEffects.FATAL_SLUMBER) {
519548
if (SleepStatusEffect.isImmuneish(entity) && entity.getType().isIn(ConventionalEntityTypeTags.BOSSES)) {
520549
((StatusEffectInstanceAccessor) effect).setDuration(20 * 60);
521550
}

src/main/java/de/dafuqs/spectrum/mixin/compat/quilt_status_effect/absent/LivingEntityPreventStatusClearMixin.java

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
import net.minecraft.entity.effect.*;
1212
import net.minecraft.network.packet.s2c.play.*;
1313
import net.minecraft.server.world.*;
14+
import org.jetbrains.annotations.*;
1415
import org.spongepowered.asm.mixin.*;
1516
import org.spongepowered.asm.mixin.injection.*;
17+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1618

1719
import java.util.*;
1820

@@ -21,22 +23,40 @@ public abstract class LivingEntityPreventStatusClearMixin {
2123

2224
@Shadow
2325
public abstract void remove(Entity.RemovalReason reason);
24-
26+
27+
@Shadow
28+
public abstract boolean addStatusEffect(StatusEffectInstance effect);
29+
30+
@Shadow
31+
public abstract Map<StatusEffect,StatusEffectInstance> getActiveStatusEffects();
32+
33+
@Inject(method = "clearStatusEffects", at = @At("HEAD"))
34+
private void spectrum$detectFatalSlumber(CallbackInfoReturnable<Boolean> cir, @Share("hasFatalSlumber") LocalBooleanRef hasFatalSlumber) {
35+
hasFatalSlumber.set(getActiveStatusEffects().containsKey(SpectrumStatusEffects.FATAL_SLUMBER));
36+
}
37+
38+
@Inject(method = "clearStatusEffects", at = @At("TAIL"))
39+
private void spectrum$applyEternalSlumberIfFatalSlumberRemoved(CallbackInfoReturnable<Boolean> cir, @Share("hasFatalSlumber") LocalBooleanRef hasFatalSlumber) {
40+
if (hasFatalSlumber.get()) {
41+
addStatusEffect(new StatusEffectInstance(SpectrumStatusEffects.ETERNAL_SLUMBER, 6000));
42+
}
43+
}
44+
2545
@WrapWithCondition(method = "clearStatusEffects", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;onStatusEffectRemoved(Lnet/minecraft/entity/effect/StatusEffectInstance;)V"))
2646
private boolean spectrum$preventStatusClear(LivingEntity instance, StatusEffectInstance effect, @Share("blockRemoval") LocalBooleanRef blockRemoval) {
2747
if (Incurable.isIncurable(effect)) {
2848
if (affectedByImmunity(instance, effect.getAmplifier()))
2949
return true;
3050

31-
if (effect.getDuration() > 1200) {
32-
((StatusEffectInstanceAccessor) effect).setDuration(effect.getDuration() - 1200);
33-
if (!instance.getWorld().isClient()) {
34-
((ServerWorld) instance.getWorld()).getChunkManager().sendToNearbyPlayers(instance, new EntityStatusEffectS2CPacket(instance.getId(), effect));
35-
}
36-
37-
blockRemoval.set(true);
38-
return false;
51+
// new duration = duration - 1min OR duration * 0.4, whichever is the smaller reduction
52+
int duration = effect.getDuration();
53+
((StatusEffectInstanceAccessor) effect).setDuration(Math.max(duration - 1200, (int)(duration * 0.4)));
54+
if (!instance.getWorld().isClient()) {
55+
((ServerWorld) instance.getWorld()).getChunkManager().sendToNearbyPlayers(instance, new EntityStatusEffectS2CPacket(instance.getId(), effect));
3956
}
57+
58+
blockRemoval.set(true);
59+
return false;
4060
}
4161
return true;
4262
}

src/main/java/de/dafuqs/spectrum/mixin/compat/quilt_status_effect/present/SpectrumEventListenersMixin.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ public class SpectrumEventListenersMixin {
2121
@Unique
2222
private static TriState _shouldRemove(LivingEntity entity, StatusEffectInstance effect, Object reason) {
2323
if (Incurable.isIncurable(effect) && !affectedByImmunity(entity, effect.getAmplifier())) {
24-
if (effect.getDuration() > 1200) {
25-
((StatusEffectInstanceAccessor) effect).setDuration(effect.getDuration() - 1200);
26-
if (!entity.getWorld().isClient()) {
27-
((ServerWorld) entity.getWorld()).getChunkManager().sendToNearbyPlayers(entity, new EntityStatusEffectS2CPacket(entity.getId(), effect));
28-
}
24+
// new duration = duration - 1min OR duration * 0.4, whichever is the smaller reduction
25+
int duration = effect.getDuration();
26+
((StatusEffectInstanceAccessor) effect).setDuration(Math.max(duration - 1200, (int)(duration * 0.4)));
27+
if (!entity.getWorld().isClient()) {
28+
((ServerWorld) entity.getWorld()).getChunkManager().sendToNearbyPlayers(entity, new EntityStatusEffectS2CPacket(entity.getId(), effect));
2929
}
3030
return TriState.FALSE;
3131
}

src/main/java/de/dafuqs/spectrum/registries/SpectrumFoodComponents.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public class SpectrumFoodComponents {
8181
.build();
8282

8383
public static final FoodComponent RESTORATION_TEA = new FoodComponent.Builder()
84-
.hunger(2).saturationModifier(2F)
84+
.hunger(2).saturationModifier(2F).alwaysEdible()
8585
.statusEffect(new StatusEffectInstance(SpectrumStatusEffects.IMMUNITY, 1200), 1.0F)
8686
.build();
8787

@@ -96,7 +96,7 @@ public class SpectrumFoodComponents {
9696
.build();
9797

9898
public static final FoodComponent DEMON_TEA = new FoodComponent.Builder()
99-
.snack().hunger(2).saturationModifier(0.2F)
99+
.snack().hunger(2).saturationModifier(0.2F).alwaysEdible()
100100
.statusEffect(new StatusEffectInstance(SpectrumStatusEffects.FRENZY, 800, 1), 2.0F / 3.0F)
101101
.build();
102102

@@ -135,7 +135,7 @@ public class SpectrumFoodComponents {
135135
.build();
136136

137137
public static final FoodComponent HOT_CHOCOLATE = new FoodComponent.Builder()
138-
.hunger(6).saturationModifier(0.2F)
138+
.hunger(6).saturationModifier(0.2F).alwaysEdible()
139139
.statusEffect(new StatusEffectInstance(SpectrumStatusEffects.NOURISHING, 1200), 1.0F)
140140
.build();
141141

@@ -144,7 +144,7 @@ public class SpectrumFoodComponents {
144144
.build();
145145

146146
public static final FoodComponent KARAK_CHAI = new FoodComponent.Builder()
147-
.hunger(5).saturationModifier(1F)
147+
.hunger(5).saturationModifier(1F).alwaysEdible()
148148
.statusEffect(new StatusEffectInstance(SpectrumStatusEffects.CALMING, 2400, 1), 1.0F)
149149
.build();
150150

@@ -154,7 +154,7 @@ public class SpectrumFoodComponents {
154154
.build();
155155

156156
public static final FoodComponent AZALEA_TEA = new FoodComponent.Builder()
157-
.hunger(2).saturationModifier(0.1F)
157+
.hunger(2).saturationModifier(0.1F).alwaysEdible()
158158
.statusEffect(new StatusEffectInstance(SpectrumStatusEffects.SOMNOLENCE, 1200), 1.0F)
159159
.build();
160160

@@ -369,7 +369,7 @@ public class SpectrumFoodComponents {
369369
.build();
370370

371371
public static final FoodComponent GOLDEN_BRISTLE_TEA = new FoodComponent.Builder()
372-
.hunger(6).saturationModifier(1F)
372+
.hunger(6).saturationModifier(1F).alwaysEdible()
373373
.statusEffect(new StatusEffectInstance(StatusEffects.INSTANT_HEALTH), 0.5F)
374374
.statusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 600, 3), 1)
375375
.statusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, 600, 0), 0.5F)
@@ -428,7 +428,7 @@ public class SpectrumFoodComponents {
428428
.build();
429429

430430
public static final FoodComponent PEACH_CREAM = new FoodComponent.Builder()
431-
.hunger(8).saturationModifier(1F)
431+
.hunger(8).saturationModifier(1F).alwaysEdible()
432432
.statusEffect(new StatusEffectInstance(SpectrumStatusEffects.TOUGHNESS, 3000, 1), 1.0F)
433433
.build();
434434

@@ -455,7 +455,7 @@ public class SpectrumFoodComponents {
455455
.build();
456456

457457
public static final FoodComponent SLUSHSLIDE = new FoodComponent.Builder()
458-
.hunger(9).saturationModifier(0.6F)
458+
.hunger(9).saturationModifier(0.6F).alwaysEdible()
459459
.statusEffect(new StatusEffectInstance(SpectrumStatusEffects.SWIFTNESS, 2400, 1), 1.0F)
460460
.statusEffect(new StatusEffectInstance(StatusEffects.HASTE, 2400, 1), 1.0F)
461461
.build();

src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ public Map<Enchantment, Integer> getDefaultEnchantments() {
397397
public static final Item PEACH_JAM = new Item(IS.of().food(SpectrumFoodComponents.PEACH_JAM));
398398
public static final Item RABBIT_CREAM_PIE = new ItemWithTooltip(IS.of().food(SpectrumFoodComponents.RABBIT_CREAM_PIE), "item.spectrum.rabbit_cream_pie.tooltip");
399399
public static final Item SEDATIVES = new SedativesItem(IS.of().food(SpectrumFoodComponents.SEDATIVES), "item.spectrum.sedatives.tooltip");
400-
public static final Item SLUSHSLIDE = new ItemWithTooltip(IS.of().food(SpectrumFoodComponents.SLUSHSLIDE), "item.spectrum.slushslide.tooltip");
400+
public static final Item SLUSHSLIDE = new SlushslideItem(IS.of(16).food(SpectrumFoodComponents.SLUSHSLIDE));
401401
public static final Item SURSTROMMING = new Item(IS.of().food(SpectrumFoodComponents.SURSTROMMING));
402402
public static final Item EVERNECTAR = new EvernectarItem(IS.of(1, Rarity.EPIC).food(SpectrumFoodComponents.EVERNECTAR).recipeRemainder(Items.GLASS_BOTTLE), "item.spectrum.evernectar.tooltip");
403403

src/main/java/de/dafuqs/spectrum/registries/SpectrumStatusEffectTags.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@
88

99
public class SpectrumStatusEffectTags {
1010

11-
public static TagKey<StatusEffect> NO_EFFECT_CLEAR;
12-
public static TagKey<StatusEffect> IMMUNITY_IMMUNE;
11+
public static TagKey<StatusEffect> BYPASSES_WHISPY_CIRCLET;
12+
public static TagKey<StatusEffect> BYPASSES_NECTAR_GLOVES;
13+
public static TagKey<StatusEffect> BYPASSES_IMMUNITY;
1314
public static TagKey<StatusEffect> NO_DURATION_EXTENSION;
1415
public static TagKey<StatusEffect> SOPORIFIC;
1516
public static TagKey<StatusEffect> NIGHT_ALCHEMY;
1617

1718
public static void register() {
18-
NO_EFFECT_CLEAR = of("unclearable");
19-
IMMUNITY_IMMUNE = of("immunity_immune");
19+
BYPASSES_WHISPY_CIRCLET = of("bypasses_whispy_circlet");
20+
BYPASSES_NECTAR_GLOVES = of("bypasses_nectar_gloves");
21+
BYPASSES_IMMUNITY = of("bypasses_immunity");
2022
NO_DURATION_EXTENSION = of("no_duration_extension");
2123
SOPORIFIC = of("soporific");
2224
NIGHT_ALCHEMY = of("night_alchemy");
@@ -30,12 +32,16 @@ public static boolean isIn(TagKey<StatusEffect> tag, StatusEffect effect) {
3032
return Registries.STATUS_EFFECT.getEntry(effect).isIn(tag);
3133
}
3234

33-
public static boolean isImmunityImmune(StatusEffect statusEffect) {
34-
return isIn(SpectrumStatusEffectTags.IMMUNITY_IMMUNE, statusEffect);
35+
public static boolean bypassesImmunity(StatusEffect statusEffect) {
36+
return isIn(SpectrumStatusEffectTags.BYPASSES_IMMUNITY, statusEffect);
37+
}
38+
39+
public static boolean bypassesNectarGloves(StatusEffect statusEffect) {
40+
return isIn(SpectrumStatusEffectTags.BYPASSES_NECTAR_GLOVES, statusEffect);
3541
}
3642

37-
public static boolean isUnclearable(StatusEffect statusEffect) {
38-
return isIn(SpectrumStatusEffectTags.NO_EFFECT_CLEAR, statusEffect);
43+
public static boolean bypassesWhispyCirclet(StatusEffect statusEffect) {
44+
return isIn(SpectrumStatusEffectTags.BYPASSES_WHISPY_CIRCLET, statusEffect);
3945
}
4046

4147
public static boolean hasEffectWithTag(LivingEntity livingEntity, TagKey<StatusEffect> tag) {

0 commit comments

Comments
 (0)