diff --git a/src/main/java/ru/bitheaven/createastrafabric/mixin/EntityTemperatureSystemMixin.java b/src/main/java/ru/bitheaven/createastrafabric/mixin/EntityTemperatureSystemMixin.java new file mode 100644 index 0000000..81c7dca --- /dev/null +++ b/src/main/java/ru/bitheaven/createastrafabric/mixin/EntityTemperatureSystemMixin.java @@ -0,0 +1,35 @@ +package ru.bitheaven.createastrafabric.mixin; + +import com.simibubi.create.content.equipment.armor.BacktankUtil; +import com.simibubi.create.content.equipment.armor.DivingHelmetItem; +import earth.terrarium.ad_astra.common.config.AdAstraConfig; +import earth.terrarium.ad_astra.common.entity.system.EntityTemperatureSystem; +import earth.terrarium.ad_astra.common.item.armor.NetheriteSpaceSuit; +import earth.terrarium.ad_astra.common.registry.ModTags; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(EntityTemperatureSystem.class) +public abstract class EntityTemperatureSystemMixin { + @Redirect(at = @At(value = "INVOKE", target = "Learth/terrarium/ad_astra/common/entity/system/EntityTemperatureSystem;burnEntity(Lnet/minecraft/world/entity/LivingEntity;)V"), + method = "temperatureTick(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/server/level/ServerLevel;)V") + private static void redirectTemperatureTick(LivingEntity entity) { + boolean createNetherite = true; + createNetherite &= DivingHelmetItem.getWornItem(entity).getItem().isFireResistant(); + createNetherite &= BacktankUtil.getAllWithAir(entity).stream().anyMatch(b -> b.getItem().isFireResistant()); + createNetherite &= entity.getItemBySlot(EquipmentSlot.LEGS).is(ModTags.HEAT_RESISTANT) + || entity.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof NetheriteSpaceSuit + || entity.getItemBySlot(EquipmentSlot.LEGS).getItem().isFireResistant(); + createNetherite &= entity.getItemBySlot(EquipmentSlot.FEET).is(ModTags.HEAT_RESISTANT) + || entity.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof NetheriteSpaceSuit + || entity.getItemBySlot(EquipmentSlot.FEET).getItem().isFireResistant(); + + if(!createNetherite) { + entity.hurt(entity.damageSources().onFire(), (float) AdAstraConfig.heatDamage); + entity.setSecondsOnFire(10); + } + } +}