Androids can not have some of status effects

This commit is contained in:
DBotThePony 2021-08-19 00:26:45 +07:00
parent 4b94c64b4e
commit 73b4c161ac
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 28 additions and 0 deletions

View File

@ -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") {

View File

@ -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<CompoundTag> {
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<MobEffect> 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);