From 73b4c161acde6e5ea341c13a67d70184dcef7744 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 19 Aug 2021 00:26:45 +0700 Subject: [PATCH] Androids can not have some of status effects --- .../mc/otm/OverdriveThatMatters.java | 2 ++ .../mc/otm/capability/AndroidCapability.java | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java index 2ac304955..f76680f7d 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java +++ b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java @@ -63,6 +63,8 @@ public class OverdriveThatMatters { FMLJavaModLoadingContext.get().getModEventBus().register(Registry.BlockEntities.class); FMLJavaModLoadingContext.get().getModEventBus().register(Registry.Menus.class); + FMLJavaModLoadingContext.get().getModEventBus().addListener(AndroidCapability::registerEffects); + // LOGGER.info("Registered event handlers"); CREATIVE_TAB = new CreativeModeTab("otm") { diff --git a/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapability.java b/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapability.java index b058d9a11..e34609fc7 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapability.java +++ b/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapability.java @@ -4,6 +4,8 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.food.FoodData; import net.minecraft.world.item.ItemStack; @@ -15,14 +17,17 @@ import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.network.AndroidCapabilityChangePacket; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.math.BigDecimal; +import java.util.HashSet; import java.util.Optional; import java.util.Random; +import java.util.Set; public class AndroidCapability implements ICapabilityProvider, IAndroidCapability, INBTSerializable { protected final LivingEntity ent; @@ -34,6 +39,23 @@ public class AndroidCapability implements ICapabilityProvider, IAndroidCapabilit private BigDecimal network_energy_max = new BigDecimal(-1); private ItemStack network_battery = ItemStack.EMPTY; + public static final Set UNAFFECTED_EFFECTS = new HashSet<>(); + + public static void registerEffects(final FMLCommonSetupEvent event) { + UNAFFECTED_EFFECTS.add(MobEffects.CONDUIT_POWER); + UNAFFECTED_EFFECTS.add(MobEffects.HEAL); + // maybe it makes things go haywire idk + // UNAFFECTED_EFFECTS.add(MobEffects.HARM); + UNAFFECTED_EFFECTS.add(MobEffects.REGENERATION); + UNAFFECTED_EFFECTS.add(MobEffects.WATER_BREATHING); + UNAFFECTED_EFFECTS.add(MobEffects.POISON); + UNAFFECTED_EFFECTS.add(MobEffects.WITHER); + UNAFFECTED_EFFECTS.add(MobEffects.HEALTH_BOOST); + UNAFFECTED_EFFECTS.add(MobEffects.ABSORPTION); + UNAFFECTED_EFFECTS.add(MobEffects.SATURATION); + UNAFFECTED_EFFECTS.add(MobEffects.DOLPHINS_GRACE); + } + @Override public void invalidateNetworkState() { network_energy = new BigDecimal(-1); @@ -147,6 +169,10 @@ public class AndroidCapability implements ICapabilityProvider, IAndroidCapabilit if (ent.getAirSupply() < ent.getMaxAirSupply()) ent.setAirSupply(ent.getMaxAirSupply()); + for (var effect : UNAFFECTED_EFFECTS) + if (ent.hasEffect(effect)) + ent.removeEffect(effect); + if (!battery.isEmpty()) { BigDecimal demand = energy_stored_max.subtract(energy_stored, MatteryCapability.ROUND_RULES);