Skip to content

Commit d00749f

Browse files
committed
Make vanilla golems immune to radiation similar to how the robit is immune to radiation (mekanism/Mekanism-Feature-Requests#608) This is done via a new radiation_immune tag
1 parent b3fb169 commit d00749f

File tree

8 files changed

+65
-12
lines changed

8 files changed

+65
-12
lines changed

src/api/java/mekanism/api/MekanismAPI.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private MekanismAPI() {
3434
/**
3535
* The version of the api classes - may not always match the mod's version
3636
*/
37-
public static final String API_VERSION = "10.6.2";
37+
public static final String API_VERSION = "10.6.3";
3838
/**
3939
* Mekanism's Mod ID
4040
*/

src/api/java/mekanism/api/MekanismAPITags.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import net.minecraft.tags.TagKey;
1111
import net.minecraft.world.damagesource.DamageType;
1212
import net.minecraft.world.effect.MobEffect;
13+
import net.minecraft.world.entity.EntityType;
1314

1415
/**
1516
* Provides access to pre-existing tag keys for various functionality that we use tags for.
@@ -163,4 +164,30 @@ private static TagKey<DamageType> tag(String name) {
163164
return TagKey.create(Registries.DAMAGE_TYPE, rl(name));
164165
}
165166
}
167+
168+
/**
169+
* @since 10.6.3
170+
*/
171+
public static class Entities {
172+
173+
private Entities() {
174+
}
175+
176+
/**
177+
* Represents any entity type that is immune to all Radiation.
178+
*/
179+
public static final TagKey<EntityType<?>> RADIATION_IMMUNE = commonTag("radiation_immune");
180+
/**
181+
* Represents any entity type that is immune to Mekanism Radiation.
182+
*/
183+
public static final TagKey<EntityType<?>> MEK_RADIATION_IMMUNE = tag("radiation_immune");
184+
185+
private static TagKey<EntityType<?>> commonTag(String name) {
186+
return TagKey.create(Registries.ENTITY_TYPE, ResourceLocation.fromNamespaceAndPath("c", name));
187+
}
188+
189+
private static TagKey<EntityType<?>> tag(String name) {
190+
return TagKey.create(Registries.ENTITY_TYPE, rl(name));
191+
}
192+
}
166193
}

src/datagen/generated/mekanism/.cache/f4271571320fe007f5d8ba9eb4461ed6922f6a93

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datagen/generated/mekanism/data/c/tags/entity_type/radiation_immune.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datagen/generated/mekanism/data/mekanism/tags/entity_type/radiation_immune.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datagen/main/java/mekanism/common/tag/MekanismTagProvider.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import net.minecraft.tags.ItemTags;
4040
import net.minecraft.tags.TagKey;
4141
import net.minecraft.world.damagesource.DamageTypes;
42+
import net.minecraft.world.entity.EntityType;
4243
import net.minecraft.world.item.DyeColor;
4344
import net.minecraft.world.item.Item;
4445
import net.minecraft.world.item.Items;
@@ -140,6 +141,12 @@ private void addEntities() {
140141
addEntitiesToTag(EntityTypeTags.IMPACT_PROJECTILES, MekanismEntityTypes.FLAME);
141142
addEntitiesToTag(PVI_COMPAT, MekanismEntityTypes.ROBIT);
142143

144+
addEntitiesToTag(MekanismAPITags.Entities.RADIATION_IMMUNE, MekanismEntityTypes.ROBIT);
145+
getEntityTypeBuilder(MekanismAPITags.Entities.MEK_RADIATION_IMMUNE).add(MekanismAPITags.Entities.RADIATION_IMMUNE).add(
146+
EntityType.IRON_GOLEM,
147+
EntityType.SNOW_GOLEM
148+
);
149+
143150
addEntitiesToTag(EntityTypeTags.POWDER_SNOW_WALKABLE_MOBS, MekanismEntityTypes.ROBIT);
144151
addEntitiesToTag(EntityTypeTags.FREEZE_IMMUNE_ENTITY_TYPES, MekanismEntityTypes.ROBIT);
145152
addEntitiesToTag(EntityTypeTags.CAN_BREATHE_UNDER_WATER, MekanismEntityTypes.ROBIT);
@@ -517,9 +524,9 @@ private void addDamageTypes() {
517524
getDamageTypeBuilder(MekanismAPITags.DamageTypes.IS_PREVENTABLE_MAGIC).add(DamageTypes.MAGIC, DamageTypes.INDIRECT_MAGIC);
518525

519526
addToTag(MekanismAPITags.DamageTypes.MEKASUIT_ALWAYS_SUPPORTED, DamageTypes.FALLING_ANVIL, DamageTypes.CACTUS, DamageTypes.CRAMMING,
520-
DamageTypes.DRAGON_BREATH, DamageTypes.DRY_OUT, DamageTypes.FALL, DamageTypes.FALLING_BLOCK, DamageTypes.FLY_INTO_WALL, DamageTypes.GENERIC,
521-
DamageTypes.HOT_FLOOR, DamageTypes.IN_FIRE, DamageTypes.IN_WALL, DamageTypes.LAVA, DamageTypes.LIGHTNING_BOLT, DamageTypes.ON_FIRE,
522-
DamageTypes.SWEET_BERRY_BUSH, DamageTypes.WITHER, DamageTypes.FREEZE, DamageTypes.FALLING_STALACTITE, DamageTypes.STALAGMITE, DamageTypes.SONIC_BOOM);
527+
DamageTypes.DRAGON_BREATH, DamageTypes.DRY_OUT, DamageTypes.FALL, DamageTypes.FALLING_BLOCK, DamageTypes.FLY_INTO_WALL, DamageTypes.GENERIC,
528+
DamageTypes.HOT_FLOOR, DamageTypes.IN_FIRE, DamageTypes.IN_WALL, DamageTypes.LAVA, DamageTypes.LIGHTNING_BOLT, DamageTypes.ON_FIRE,
529+
DamageTypes.SWEET_BERRY_BUSH, DamageTypes.WITHER, DamageTypes.FREEZE, DamageTypes.FALLING_STALACTITE, DamageTypes.STALAGMITE, DamageTypes.SONIC_BOOM);
523530
}
524531

525532
private void addFluids() {

src/main/java/mekanism/common/CommonPlayerTickHandler.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import mekanism.common.item.interfaces.IJetpackItem;
2828
import mekanism.common.item.interfaces.IJetpackItem.JetpackMode;
2929
import mekanism.common.lib.radiation.RadiationManager;
30+
import mekanism.common.registries.MekanismDamageTypes;
3031
import mekanism.common.registries.MekanismGameEvents;
3132
import mekanism.common.registries.MekanismModules;
3233
import mekanism.common.util.ChemicalUtil;
@@ -48,6 +49,7 @@
4849
import net.neoforged.bus.api.SubscribeEvent;
4950
import net.neoforged.neoforge.common.NeoForgeMod;
5051
import net.neoforged.neoforge.common.damagesource.DamageContainer;
52+
import net.neoforged.neoforge.event.entity.EntityInvulnerabilityCheckEvent;
5153
import net.neoforged.neoforge.event.entity.living.LivingEvent.LivingJumpEvent;
5254
import net.neoforged.neoforge.event.entity.living.LivingFallEvent;
5355
import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent;
@@ -159,6 +161,16 @@ public static boolean isGravitationalModulationOn(Player player) {
159161
return ModuleGravitationalModulatingUnit.shouldProcess(player) && isGravitationalModulationReady(player.getItemBySlot(EquipmentSlot.CHEST));
160162
}
161163

164+
@SubscribeEvent
165+
public void checkEntityInvulnerability(EntityInvulnerabilityCheckEvent event) {
166+
if (!event.isInvulnerable() && event.getEntity() instanceof LivingEntity entity) {
167+
if (event.getSource().is(MekanismDamageTypes.RADIATION.key())) {
168+
//Note: As we only enter this block if it isn't invulnerable, there is no chance that this call makes it go from invulnerable to not
169+
event.setInvulnerable(entity.getType().is(MekanismAPITags.Entities.MEK_RADIATION_IMMUNE));
170+
}
171+
}
172+
}
173+
162174
@SubscribeEvent
163175
@SuppressWarnings("UnstableApiUsage")//Note: DamageContainer isn't actually unstable, they just forgot to unmark it before finalizing the PR
164176
public void onEntityAttacked(LivingIncomingDamageEvent event) {

src/main/java/mekanism/common/entity/EntityRobit.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666
import mekanism.common.recipe.lookup.cache.InputRecipeCache.SingleItem;
6767
import mekanism.common.recipe.lookup.monitor.RecipeCacheLookupMonitor;
6868
import mekanism.common.registries.MekanismContainerTypes;
69-
import mekanism.common.registries.MekanismDamageTypes;
7069
import mekanism.common.registries.MekanismDataComponents;
7170
import mekanism.common.registries.MekanismDataSerializers;
7271
import mekanism.common.registries.MekanismEntityTypes;
@@ -101,7 +100,6 @@
101100
import net.minecraft.world.InteractionHand;
102101
import net.minecraft.world.InteractionResult;
103102
import net.minecraft.world.MenuProvider;
104-
import net.minecraft.world.damagesource.DamageSource;
105103
import net.minecraft.world.entity.EntityType;
106104
import net.minecraft.world.entity.Mob;
107105
import net.minecraft.world.entity.PathfinderMob;
@@ -522,11 +520,6 @@ public void readAdditionalSaveData(@NotNull CompoundTag nbtTags) {
522520
() -> setSkin(MekanismRobitSkins.BASE, null));
523521
}
524522

525-
@Override
526-
public boolean isInvulnerableTo(@NotNull DamageSource source) {
527-
return source.is(MekanismDamageTypes.RADIATION.key()) || super.isInvulnerableTo(source);
528-
}
529-
530523
@Override
531524
@SuppressWarnings("UnstableApiUsage")//Note: DamageContainer isn't actually unstable, they just forgot to unmark it before finalizing the PR
532525
public void onDamageTaken(@NotNull DamageContainer damageContainer) {

0 commit comments

Comments
 (0)