added all the changes and loot tabels

This commit is contained in:
craisinlord committed 2026-08-13 14:50:38 -05:00
1 parent 313c54e8d6
commit 05c9dd5e66
61 files changed
+738 -108

No files matched your search

@@ -218,13 +218,13 @@ public final class AntarchySettings {
private static int basiliskPreyPetrifyTicks = 200; private static int basiliskPreyPetrifyTicks = 200;
private static boolean diamondMinecartEnabled = true; private static boolean diamondMinecartEnabled = true;
private static boolean diamondMinecartPlacesRails = true; private static boolean diamondMinecartPlacesRails = true;
private static double diamondMinecartCruiseSpeed = 0.6D; private static double diamondMinecartCruiseSpeed = 0.0D;
private static double diamondMinecartMaxSpeed = 1.0D; private static double diamondMinecartMaxSpeed = 0.55D;
private static double diamondMinecartAcceleration = 0.03D; private static double diamondMinecartAcceleration = 0.02D;
private static double diamondMinecartDeceleration = 0.04D; private static double diamondMinecartDeceleration = 0.05D;
private static double diamondMinecartCoastDeceleration = 0.01D; private static double diamondMinecartCoastDeceleration = 0.02D;
private static boolean diamondMinecartMobDamageEnabled = true; private static boolean diamondMinecartMobDamageEnabled = false;
private static double diamondMinecartMaxMobDamage = 8.0D; private static double diamondMinecartMaxMobDamage = 4.0D;
private static boolean dreadHallucinationSoundsEnabled = true; private static boolean dreadHallucinationSoundsEnabled = true;
private static double dreadHallucinationSoundMinInterval = 3.0D; private static double dreadHallucinationSoundMinInterval = 3.0D;
private static double dreadHallucinationSoundMaxInterval = 10.0D; private static double dreadHallucinationSoundMaxInterval = 10.0D;
@@ -229,10 +229,17 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
@Override @Override
public boolean canUse() { public boolean canUse() {
return !HerculesBeetleEntity.this.isKnockedDown() return !HerculesBeetleEntity.this.isKnockedDown()
&& !HerculesBeetleEntity.this.isLeashed()
&& !HerculesBeetleEntity.this.isVehicle() && !HerculesBeetleEntity.this.isVehicle()
&& !HerculesBeetleEntity.this.isInBusyAnimation() && !HerculesBeetleEntity.this.isInBusyAnimation()
&& super.canUse(); && super.canUse();
} }
@Override
public boolean canContinueToUse() {
return !HerculesBeetleEntity.this.isLeashed()
&& super.canContinueToUse();
}
}); });
this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 16.0F));
this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(4, new RandomLookAroundGoal(this));
@@ -364,6 +371,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
if (this.isKnockedDown()) { if (this.isKnockedDown()) {
this.tickKnockedDown(); this.tickKnockedDown();
} else if (this.isLeashed()) {
this.getNavigation().stop();
this.setTarget(null);
this.updateAmbientAnimation();
} else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) { } else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) {
this.tickCharge(); this.tickCharge();
} else if (this.isInBusyAnimation()) { } else if (this.isInBusyAnimation()) {
@@ -1402,6 +1413,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
return null; return null;
} }
@Override
public boolean canBeLeashed(Player player) {
return this.isTame() && super.canBeLeashed(player);
}
private final class HerculesCombatGoal extends Goal { private final class HerculesCombatGoal extends Goal {
HerculesCombatGoal() { HerculesCombatGoal() {
this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK));
@@ -1410,6 +1426,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
@Override @Override
public boolean canUse() { public boolean canUse() {
return !HerculesBeetleEntity.this.isTame() return !HerculesBeetleEntity.this.isTame()
&& !HerculesBeetleEntity.this.isLeashed()
&& !HerculesBeetleEntity.this.isKnockedDown() && !HerculesBeetleEntity.this.isKnockedDown()
&& HerculesBeetleEntity.this.getTarget() != null && HerculesBeetleEntity.this.getTarget() != null
&& HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget()); && HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget());
@@ -1421,6 +1438,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
return target != null return target != null
&& target.isAlive() && target.isAlive()
&& !HerculesBeetleEntity.this.isTame() && !HerculesBeetleEntity.this.isTame()
&& !HerculesBeetleEntity.this.isLeashed()
&& !HerculesBeetleEntity.this.isKnockedDown() && !HerculesBeetleEntity.this.isKnockedDown()
&& HerculesBeetleEntity.this.canAttack(target); && HerculesBeetleEntity.this.canAttack(target);
} }
@@ -0,0 +1,74 @@
package com.craisinlord.antarchy.content.gravity;
import com.craisinlord.antarchy.content.AntarchyObjects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
public final class AntarchyMountedGravityHelper {
private static final AntarchyGravityTransition STACK_TRANSITION = new AntarchyGravityTransition(12);
private AntarchyMountedGravityHelper() {
}
public static void syncConnectedStack(Entity entity) {
if (entity == null || entity.level().isClientSide()) {
return;
}
syncRootStack(entity.getRootVehicle(), null);
}
public static void syncConnectedStackIgnoring(Entity entity, LivingEntity ignoredEffectSource) {
if (entity == null || entity.level().isClientSide()) {
return;
}
syncRootStack(entity.getRootVehicle(), ignoredEffectSource);
}
public static void syncSeparatedStacks(Entity previousVehicle, Entity detachedEntity) {
if (previousVehicle != null && !previousVehicle.level().isClientSide()) {
syncRootStack(previousVehicle.getRootVehicle(), null);
}
if (detachedEntity != null && !detachedEntity.level().isClientSide()) {
syncRootStack(detachedEntity.getRootVehicle(), null);
}
}
private static void syncRootStack(Entity root, LivingEntity ignoredEffectSource) {
boolean shouldInvert = stackHasInvertedEffect(root, ignoredEffectSource);
applyGravityState(root, shouldInvert);
for (Entity passenger : root.getIndirectPassengers()) {
applyGravityState(passenger, shouldInvert);
}
}
private static boolean stackHasInvertedEffect(Entity root, LivingEntity ignoredEffectSource) {
if (hasInvertedEffect(root, ignoredEffectSource)) {
return true;
}
for (Entity passenger : root.getIndirectPassengers()) {
if (hasInvertedEffect(passenger, ignoredEffectSource)) {
return true;
}
}
return false;
}
private static boolean hasInvertedEffect(Entity entity, LivingEntity ignoredEffectSource) {
return entity instanceof LivingEntity living
&& living != ignoredEffectSource
&& living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get());
}
private static void applyGravityState(Entity entity, boolean shouldInvert) {
if (shouldInvert) {
if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP) {
AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, STACK_TRANSITION);
}
return;
}
if (AntarchyGravityApi.isGravityForced(entity)) {
AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, STACK_TRANSITION);
}
}
}
@@ -34,6 +34,14 @@ public class DiamondMinecartItem extends Item {
@Override @Override
public void appendHoverText(ItemStack stack, Level level, List<Component> tooltipComponents, TooltipFlag tooltipFlag) { public void appendHoverText(ItemStack stack, Level level, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag);
if (!AntarchySettings.diamondMinecartEnabled()) {
tooltipComponents.add(Component.literal("Currently behaves like a regular minecart.").withStyle(ChatFormatting.GRAY));
return;
}
tooltipComponents.add(Component.literal("Hold W to accelerate and S to brake.").withStyle(ChatFormatting.GRAY));
if (AntarchySettings.diamondMinecartPlacesRails()) {
tooltipComponents.add(Component.literal("Places rails from your inventory while ridden.").withStyle(ChatFormatting.DARK_AQUA));
}
} }
@Override @Override
@@ -0,0 +1,34 @@
package com.craisinlord.antarchy.mixins.gravity;
import com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper;
import net.minecraft.world.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(Entity.class)
public abstract class EntityMountedGravityMixin {
@Unique
private Entity antarchy$previousVehicle;
@Inject(method = "startRiding(Lnet/minecraft/world/entity/Entity;Z)Z", at = @At("RETURN"))
private void antarchy$syncMountedStack(Entity vehicle, boolean force, CallbackInfoReturnable<Boolean> cir) {
if (cir.getReturnValue()) {
AntarchyMountedGravityHelper.syncConnectedStack((Entity) (Object) this);
}
}
@Inject(method = "stopRiding", at = @At("HEAD"))
private void antarchy$capturePreviousVehicle(CallbackInfo ci) {
this.antarchy$previousVehicle = ((Entity) (Object) this).getVehicle();
}
@Inject(method = "stopRiding", at = @At("TAIL"))
private void antarchy$syncDismountedStacks(CallbackInfo ci) {
AntarchyMountedGravityHelper.syncSeparatedStacks(this.antarchy$previousVehicle, (Entity) (Object) this);
this.antarchy$previousVehicle = null;
}
}
@@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "building",
"key": {
"D": {
"tag": "c:deepslates"
},
"B": {
"item": "antarchy:broodfruit"
}
},
"pattern": [
"DDD",
"DBD",
"DDD"
],
"result": {
"count": 8,
"item": "antarchy:bloodstone"
}
}
@@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "building",
"key": {
"S": {
"tag": "c:stones"
},
"C": {
"item": "antarchy:chitin"
}
},
"pattern": [
"SSS",
"SCS",
"SSS"
],
"result": {
"count": 8,
"item": "antarchy:myrmite"
}
}
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"minecraft:deepslate"
]
}
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"minecraft:stone"
]
}
@@ -43,10 +43,10 @@ public final class AntarchySettings {
private static double bomberExplosionDamage = 8.0D; private static double bomberExplosionDamage = 8.0D;
private static double bomberExplosionRadius = 4.0D; private static double bomberExplosionRadius = 4.0D;
private static double redAntAttackDamage = 3.0D; private static double redAntAttackDamage = 3.0D;
private static double ultimateSwordAttackDamage = 30.0D; private static double ultimateSwordAttackDamage = 34.0D;
private static double ultimatePickaxeAttackDamage = 22.0D; private static double ultimatePickaxeAttackDamage = 24.0D;
private static double ultimateAxeAttackDamage = 38.0D; private static double ultimateAxeAttackDamage = 42.0D;
private static double ultimateShovelAttackDamage = 24.0D; private static double ultimateShovelAttackDamage = 26.0D;
private static double ultimateHoeAttackDamage = 8.0D; private static double ultimateHoeAttackDamage = 8.0D;
private static double ultimateBowAttackDamage = 18.0D; private static double ultimateBowAttackDamage = 18.0D;
private static double ultimateBowPlayerHeal = 8.0D; private static double ultimateBowPlayerHeal = 8.0D;
@@ -55,8 +55,8 @@ public final class AntarchySettings {
private static double ultimateCrossbowAttackDamage = 8.0D; private static double ultimateCrossbowAttackDamage = 8.0D;
private static double ultimateCrossbowChargeSpeedMultiplier = 0.25D; private static double ultimateCrossbowChargeSpeedMultiplier = 0.25D;
private static double ultimateMaceDamageMultiplier = 1.5D; private static double ultimateMaceDamageMultiplier = 1.5D;
private static double battleAxeAttackDamage = 46.0D; private static double battleAxeAttackDamage = 50.0D;
private static double bigBerthaAttackDamage = 55.0D; private static double bigBerthaAttackDamage = 62.0D;
private static double bigBerthaReachBonus = 3.0D; private static double bigBerthaReachBonus = 3.0D;
private static double bigBerthaAttackSpeed = -3.0D; private static double bigBerthaAttackSpeed = -3.0D;
private static double attitudeAdjusterBaseDamage = 47.0D; private static double attitudeAdjusterBaseDamage = 47.0D;
@@ -100,23 +100,23 @@ public final class AntarchySettings {
private static int ultimateMaceEnchantability = 20; private static int ultimateMaceEnchantability = 20;
private static boolean ultimateToolsThreeByThreeEnabled = true; private static boolean ultimateToolsThreeByThreeEnabled = true;
private static boolean ultimateArmorComesEnchanted = true; private static boolean ultimateArmorComesEnchanted = true;
private static int ultimateHelmetArmorValue = 4; private static int ultimateHelmetArmorValue = 6;
private static int ultimateChestplateArmorValue = 9; private static int ultimateChestplateArmorValue = 11;
private static int ultimateLeggingsArmorValue = 7; private static int ultimateLeggingsArmorValue = 9;
private static int ultimateBootsArmorValue = 4; private static int ultimateBootsArmorValue = 6;
private static double ultimateHelmetArmorToughness = 3.0D; private static double ultimateHelmetArmorToughness = 4.5D;
private static double ultimateChestplateArmorToughness = 3.0D; private static double ultimateChestplateArmorToughness = 4.5D;
private static double ultimateLeggingsArmorToughness = 3.0D; private static double ultimateLeggingsArmorToughness = 4.5D;
private static double ultimateBootsArmorToughness = 3.0D; private static double ultimateBootsArmorToughness = 4.5D;
private static ResourceKey<Level> brownAntDestinationDimension = dimensionKey("antarchy:elythia"); private static ResourceKey<Level> brownAntDestinationDimension = dimensionKey("antarchy:elythia");
private static ResourceKey<Level> redAntDestinationDimension = dimensionKey("antarchy:thoraxis"); private static ResourceKey<Level> redAntDestinationDimension = dimensionKey("antarchy:thoraxis");
private static ResourceKey<Level> termiteDestinationDimension = dimensionKey("antarchy:cavaryn"); private static ResourceKey<Level> termiteDestinationDimension = dimensionKey("antarchy:cavaryn");
private static ResourceKey<Level> rainbowAntNonInfinityFallbackDimension = dimensionKey("antarchy:elythia"); private static ResourceKey<Level> rainbowAntNonInfinityFallbackDimension = dimensionKey("antarchy:elythia");
private static double krakenHealth = 1500.0D; private static double krakenHealth = 1800.0D;
private static double krakenAttackDamage = 45.0D; private static double krakenAttackDamage = 45.0D;
private static double octopusBombHealth = 100.0D; private static double octopusBombHealth = 100.0D;
private static double octopusBombAttackDamage = 16.0D; private static double octopusBombAttackDamage = 16.0D;
private static double brutalflyHealth = 400.0D; private static double brutalflyHealth = 500.0D;
private static double brutalflySwipeDamage = 15.0D; private static double brutalflySwipeDamage = 15.0D;
private static double brutalflySpitDamage = 5.0D; private static double brutalflySpitDamage = 5.0D;
private static double mantisHealth = 50.0D; private static double mantisHealth = 50.0D;
@@ -124,7 +124,7 @@ public final class AntarchySettings {
private static double mantisMovementSpeed = 0.42D; private static double mantisMovementSpeed = 0.42D;
private static double mantisFlyingSpeed = 0.77D; private static double mantisFlyingSpeed = 0.77D;
private static boolean mantisIgnoreLightLevel = false; private static boolean mantisIgnoreLightLevel = false;
private static double alphaMantisHealth = 250.0D; private static double alphaMantisHealth = 380.0D;
private static double alphaMantisAttackDamage = 18.0D; private static double alphaMantisAttackDamage = 18.0D;
private static double alphaMantisMovementSpeed = 0.546D; private static double alphaMantisMovementSpeed = 0.546D;
private static double alphaMantisFlyingSpeed = 0.77D; private static double alphaMantisFlyingSpeed = 0.77D;
@@ -145,8 +145,8 @@ public final class AntarchySettings {
private static double squidzookaLaunchVelocity = 2.1D; private static double squidzookaLaunchVelocity = 2.1D;
private static double rpoLauncherCooldownSeconds = 1.0D; private static double rpoLauncherCooldownSeconds = 1.0D;
private static double rpoLauncherLaunchVelocity = 1.8D; private static double rpoLauncherLaunchVelocity = 1.8D;
private static double rpoLauncherExplosionDamage = 30.0D; private static double rpoLauncherExplosionDamage = 34.0D;
private static double rpoLauncherExplosionRadius = 13.5D; private static double rpoLauncherExplosionRadius = 14.0D;
private static double sizeRayCooldownSeconds = 1.0D; private static double sizeRayCooldownSeconds = 1.0D;
private static boolean invertProjectilesFromInvertedPlayers = false; private static boolean invertProjectilesFromInvertedPlayers = false;
private static boolean gravityGunEnabled = true; private static boolean gravityGunEnabled = true;
@@ -179,26 +179,26 @@ public final class AntarchySettings {
private static double dreamSandEffectDurationSeconds = 7.0D; private static double dreamSandEffectDurationSeconds = 7.0D;
private static double dreamSandFallingBlockGravityMultiplier = 0.4D; private static double dreamSandFallingBlockGravityMultiplier = 0.4D;
private static boolean ichorWitherEnabled = true; private static boolean ichorWitherEnabled = true;
private static int nightmareHelmetArmorValue = 3; private static int nightmareHelmetArmorValue = 4;
private static int nightmareChestplateArmorValue = 8; private static int nightmareChestplateArmorValue = 9;
private static int nightmareLeggingsArmorValue = 6; private static int nightmareLeggingsArmorValue = 7;
private static int nightmareBootsArmorValue = 3; private static int nightmareBootsArmorValue = 4;
private static double nightmareHelmetArmorToughness = 3.0D; private static double nightmareHelmetArmorToughness = 4.0D;
private static double nightmareChestplateArmorToughness = 3.0D; private static double nightmareChestplateArmorToughness = 4.0D;
private static double nightmareLeggingsArmorToughness = 3.0D; private static double nightmareLeggingsArmorToughness = 4.0D;
private static double nightmareBootsArmorToughness = 3.0D; private static double nightmareBootsArmorToughness = 4.0D;
private static double nightmareHelmetDoubleDamageChance = 0.04D; private static double nightmareHelmetDoubleDamageChance = 0.05D;
private static double nightmareChestplateDoubleDamageChance = 0.06D; private static double nightmareChestplateDoubleDamageChance = 0.07D;
private static double nightmareLeggingsDoubleDamageChance = 0.05D; private static double nightmareLeggingsDoubleDamageChance = 0.07D;
private static double nightmareBootsDoubleDamageChance = 0.03D; private static double nightmareBootsDoubleDamageChance = 0.05D;
private static double nightmareSwordBaseDamage = 15.0D; private static double nightmareSwordBaseDamage = 18.0D;
private static double nightmareSwordScalingFactor = 1.5D; private static double nightmareSwordScalingFactor = 1.5D;
private static boolean basiliskPetrifyingGazeEnabled = true; private static boolean basiliskPetrifyingGazeEnabled = true;
private static int basiliskSpawnMaxLightLevel = 5; private static int basiliskSpawnMaxLightLevel = 5;
private static double basiliskHealth = 150.0D; private static double basiliskHealth = 320.0D;
private static double basiliskAttackDamage = 36.0D; private static double basiliskAttackDamage = 36.0D;
private static double basiliskMovementSpeed = 0.18D; private static double basiliskMovementSpeed = 0.18D;
private static double basiliskArmor = 6.0D; private static double basiliskArmor = 6.0D;
@@ -219,13 +219,13 @@ public final class AntarchySettings {
private static int basiliskPreyPetrifyTicks = 200; private static int basiliskPreyPetrifyTicks = 200;
private static boolean diamondMinecartEnabled = true; private static boolean diamondMinecartEnabled = true;
private static boolean diamondMinecartPlacesRails = true; private static boolean diamondMinecartPlacesRails = true;
private static double diamondMinecartCruiseSpeed = 0.6D; private static double diamondMinecartCruiseSpeed = 0.0D;
private static double diamondMinecartMaxSpeed = 1.0D; private static double diamondMinecartMaxSpeed = 0.55D;
private static double diamondMinecartAcceleration = 0.03D; private static double diamondMinecartAcceleration = 0.02D;
private static double diamondMinecartDeceleration = 0.04D; private static double diamondMinecartDeceleration = 0.05D;
private static double diamondMinecartCoastDeceleration = 0.01D; private static double diamondMinecartCoastDeceleration = 0.02D;
private static boolean diamondMinecartMobDamageEnabled = true; private static boolean diamondMinecartMobDamageEnabled = false;
private static double diamondMinecartMaxMobDamage = 8.0D; private static double diamondMinecartMaxMobDamage = 4.0D;
private static boolean dreadHallucinationSoundsEnabled = true; private static boolean dreadHallucinationSoundsEnabled = true;
private static double dreadHallucinationSoundMinInterval = 3.0D; private static double dreadHallucinationSoundMinInterval = 3.0D;
private static double dreadHallucinationSoundMaxInterval = 10.0D; private static double dreadHallucinationSoundMaxInterval = 10.0D;
@@ -272,7 +272,7 @@ public final class AntarchySettings {
private static final int reverieAmbientTargetMaxAgeTicks = 40; private static final int reverieAmbientTargetMaxAgeTicks = 40;
private static final int reverieAmbientPulseIntervalMinTicks = 12; private static final int reverieAmbientPulseIntervalMinTicks = 12;
private static final int reverieAmbientPulseIntervalMaxTicks = 19; private static final int reverieAmbientPulseIntervalMaxTicks = 19;
private static double emperorScorpionHealth = 300.0D; private static double emperorScorpionHealth = 420.0D;
private static double emperorScorpionAttackDamage = 28.0D; private static double emperorScorpionAttackDamage = 28.0D;
private static double emperorScorpionMovementSpeed = 0.384D; private static double emperorScorpionMovementSpeed = 0.384D;
private static double emperorScorpionArmor = 22.0D; private static double emperorScorpionArmor = 22.0D;
@@ -306,7 +306,7 @@ public final class AntarchySettings {
private static double jumpyBugPounceDamage = 12.0D; private static double jumpyBugPounceDamage = 12.0D;
private static double jumpyBugCamouflageAlpha = 0.18D; private static double jumpyBugCamouflageAlpha = 0.18D;
private static double brutalflyArmor = 10.0D; private static double brutalflyArmor = 10.0D;
private static double brutalflyArmorToughness = 4.0D; private static double brutalflyArmorToughness = 5.0D;
private static double brutalflyKnockbackResistance = 0.7D; private static double brutalflyKnockbackResistance = 0.7D;
private static double brutalflyMovementSpeed = 0.34D; private static double brutalflyMovementSpeed = 0.34D;
private static double brutalflyFlyingSpeed = 0.55D; private static double brutalflyFlyingSpeed = 0.55D;
@@ -326,25 +326,25 @@ public final class AntarchySettings {
private static double toreterrorDamageRange = 25.0D; private static double toreterrorDamageRange = 25.0D;
private static double brutalflyDamageRange = 25.0D; private static double brutalflyDamageRange = 25.0D;
private static double alphaMantisDamageRange = 25.0D; private static double alphaMantisDamageRange = 25.0D;
private static float krakenLightningDamagePhaseOne = 6.0F; private static float krakenLightningDamagePhaseOne = 12.0F;
private static double lucidHealth = 30.0D; private static double lucidHealth = 70.0D;
private static double lucidAttackDamage = 4.0D; private static double lucidAttackDamage = 4.0D;
private static double lucidMovementSpeed = 0.22D; private static double lucidMovementSpeed = 0.22D;
private static double lucidFlyingSpeed = 0.35D; private static double lucidFlyingSpeed = 0.35D;
private static double lucidKnockbackResistance = 0.5D; private static double lucidKnockbackResistance = 0.5D;
private static double missileSquidHealth = 50.0D; private static double missileSquidHealth = 60.0D;
private static double missileSquidAttackDamage = 6.0D; private static double missileSquidAttackDamage = 9.0D;
private static double missileSquidMovementSpeed = 0.84D; private static double missileSquidMovementSpeed = 0.84D;
private static double missileSquidFlyingSpeed = 0.84D; private static double missileSquidFlyingSpeed = 0.84D;
private static double missileSquidKnockbackResistance = 0.15D; private static double missileSquidKnockbackResistance = 0.15D;
private static double molewormHealth = 8.0D; private static double molewormHealth = 8.0D;
private static double molewormAttackDamage = 1.0D; private static double molewormAttackDamage = 1.0D;
private static double molewormMovementSpeed = 0.25D; private static double molewormMovementSpeed = 0.25D;
private static double triffidHealth = 80.0D; private static double triffidHealth = 160.0D;
private static double triffidAttackDamage = 10.0D; private static double triffidAttackDamage = 10.0D;
private static double triffidGrabDamage = 15.0D; private static double triffidGrabDamage = 15.0D;
private static int triffidSweepHitCooldownTicks = 10; private static int triffidSweepHitCooldownTicks = 10;
private static double molevoreHealth = 60.0D; private static double molevoreHealth = 140.0D;
private static double molevoreAttackDamage = 10.0D; private static double molevoreAttackDamage = 10.0D;
private static double molevoreMovementSpeed = 0.27D; private static double molevoreMovementSpeed = 0.27D;
private static double molevoreArmor = 6.0D; private static double molevoreArmor = 6.0D;
@@ -357,7 +357,7 @@ public final class AntarchySettings {
private static double molevoreBreakRange = 1.8D; private static double molevoreBreakRange = 1.8D;
private static double molevoreBreakVerticalRange = 2.2D; private static double molevoreBreakVerticalRange = 2.2D;
private static double molevoreBreakHalfWidth = 1.1D; private static double molevoreBreakHalfWidth = 1.1D;
private static double nightmareHealth = 180.0D; private static double nightmareHealth = 380.0D;
private static double nightmareAttackDamage = 16.0D; private static double nightmareAttackDamage = 16.0D;
private static double nightmareMovementSpeed = 0.28D; private static double nightmareMovementSpeed = 0.28D;
private static double nightmareFlyingSpeed = 0.3D; private static double nightmareFlyingSpeed = 0.3D;
@@ -389,7 +389,7 @@ public final class AntarchySettings {
private static int bigBerthaBasiliskParalyzeDurationTicks = 80; private static int bigBerthaBasiliskParalyzeDurationTicks = 80;
private static int bigBerthaKrakenSlowTicks = 80; private static int bigBerthaKrakenSlowTicks = 80;
private static double ductTapeRepairPercentPerUse = 0.25D; private static double ductTapeRepairPercentPerUse = 0.25D;
private static double ultimateArmorKnockbackResistance = 0.1D; private static double ultimateArmorKnockbackResistance = 0.15D;
private static double nightmareArmorKnockbackResistance = 0.1D; private static double nightmareArmorKnockbackResistance = 0.1D;
private static double primordialArmorKnockbackPerPiece = 0.5D; private static double primordialArmorKnockbackPerPiece = 0.5D;
private static double mogglesVisionRadius = 20.0D; private static double mogglesVisionRadius = 20.0D;
@@ -405,18 +405,18 @@ public final class AntarchySettings {
private static int bloodCrystalAppleShieldCount = 2; private static int bloodCrystalAppleShieldCount = 2;
private static int bloodCrystalAppleDurationTicks = 2400; private static int bloodCrystalAppleDurationTicks = 2400;
private static int bloodCrystalAppleShieldRechargeTicks = 600; private static int bloodCrystalAppleShieldRechargeTicks = 600;
private static int bloodCrystalHardMaxShields = 8; private static int bloodCrystalHardMaxShields = 10;
// Armor stats (iron defense, gold durability, 0 toughness by default) // Armor stats (iron defense, gold durability, 0 toughness by default)
private static int bloodCrystalHelmetDefense = 2; private static int bloodCrystalHelmetDefense = 3;
private static int bloodCrystalChestplateDefense = 6; private static int bloodCrystalChestplateDefense = 7;
private static int bloodCrystalLeggingsDefense = 5; private static int bloodCrystalLeggingsDefense = 6;
private static int bloodCrystalBootsDefense = 2; private static int bloodCrystalBootsDefense = 3;
private static double bloodCrystalArmorToughness = 0.0; private static double bloodCrystalArmorToughness = 2.0D;
private static int bloodCrystalHelmetDurability = 77; private static int bloodCrystalHelmetDurability = 77;
private static int bloodCrystalChestplateDurability = 112; private static int bloodCrystalChestplateDurability = 112;
private static int bloodCrystalLeggingsDurability = 105; private static int bloodCrystalLeggingsDurability = 105;
private static int bloodCrystalBootsDurability = 91; private static int bloodCrystalBootsDurability = 91;
private static double toreterrorHealth = 300.0D; private static double toreterrorHealth = 450.0D;
private static double toreterrorJumpAttackDamage = 14.0D; private static double toreterrorJumpAttackDamage = 14.0D;
private static double toreterrorJumpAttackKnockback = 2.5D; private static double toreterrorJumpAttackKnockback = 2.5D;
private static double toreterrorSpinDamage = 6.0D; private static double toreterrorSpinDamage = 6.0D;
@@ -441,12 +441,29 @@ public final class AntarchySettings {
private static double cheepHealth = 8.0D; private static double cheepHealth = 8.0D;
private static double cheepAttackDamage = 3.0D; private static double cheepAttackDamage = 3.0D;
private static double dorrieHealth = 60.0D; private static double dorrieHealth = 60.0D;
private static double herculesBeetleHealth = 500.0D; private static double herculesBeetleHealth = 650.0D;
private static double herculesBeetleAttackDamage = 30.0D; private static double herculesBeetleAttackDamage = 30.0D;
private static double herculesBeetleChargeDamage = 40.0D; private static double herculesBeetleChargeDamage = 40.0D;
private static double ouranwoodDeerHealth = 20.0D; private static double ouranwoodDeerHealth = 20.0D;
private static double glimmerHealth = 20.0D; private static double glimmerHealth = 20.0D;
private static double lucidArmorToughness = 2.0D;
private static double triffidArmorToughness = 3.0D;
private static double basiliskArmorToughness = 5.0D;
private static double nightmareMobArmorToughness = 5.0D;
private static double alphaMantisArmorToughness = 4.0D;
private static double herculesBeetleArmorToughness = 4.0D;
private static double krakenArmorToughness = 6.0D;
private static double nightmareMobArmor = 10.0D;
private static double bossMagicPerHitCapFraction = 0.12D;
private static int bossMagicWindowTicks = 20;
private static double bossMagicWindowCapFraction = 0.20D;
private static double bossMagicWardReductionFraction = 0.5D;
private static int bossMagicWardDurationTicks = 60;
private static int bossMagicWardTriggerBreaches = 2;
private static java.util.List<String> magicBurstDamageNamespaces = new java.util.ArrayList<>(java.util.List.of("irons_spellbooks"));
private AntarchySettings() { private AntarchySettings() {
} }
@@ -2439,4 +2456,21 @@ public final class AntarchySettings {
public static void setOuranwoodDeerHealth(double v) { ouranwoodDeerHealth = v; } public static void setOuranwoodDeerHealth(double v) { ouranwoodDeerHealth = v; }
public static double glimmerHealth() { return glimmerHealth; } public static double glimmerHealth() { return glimmerHealth; }
public static void setGlimmerHealth(double v) { glimmerHealth = v; } public static void setGlimmerHealth(double v) { glimmerHealth = v; }
public static double lucidArmorToughness() { return lucidArmorToughness; }
public static double triffidArmorToughness() { return triffidArmorToughness; }
public static double basiliskArmorToughness() { return basiliskArmorToughness; }
public static double nightmareMobArmorToughness() { return nightmareMobArmorToughness; }
public static double alphaMantisArmorToughness() { return alphaMantisArmorToughness; }
public static double herculesBeetleArmorToughness() { return herculesBeetleArmorToughness; }
public static double krakenArmorToughness() { return krakenArmorToughness; }
public static double nightmareMobArmor() { return nightmareMobArmor; }
public static double bossMagicPerHitCapFraction() { return bossMagicPerHitCapFraction; }
public static int bossMagicWindowTicks() { return bossMagicWindowTicks; }
public static double bossMagicWindowCapFraction() { return bossMagicWindowCapFraction; }
public static double bossMagicWardReductionFraction() { return bossMagicWardReductionFraction; }
public static int bossMagicWardDurationTicks() { return bossMagicWardDurationTicks; }
public static int bossMagicWardTriggerBreaches() { return bossMagicWardTriggerBreaches; }
public static java.util.List<String> magicBurstDamageNamespaces() { return magicBurstDamageNamespaces; }
} }
@@ -54,6 +54,8 @@ public final class AntarchyTags {
public static final class DamageType { public static final class DamageType {
public static final TagKey<net.minecraft.world.damagesource.DamageType> BYPASSES_BLOODGLASS = public static final TagKey<net.minecraft.world.damagesource.DamageType> BYPASSES_BLOODGLASS =
TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "bypasses_bloodglass")); TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "bypasses_bloodglass"));
public static final TagKey<net.minecraft.world.damagesource.DamageType> ANTARCHY_MAGIC_BURST =
TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "antarchy_magic_burst"));
private DamageType() { private DamageType() {
} }
@@ -61,6 +63,7 @@ public final class AntarchyTags {
public static final class Entities { public static final class Entities {
public static final TagKey<EntityType<?>> BASILISK_PREY = TagKey.create(Registries.ENTITY_TYPE, id("basilisk_prey")); public static final TagKey<EntityType<?>> BASILISK_PREY = TagKey.create(Registries.ENTITY_TYPE, id("basilisk_prey"));
public static final TagKey<EntityType<?>> SPELL_RESISTANT_BOSS = TagKey.create(Registries.ENTITY_TYPE, id("spell_resistant_boss"));
public static final TagKey<EntityType<?>> DREAM_SAND_LOW_GRAVITY_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("dream_sand_low_gravity_blacklist")); public static final TagKey<EntityType<?>> DREAM_SAND_LOW_GRAVITY_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("dream_sand_low_gravity_blacklist"));
public static final TagKey<EntityType<?>> GRAVITY_GUN_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("gravity_gun_blacklist")); public static final TagKey<EntityType<?>> GRAVITY_GUN_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("gravity_gun_blacklist"));
public static final TagKey<EntityType<?>> INVERTED_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("inverted_immune")); public static final TagKey<EntityType<?>> INVERTED_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("inverted_immune"));
@@ -1,11 +1,29 @@
package com.craisinlord.antarchy.content.boss; package com.craisinlord.antarchy.content.boss;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchyTags;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.Mob;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public final class BossCombatUtil { public final class BossCombatUtil {
private BossCombatUtil() {} private BossCombatUtil() {}
private static final Map<UUID, MagicWindowState> MAGIC_WINDOWS = new HashMap<>();
private static final Map<UUID, Long> MAGIC_WARD_EXPIRY_TICK = new HashMap<>();
private static final Map<UUID, Integer> MAGIC_WARD_BREACH_COUNTS = new HashMap<>();
private static final class MagicWindowState {
long windowStartTick;
float accumulated;
}
public static boolean isOutOfDamageRange(Mob boss, double range) { public static boolean isOutOfDamageRange(Mob boss, double range) {
if (range <= 0.0D) { if (range <= 0.0D) {
return false; return false;
@@ -19,4 +37,57 @@ public final class BossCombatUtil {
boss.setHealth(halfHealth); boss.setHealth(halfHealth);
} }
} }
public static boolean isMagicBurstSource(DamageSource source) {
if (source.is(AntarchyTags.DamageType.ANTARCHY_MAGIC_BURST)) {
return true;
}
ResourceLocation typeId = source.typeHolder().unwrapKey().map(ResourceKey::location).orElse(null);
if (typeId == null) {
return false;
}
for (String namespace : AntarchySettings.magicBurstDamageNamespaces()) {
if (typeId.getNamespace().equals(namespace)) {
return true;
}
}
return false;
}
public static float trackMagicBurstWindow(LivingEntity boss, float amount, int windowTicks) {
long now = boss.level().getGameTime();
MagicWindowState state = MAGIC_WINDOWS.computeIfAbsent(boss.getUUID(), id -> new MagicWindowState());
if (now - state.windowStartTick >= windowTicks) {
state.windowStartTick = now;
state.accumulated = 0.0F;
}
state.accumulated += amount;
return state.accumulated;
}
public static float remainingWindowBudget(LivingEntity boss, float windowCap) {
MagicWindowState state = MAGIC_WINDOWS.get(boss.getUUID());
if (state == null) {
return windowCap;
}
long now = boss.level().getGameTime();
if (now - state.windowStartTick >= AntarchySettings.bossMagicWindowTicks()) {
return windowCap;
}
return Math.max(0.0F, windowCap - state.accumulated);
}
public static boolean isMagicWarded(LivingEntity boss) {
Long expiryTick = MAGIC_WARD_EXPIRY_TICK.get(boss.getUUID());
return expiryTick != null && boss.level().getGameTime() < expiryTick;
}
public static void triggerMagicWard(LivingEntity boss, int durationTicks) {
MAGIC_WARD_EXPIRY_TICK.put(boss.getUUID(), boss.level().getGameTime() + durationTicks);
MAGIC_WARD_BREACH_COUNTS.remove(boss.getUUID());
}
public static int recordMagicWindowBreach(LivingEntity boss) {
return MAGIC_WARD_BREACH_COUNTS.merge(boss.getUUID(), 1, Integer::sum);
}
} }
@@ -68,6 +68,7 @@ public class AlphaMantisEntity extends MantisEntity {
.add(Attributes.FLYING_SPEED, AntarchySettings.alphaMantisFlyingSpeed()) .add(Attributes.FLYING_SPEED, AntarchySettings.alphaMantisFlyingSpeed())
.add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.FOLLOW_RANGE, 48.0D)
.add(Attributes.ARMOR, 8.0D) .add(Attributes.ARMOR, 8.0D)
.add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.alphaMantisArmorToughness())
.add(Attributes.KNOCKBACK_RESISTANCE, 0.8D); .add(Attributes.KNOCKBACK_RESISTANCE, 0.8D);
} }
@@ -81,6 +82,9 @@ public class AlphaMantisEntity extends MantisEntity {
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
float preHealth = this.getHealth(); float preHealth = this.getHealth();
boolean hurt = super.hurt(source, amount); boolean hurt = super.hurt(source, amount);
if (hurt) { if (hurt) {
@@ -185,6 +185,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity {
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
if (this.isHardenedStateActive()) { if (this.isHardenedStateActive()) {
return false; return false;
} }
@@ -203,7 +203,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
.add(Attributes.FLYING_SPEED, FLIGHT_SPEED) .add(Attributes.FLYING_SPEED, FLIGHT_SPEED)
.add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.FOLLOW_RANGE, 48.0D)
.add(Attributes.KNOCKBACK_RESISTANCE, 0.9D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.9D)
.add(Attributes.ARMOR, 12.0D); .add(Attributes.ARMOR, 12.0D)
.add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.herculesBeetleArmorToughness());
} }
@Override @Override
@@ -239,10 +240,17 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
@Override @Override
public boolean canUse() { public boolean canUse() {
return !HerculesBeetleEntity.this.isKnockedDown() return !HerculesBeetleEntity.this.isKnockedDown()
&& !HerculesBeetleEntity.this.isLeashed()
&& !HerculesBeetleEntity.this.isVehicle() && !HerculesBeetleEntity.this.isVehicle()
&& !HerculesBeetleEntity.this.isInBusyAnimation() && !HerculesBeetleEntity.this.isInBusyAnimation()
&& super.canUse(); && super.canUse();
} }
@Override
public boolean canContinueToUse() {
return !HerculesBeetleEntity.this.isLeashed()
&& super.canContinueToUse();
}
}); });
this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 16.0F));
this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(4, new RandomLookAroundGoal(this));
@@ -376,6 +384,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
if (this.isKnockedDown()) { if (this.isKnockedDown()) {
this.tickKnockedDown(); this.tickKnockedDown();
} else if (this.isLeashed()) {
this.getNavigation().stop();
this.setTarget(null);
this.updateAmbientAnimation();
} else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) { } else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) {
this.tickCharge(); this.tickCharge();
} else if (this.isInBusyAnimation()) { } else if (this.isInBusyAnimation()) {
@@ -593,6 +605,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
if (source.is(DamageTypeTags.IS_FALL)) { if (source.is(DamageTypeTags.IS_FALL)) {
return false; return false;
} }
@@ -1429,6 +1444,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
return null; return null;
} }
@Override
public boolean canBeLeashed() {
return this.isTame() && super.canBeLeashed();
}
private final class HerculesCombatGoal extends Goal { private final class HerculesCombatGoal extends Goal {
HerculesCombatGoal() { HerculesCombatGoal() {
this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK));
@@ -1437,6 +1457,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
@Override @Override
public boolean canUse() { public boolean canUse() {
return !HerculesBeetleEntity.this.isKnockedDown() return !HerculesBeetleEntity.this.isKnockedDown()
&& !HerculesBeetleEntity.this.isLeashed()
&& !HerculesBeetleEntity.this.isVehicle() && !HerculesBeetleEntity.this.isVehicle()
&& HerculesBeetleEntity.this.getTarget() != null && HerculesBeetleEntity.this.getTarget() != null
&& HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget()); && HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget());
@@ -1448,6 +1469,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl
return target != null return target != null
&& target.isAlive() && target.isAlive()
&& !HerculesBeetleEntity.this.isKnockedDown() && !HerculesBeetleEntity.this.isKnockedDown()
&& !HerculesBeetleEntity.this.isLeashed()
&& !HerculesBeetleEntity.this.isVehicle() && !HerculesBeetleEntity.this.isVehicle()
&& HerculesBeetleEntity.this.canAttack(target); && HerculesBeetleEntity.this.canAttack(target);
} }
@@ -270,6 +270,9 @@ public class ToreterrorEntity extends Monster implements GeoEntity {
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
if (source.is(net.minecraft.world.damagesource.DamageTypes.DROWN)) return false; if (source.is(net.minecraft.world.damagesource.DamageTypes.DROWN)) return false;
if (source.is(DamageTypeTags.IS_PROJECTILE)) { if (source.is(DamageTypeTags.IS_PROJECTILE)) {
amount *= (float) AntarchySettings.toreterrorProjectileDamageMultiplier(); amount *= (float) AntarchySettings.toreterrorProjectileDamageMultiplier();
@@ -99,7 +99,8 @@ public class TriffidEntity extends Monster implements GeoEntity {
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.triffidAttackDamage()) .add(Attributes.ATTACK_DAMAGE, AntarchySettings.triffidAttackDamage())
.add(Attributes.FOLLOW_RANGE, FOLLOW_RANGE) .add(Attributes.FOLLOW_RANGE, FOLLOW_RANGE)
.add(Attributes.KNOCKBACK_RESISTANCE, 1.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 1.0D)
.add(Attributes.MOVEMENT_SPEED, 0.0D); .add(Attributes.MOVEMENT_SPEED, 0.0D)
.add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.triffidArmorToughness());
} }
@Override @Override
@@ -4,6 +4,7 @@ import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchySoundEvents;
import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchyTags;
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@@ -112,7 +113,16 @@ public class BasiliskEntity extends Monster implements GeoEntity {
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.basiliskAttackDamage()) .add(Attributes.ATTACK_DAMAGE, AntarchySettings.basiliskAttackDamage())
.add(Attributes.ARMOR, AntarchySettings.basiliskArmor()) .add(Attributes.ARMOR, AntarchySettings.basiliskArmor())
.add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.basiliskKnockbackResistance()) .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.basiliskKnockbackResistance())
.add(Attributes.FOLLOW_RANGE, AntarchySettings.basiliskFollowRange()); .add(Attributes.FOLLOW_RANGE, AntarchySettings.basiliskFollowRange())
.add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.basiliskArmorToughness());
}
@Override
public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
return super.hurt(source, amount);
} }
@Override @Override
@@ -370,6 +370,9 @@ public class BrutalflyEntity extends Monster implements GeoEntity {
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
if (this.postCocoonInvulnerableTicks > 0) { if (this.postCocoonInvulnerableTicks > 0) {
return false; return false;
} }
@@ -153,7 +153,8 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO
.add(Attributes.FLYING_SPEED, AntarchySettings.krakenFlyingSpeed()) .add(Attributes.FLYING_SPEED, AntarchySettings.krakenFlyingSpeed())
.add(Attributes.FOLLOW_RANGE, AntarchySettings.krakenFollowRange()) .add(Attributes.FOLLOW_RANGE, AntarchySettings.krakenFollowRange())
.add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.krakenKnockbackResistance()) .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.krakenKnockbackResistance())
.add(Attributes.ARMOR, AntarchySettings.krakenArmor()); .add(Attributes.ARMOR, AntarchySettings.krakenArmor())
.add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.krakenArmorToughness());
} }
public static boolean canSpawn(EntityType<KrakenEntity> entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { public static boolean canSpawn(EntityType<KrakenEntity> entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
@@ -365,6 +366,9 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
if (source.is(DamageTypeTags.IS_FIRE) if (source.is(DamageTypeTags.IS_FIRE)
|| source.is(DamageTypes.IN_WALL) || source.is(DamageTypes.IN_WALL)
|| source.is(DamageTypes.LIGHTNING_BOLT) || source.is(DamageTypes.LIGHTNING_BOLT)
@@ -101,7 +101,8 @@ public class LucidEntity extends Monster implements GeoEntity {
.add(Attributes.MOVEMENT_SPEED, AntarchySettings.lucidMovementSpeed()) .add(Attributes.MOVEMENT_SPEED, AntarchySettings.lucidMovementSpeed())
.add(Attributes.FLYING_SPEED, AntarchySettings.lucidFlyingSpeed()) .add(Attributes.FLYING_SPEED, AntarchySettings.lucidFlyingSpeed())
.add(Attributes.FOLLOW_RANGE, 40.0D) .add(Attributes.FOLLOW_RANGE, 40.0D)
.add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.lucidKnockbackResistance()); .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.lucidKnockbackResistance())
.add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.lucidArmorToughness());
} }
@Override @Override
@@ -4,6 +4,7 @@ import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchySoundEvents;
import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchyTags;
import com.craisinlord.antarchy.content.boss.BossCombatUtil;
import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@@ -243,7 +244,8 @@ public class NightmareEntity extends Monster implements GeoEntity {
.add(Attributes.FLYING_SPEED, 0.375D) .add(Attributes.FLYING_SPEED, 0.375D)
.add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.FOLLOW_RANGE, 48.0D)
.add(Attributes.KNOCKBACK_RESISTANCE, 0.75D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.75D)
.add(Attributes.ARMOR, 8.0D); .add(Attributes.ARMOR, AntarchySettings.nightmareMobArmor())
.add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.nightmareMobArmorToughness());
} }
@Override @Override
@@ -421,6 +423,9 @@ public class NightmareEntity extends Monster implements GeoEntity {
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) {
amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction());
}
if (this.isPhaseTransitioning() || this.portalTravelTicks > 0 || this.portalAttackTicks > 0) { if (this.isPhaseTransitioning() || this.portalTravelTicks > 0 || this.portalAttackTicks > 0) {
return false; return false;
} }
@@ -0,0 +1,74 @@
package com.craisinlord.antarchy.content.gravity;
import com.craisinlord.antarchy.content.AntarchyObjects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
public final class AntarchyMountedGravityHelper {
private static final AntarchyGravityTransition STACK_TRANSITION = new AntarchyGravityTransition(12);
private AntarchyMountedGravityHelper() {
}
public static void syncConnectedStack(Entity entity) {
if (entity == null || entity.level().isClientSide()) {
return;
}
syncRootStack(entity.getRootVehicle(), null);
}
public static void syncConnectedStackIgnoring(Entity entity, LivingEntity ignoredEffectSource) {
if (entity == null || entity.level().isClientSide()) {
return;
}
syncRootStack(entity.getRootVehicle(), ignoredEffectSource);
}
public static void syncSeparatedStacks(Entity previousVehicle, Entity detachedEntity) {
if (previousVehicle != null && !previousVehicle.level().isClientSide()) {
syncRootStack(previousVehicle.getRootVehicle(), null);
}
if (detachedEntity != null && !detachedEntity.level().isClientSide()) {
syncRootStack(detachedEntity.getRootVehicle(), null);
}
}
private static void syncRootStack(Entity root, LivingEntity ignoredEffectSource) {
boolean shouldInvert = stackHasInvertedEffect(root, ignoredEffectSource);
applyGravityState(root, shouldInvert);
for (Entity passenger : root.getIndirectPassengers()) {
applyGravityState(passenger, shouldInvert);
}
}
private static boolean stackHasInvertedEffect(Entity root, LivingEntity ignoredEffectSource) {
if (hasInvertedEffect(root, ignoredEffectSource)) {
return true;
}
for (Entity passenger : root.getIndirectPassengers()) {
if (hasInvertedEffect(passenger, ignoredEffectSource)) {
return true;
}
}
return false;
}
private static boolean hasInvertedEffect(Entity entity, LivingEntity ignoredEffectSource) {
return entity instanceof LivingEntity living
&& living != ignoredEffectSource
&& living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get());
}
private static void applyGravityState(Entity entity, boolean shouldInvert) {
if (shouldInvert) {
if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP) {
AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, STACK_TRANSITION);
}
return;
}
if (AntarchyGravityApi.isGravityForced(entity)) {
AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, STACK_TRANSITION);
}
}
}
@@ -356,7 +356,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
} }
private void applyHerculesHit(Player attacker, LivingEntity target, ServerLevel level) { private void applyHerculesHit(Player attacker, LivingEntity target, ServerLevel level) {
float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * 0.5D); float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * 0.6D);
Vec3 push = target.position().subtract(attacker.position()).multiply(1.0D, 0.0D, 1.0D); Vec3 push = target.position().subtract(attacker.position()).multiply(1.0D, 0.0D, 1.0D);
if (push.lengthSqr() < 1.0E-4D) { if (push.lengthSqr() < 1.0E-4D) {
push = attacker.getLookAngle().multiply(1.0D, 0.0D, 1.0D); push = attacker.getLookAngle().multiply(1.0D, 0.0D, 1.0D);
@@ -35,6 +35,14 @@ public class DiamondMinecartItem extends Item {
@Override @Override
public void appendHoverText(ItemStack stack, Item.TooltipContext context, List<Component> tooltipComponents, TooltipFlag tooltipFlag) { public void appendHoverText(ItemStack stack, Item.TooltipContext context, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); super.appendHoverText(stack, context, tooltipComponents, tooltipFlag);
if (!AntarchySettings.diamondMinecartEnabled()) {
tooltipComponents.add(Component.literal("Currently behaves like a regular minecart.").withStyle(ChatFormatting.GRAY));
return;
}
tooltipComponents.add(Component.literal("Hold W to accelerate and S to brake.").withStyle(ChatFormatting.GRAY));
if (AntarchySettings.diamondMinecartPlacesRails()) {
tooltipComponents.add(Component.literal("Places rails from your inventory while ridden.").withStyle(ChatFormatting.DARK_AQUA));
}
} }
@Override @Override
@@ -0,0 +1,34 @@
package com.craisinlord.antarchy.mixins.gravity;
import com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper;
import net.minecraft.world.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(Entity.class)
public abstract class EntityMountedGravityMixin {
@Unique
private Entity antarchy$previousVehicle;
@Inject(method = "startRiding(Lnet/minecraft/world/entity/Entity;Z)Z", at = @At("RETURN"))
private void antarchy$syncMountedStack(Entity vehicle, boolean force, CallbackInfoReturnable<Boolean> cir) {
if (cir.getReturnValueZ()) {
AntarchyMountedGravityHelper.syncConnectedStack((Entity) (Object) this);
}
}
@Inject(method = "stopRiding", at = @At("HEAD"))
private void antarchy$capturePreviousVehicle(CallbackInfo ci) {
this.antarchy$previousVehicle = ((Entity) (Object) this).getVehicle();
}
@Inject(method = "stopRiding", at = @At("TAIL"))
private void antarchy$syncDismountedStacks(CallbackInfo ci) {
AntarchyMountedGravityHelper.syncSeparatedStacks(this.antarchy$previousVehicle, (Entity) (Object) this);
this.antarchy$previousVehicle = null;
}
}
Whitespace-only changes.
Whitespace-only changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

@@ -0,0 +1,12 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[
{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]},
{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":5}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":4},{"type":"minecraft:item","name":"minecraft:golden_apple","weight":5},
{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":12}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency"]}]}
]}],"random_sequence":"antarchy:chests/queen_castle/generic"}
@@ -0,0 +1,12 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":7,"max":10},"entries":[
{"type":"minecraft:item","name":"antarchy:ultimate_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:ultimate_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:ultimate_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:ultimate_boots","weight":2},
{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":5},{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":8},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":10,"max":24}}]},
{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}}]},
{"type":"minecraft:item","name":"antarchy:potent_nyxite","weight":4},{"type":"minecraft:item","name":"minecraft:enchanted_golden_apple","weight":2},
{"type":"minecraft:item","name":"minecraft:book","weight":14,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency","minecraft:fortune"]}]},
{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":6,"max":16}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1}
]}],"random_sequence":"antarchy:chests/queen_castle/treasure"}
@@ -0,0 +1,12 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[
{"type":"minecraft:item","name":"minecraft:arrow","weight":18,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":12,"max":32}}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:bow","weight":10,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":6,"max":18},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"minecraft:iron_sword","weight":8},{"type":"minecraft:item","name":"minecraft:shield","weight":8},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":10}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]},
{"type":"minecraft:item","name":"antarchy:scorpion_whip","weight":3},{"type":"minecraft:item","name":"minecraft:golden_apple","weight":3},
{"type":"minecraft:item","name":"minecraft:potion","weight":7,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:book","weight":5,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness"]}]}
]}],"random_sequence":"antarchy:chests/scorpion_arena/generic"}
@@ -0,0 +1,13 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[
{"type":"minecraft:item","name":"antarchy:scorpion_whip","weight":8},{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":4},
{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2},
{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":3},{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":18}}]},
{"type":"minecraft:item","name":"antarchy:nyxite","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]},
{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"minecraft:book","weight":8,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness","minecraft:protection"]}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":6,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:potion","weight":6,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1}
]}],"random_sequence":"antarchy:chests/scorpion_arena/treasure"}
@@ -0,0 +1,12 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[
{"type":"minecraft:item","name":"minecraft:arrow","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":10,"max":28}}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:iron_pickaxe","weight":10},{"type":"minecraft:item","name":"minecraft:iron_sword","weight":8},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":12}}]},
{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]},
{"type":"minecraft:item","name":"antarchy:lucid_eye","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]},
{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:book","weight":6,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency"]}]}
]}],"random_sequence":"antarchy:chests/underside_ruins/generic"}
@@ -0,0 +1,13 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[
{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":8},{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":3},
{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2},
{"type":"minecraft:item","name":"antarchy:potent_nyxite","weight":4},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":13,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency","minecraft:protection"]}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":7,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:potion","weight":7,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1}
]}],"random_sequence":"antarchy:chests/underside_ruins/treasure"}
@@ -0,0 +1,7 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[
{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":24,"max":35},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":24,"max":35},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":6},{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2},{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":5},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]},{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":22,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":10,"max":24}}]},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}}]},
{"type":"minecraft:item","name":"minecraft:enchanted_golden_apple","weight":2},{"type":"minecraft:item","name":"minecraft:potion","weight":9,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":6,"max":16}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":14,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency","minecraft:fortune"]}]},{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1}
]}],"random_sequence":"antarchy:spawners/queen_castle/hard"}
@@ -0,0 +1,7 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[
{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":28},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":28},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":4},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":18}}]},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":5}}]},{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":21,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"minecraft:potion","weight":9,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":12}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":11,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency"]}]}
]}],"random_sequence":"antarchy:spawners/queen_castle/medium"}
@@ -0,0 +1,9 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[
{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":5},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness","minecraft:protection"]}]},{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1}
]}],"random_sequence":"antarchy:spawners/scorpion_arena/hard"}
@@ -0,0 +1,10 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":4,"max":7},"entries":[
{"type":"minecraft:item","name":"minecraft:arrow","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":14,"max":36}}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"minecraft:iron_sword","weight":9},{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":2},
{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":5,"max":14}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":18,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]},
{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":6,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness"]}]}
]}],"random_sequence":"antarchy:spawners/scorpion_arena/medium"}
@@ -0,0 +1,7 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[
{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":4},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":4},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency","minecraft:fortune"]}]},{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1}
]}],"random_sequence":"antarchy:spawners/underside_ruins/hard"}
@@ -0,0 +1,9 @@
{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":4,"max":7},"entries":[
{"type":"minecraft:item","name":"minecraft:iron_pickaxe","weight":10},{"type":"minecraft:item","name":"minecraft:arrow","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":12,"max":32}}]},
{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2},
{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":5,"max":14}}]},
{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]},
{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":18,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]},
{"type":"minecraft:item","name":"minecraft:potion","weight":9,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":7,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency"]}]}
]}],"random_sequence":"antarchy:spawners/underside_ruins/medium"}
Whitespace-only changes.
Whitespace-only changes.
@@ -0,0 +1,6 @@
{
"values": [
"minecraft:magic",
"minecraft:indirect_magic"
]
}
@@ -0,0 +1,12 @@
{
"values": [
"antarchy:basilisk",
"antarchy:nightmare",
"antarchy:emperor_scorpion",
"antarchy:kraken",
"antarchy:toreterror",
"antarchy:brutalfly",
"antarchy:alpha_mantis",
"antarchy:hercules_beetle"
]
}
Whitespace-only changes.
Whitespace-only changes.
@@ -236,7 +236,7 @@ public final class AntarchyFabricMisc {
SoundEvents.ARMOR_EQUIP_NETHERITE, SoundEvents.ARMOR_EQUIP_NETHERITE,
() -> Ingredient.of(AntarchyFabricItems.PRIMORDIAL_SCUTE.get()), () -> Ingredient.of(AntarchyFabricItems.PRIMORDIAL_SCUTE.get()),
List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))),
3.0F, 3.5F,
0.1F 0.1F
)); ));
@@ -129,15 +129,15 @@ public final class AntarchyMiscConfig {
// Diamond Minecart // Diamond Minecart
b.push("diamondMinecart"); b.push("diamondMinecart");
DIAMOND_MINECART_ENABLED = b.comment("Master toggle. If false, acts like a regular minecart.") .define("enabled", true); DIAMOND_MINECART_ENABLED = b.comment("Master toggle for the diamond minecart's custom propulsion and rail-laying behavior.") .define("enabled", true);
DIAMOND_MINECART_PLACES_RAILS = b.comment("Whether the cart automatically places rails from the rider's inventory.") .define("placesRails", true); DIAMOND_MINECART_PLACES_RAILS = b.comment("Whether the cart automatically places normal rails from the rider's inventory.") .define("placesRails", true);
DIAMOND_MINECART_CRUISE_SPEED = b.comment("Cruise speed in blocks/tick while ridden (even without holding W).") .defineInRange("cruiseSpeed", 0.6D, 0.05D, 2.0D); DIAMOND_MINECART_CRUISE_SPEED = b.comment("Minimum maintained speed while ridden without holding W. Set to 0 for manual control.") .defineInRange("cruiseSpeed", 0.0D, 0.0D, 2.0D);
DIAMOND_MINECART_MAX_SPEED = b.comment("Maximum boosted speed in blocks/tick when W is held. Vanilla cap is 0.4.") .defineInRange("maxSpeed", 1.0D, 0.05D, 2.0D); DIAMOND_MINECART_MAX_SPEED = b.comment("Maximum speed in blocks/tick when W is held. Vanilla rideable minecarts cap at 0.4.") .defineInRange("maxSpeed", 0.55D, 0.05D, 2.0D);
DIAMOND_MINECART_ACCELERATION = b.comment("Speed gained per tick while accelerating.") .defineInRange("acceleration", 0.03D, 0.001D, 0.5D); DIAMOND_MINECART_ACCELERATION = b.comment("Speed gained per tick while accelerating.") .defineInRange("acceleration", 0.02D, 0.001D, 0.5D);
DIAMOND_MINECART_DECELERATION = b.comment("Speed lost per tick while S is held (active braking).") .defineInRange("deceleration", 0.04D, 0.001D, 0.5D); DIAMOND_MINECART_DECELERATION = b.comment("Speed lost per tick while S is held (active braking).") .defineInRange("deceleration", 0.05D, 0.001D, 0.5D);
DIAMOND_MINECART_COAST_DECELERATION = b.comment("Speed lost per tick when neither W nor S is held (coasting friction).") .defineInRange("coastDeceleration", 0.01D, 0.001D, 0.5D); DIAMOND_MINECART_COAST_DECELERATION = b.comment("Speed lost per tick when neither W nor S is held.") .defineInRange("coastDeceleration", 0.02D, 0.001D, 0.5D);
DIAMOND_MINECART_MOB_DAMAGE_ENABLED = b.comment("Whether the cart deals damage to mobs it collides with at speed.") .define("mobDamageEnabled", true); DIAMOND_MINECART_MOB_DAMAGE_ENABLED = b.comment("Whether the cart damages mobs it hits while moving.") .define("mobDamageEnabled", false);
DIAMOND_MINECART_MAX_MOB_DAMAGE = b.comment("Maximum damage dealt at full speed. Scales linearly with current speed.") .defineInRange("maxMobDamage", 8.0D, 0.0D, 200.0D); DIAMOND_MINECART_MAX_MOB_DAMAGE = b.comment("Maximum collision damage dealt at full speed if mob damage is enabled.") .defineInRange("maxMobDamage", 4.0D, 0.0D, 200.0D);
b.pop(); b.pop();
@@ -1090,10 +1090,7 @@ public final class AntarchyForgeEvents {
if (event.getEffectInstance().getEffect() != AntarchyForgeMisc.INVERTED.get()) return; if (event.getEffectInstance().getEffect() != AntarchyForgeMisc.INVERTED.get()) return;
LivingEntity entity = event.getEntity(); LivingEntity entity = event.getEntity();
if (!entity.level().isClientSide()) { if (!entity.level().isClientSide()) {
com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity);
entity,
com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN,
new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12));
if (entity instanceof Player player) { if (entity instanceof Player player) {
notifyNearbyReveriesOfInversionChange(player); notifyNearbyReveriesOfInversionChange(player);
} }
@@ -1232,10 +1229,7 @@ public final class AntarchyForgeEvents {
if (event.getEffect() != AntarchyForgeMisc.INVERTED.get()) return; if (event.getEffect() != AntarchyForgeMisc.INVERTED.get()) return;
LivingEntity entity = event.getEntity(); LivingEntity entity = event.getEntity();
if (!entity.level().isClientSide()) { if (!entity.level().isClientSide()) {
com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity);
entity,
com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN,
new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12));
if (entity instanceof Player player) { if (entity instanceof Player player) {
notifyNearbyReveriesOfInversionChange(player); notifyNearbyReveriesOfInversionChange(player);
} }
@@ -129,15 +129,15 @@ public final class AntarchyMiscConfig {
// Diamond Minecart // Diamond Minecart
b.push("diamondMinecart"); b.push("diamondMinecart");
DIAMOND_MINECART_ENABLED = b.comment("Master toggle. If false, acts like a regular minecart.") .define("enabled", true); DIAMOND_MINECART_ENABLED = b.comment("Master toggle for the diamond minecart's custom propulsion and rail-laying behavior.") .define("enabled", true);
DIAMOND_MINECART_PLACES_RAILS = b.comment("Whether the cart automatically places rails from the rider's inventory.") .define("placesRails", true); DIAMOND_MINECART_PLACES_RAILS = b.comment("Whether the cart automatically places normal rails from the rider's inventory.") .define("placesRails", true);
DIAMOND_MINECART_CRUISE_SPEED = b.comment("Cruise speed in blocks/tick while ridden (even without holding W).") .defineInRange("cruiseSpeed", 0.6D, 0.05D, 2.0D); DIAMOND_MINECART_CRUISE_SPEED = b.comment("Minimum maintained speed while ridden without holding W. Set to 0 for manual control.") .defineInRange("cruiseSpeed", 0.0D, 0.0D, 2.0D);
DIAMOND_MINECART_MAX_SPEED = b.comment("Maximum boosted speed in blocks/tick when W is held. Vanilla cap is 0.4.") .defineInRange("maxSpeed", 1.0D, 0.05D, 2.0D); DIAMOND_MINECART_MAX_SPEED = b.comment("Maximum speed in blocks/tick when W is held. Vanilla rideable minecarts cap at 0.4.") .defineInRange("maxSpeed", 0.55D, 0.05D, 2.0D);
DIAMOND_MINECART_ACCELERATION = b.comment("Speed gained per tick while accelerating.") .defineInRange("acceleration", 0.03D, 0.001D, 0.5D); DIAMOND_MINECART_ACCELERATION = b.comment("Speed gained per tick while accelerating.") .defineInRange("acceleration", 0.02D, 0.001D, 0.5D);
DIAMOND_MINECART_DECELERATION = b.comment("Speed lost per tick while S is held (active braking).") .defineInRange("deceleration", 0.04D, 0.001D, 0.5D); DIAMOND_MINECART_DECELERATION = b.comment("Speed lost per tick while S is held (active braking).") .defineInRange("deceleration", 0.05D, 0.001D, 0.5D);
DIAMOND_MINECART_COAST_DECELERATION = b.comment("Speed lost per tick when neither W nor S is held (coasting friction).") .defineInRange("coastDeceleration", 0.01D, 0.001D, 0.5D); DIAMOND_MINECART_COAST_DECELERATION = b.comment("Speed lost per tick when neither W nor S is held.") .defineInRange("coastDeceleration", 0.02D, 0.001D, 0.5D);
DIAMOND_MINECART_MOB_DAMAGE_ENABLED = b.comment("Whether the cart deals damage to mobs it collides with at speed.") .define("mobDamageEnabled", true); DIAMOND_MINECART_MOB_DAMAGE_ENABLED = b.comment("Whether the cart damages mobs it hits while moving.") .define("mobDamageEnabled", false);
DIAMOND_MINECART_MAX_MOB_DAMAGE = b.comment("Maximum damage dealt at full speed. Scales linearly with current speed.") .defineInRange("maxMobDamage", 8.0D, 0.0D, 200.0D); DIAMOND_MINECART_MAX_MOB_DAMAGE = b.comment("Maximum collision damage dealt at full speed if mob damage is enabled.") .defineInRange("maxMobDamage", 4.0D, 0.0D, 200.0D);
b.pop(); b.pop();
@@ -97,6 +97,7 @@ public final class AntarchyNeoForgeEvents {
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateBowDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateBowDamage);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateCrossbowDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateCrossbowDamage);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleNightmareArmorDoubleDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleNightmareArmorDoubleDamage);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBossMagicBurstMitigation);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipAttackEntity); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipAttackEntity);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAttitudeAdjusterAttackEntity); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAttitudeAdjusterAttackEntity);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipLeftClickBlock); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipLeftClickBlock);
@@ -844,6 +845,38 @@ public final class AntarchyNeoForgeEvents {
} }
} }
static void handleBossMagicBurstMitigation(LivingIncomingDamageEvent event) {
LivingEntity boss = event.getEntity();
if (!boss.getType().is(AntarchyTags.Entities.SPELL_RESISTANT_BOSS)) return;
if (!com.craisinlord.antarchy.content.boss.BossCombatUtil.isMagicBurstSource(event.getSource())) return;
float maxHealth = boss.getMaxHealth();
float amount = event.getAmount();
float perHitCap = maxHealth * (float) AntarchySettings.bossMagicPerHitCapFraction();
if (amount > perHitCap) {
amount = perHitCap;
}
float windowCap = maxHealth * (float) AntarchySettings.bossMagicWindowCapFraction();
float remainingBudget = com.craisinlord.antarchy.content.boss.BossCombatUtil.remainingWindowBudget(boss, windowCap);
boolean breachedWindow = amount > remainingBudget;
if (breachedWindow) {
amount = Math.max(0.0F, remainingBudget);
}
com.craisinlord.antarchy.content.boss.BossCombatUtil.trackMagicBurstWindow(boss, amount, AntarchySettings.bossMagicWindowTicks());
if (breachedWindow) {
int breaches = com.craisinlord.antarchy.content.boss.BossCombatUtil.recordMagicWindowBreach(boss);
if (breaches >= AntarchySettings.bossMagicWardTriggerBreaches()) {
com.craisinlord.antarchy.content.boss.BossCombatUtil.triggerMagicWard(boss, AntarchySettings.bossMagicWardDurationTicks());
}
}
event.setAmount(amount);
}
static void handleAntiwaterDamage(LivingIncomingDamageEvent event) { static void handleAntiwaterDamage(LivingIncomingDamageEvent event) {
if (!event.getSource().is(DamageTypes.FALL)) { if (!event.getSource().is(DamageTypes.FALL)) {
return; return;
@@ -1103,10 +1136,7 @@ public final class AntarchyNeoForgeEvents {
if (!event.getEffectInstance().is(AntarchyNeoforgeMisc.INVERTED)) return; if (!event.getEffectInstance().is(AntarchyNeoforgeMisc.INVERTED)) return;
LivingEntity entity = event.getEntity(); LivingEntity entity = event.getEntity();
if (!entity.level().isClientSide()) { if (!entity.level().isClientSide()) {
com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity);
entity,
com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN,
new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12));
if (entity instanceof Player player) { if (entity instanceof Player player) {
notifyNearbyReveriesOfInversionChange(player); notifyNearbyReveriesOfInversionChange(player);
} }
@@ -1227,10 +1257,7 @@ public final class AntarchyNeoForgeEvents {
if (!event.getEffect().is(AntarchyNeoforgeMisc.INVERTED)) return; if (!event.getEffect().is(AntarchyNeoforgeMisc.INVERTED)) return;
LivingEntity entity = event.getEntity(); LivingEntity entity = event.getEntity();
if (!entity.level().isClientSide()) { if (!entity.level().isClientSide()) {
com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity);
entity,
com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN,
new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12));
if (entity instanceof Player player) { if (entity instanceof Player player) {
notifyNearbyReveriesOfInversionChange(player); notifyNearbyReveriesOfInversionChange(player);
} }
@@ -134,7 +134,7 @@ public final class AntarchyNeoforgeItems {
SoundEvents.ARMOR_EQUIP_NETHERITE, SoundEvents.ARMOR_EQUIP_NETHERITE,
() -> Ingredient.of(PRIMORDIAL_SCUTE.get()), () -> Ingredient.of(PRIMORDIAL_SCUTE.get()),
List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))),
3.0F, 3.5F,
0.1F 0.1F
)); ));
private static final DeferredHolder<ArmorMaterial, ArmorMaterial> JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", private static final DeferredHolder<ArmorMaterial, ArmorMaterial> JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots",