diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index ef912199..df9e172e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -218,13 +218,13 @@ public final class AntarchySettings { private static int basiliskPreyPetrifyTicks = 200; private static boolean diamondMinecartEnabled = true; private static boolean diamondMinecartPlacesRails = true; - private static double diamondMinecartCruiseSpeed = 0.6D; - private static double diamondMinecartMaxSpeed = 1.0D; - private static double diamondMinecartAcceleration = 0.03D; - private static double diamondMinecartDeceleration = 0.04D; - private static double diamondMinecartCoastDeceleration = 0.01D; - private static boolean diamondMinecartMobDamageEnabled = true; - private static double diamondMinecartMaxMobDamage = 8.0D; + private static double diamondMinecartCruiseSpeed = 0.0D; + private static double diamondMinecartMaxSpeed = 0.55D; + private static double diamondMinecartAcceleration = 0.02D; + private static double diamondMinecartDeceleration = 0.05D; + private static double diamondMinecartCoastDeceleration = 0.02D; + private static boolean diamondMinecartMobDamageEnabled = false; + private static double diamondMinecartMaxMobDamage = 4.0D; private static boolean dreadHallucinationSoundsEnabled = true; private static double dreadHallucinationSoundMinInterval = 3.0D; private static double dreadHallucinationSoundMaxInterval = 10.0D; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java index db882ba9..49c9e3b9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -229,10 +229,17 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canUse() { return !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isLeashed() && !HerculesBeetleEntity.this.isVehicle() && !HerculesBeetleEntity.this.isInBusyAnimation() && 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(4, new RandomLookAroundGoal(this)); @@ -364,6 +371,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl if (this.isKnockedDown()) { this.tickKnockedDown(); + } else if (this.isLeashed()) { + this.getNavigation().stop(); + this.setTarget(null); + this.updateAmbientAnimation(); } else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) { this.tickCharge(); } else if (this.isInBusyAnimation()) { @@ -1402,6 +1413,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl return null; } + @Override + public boolean canBeLeashed(Player player) { + return this.isTame() && super.canBeLeashed(player); + } + private final class HerculesCombatGoal extends Goal { HerculesCombatGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); @@ -1410,6 +1426,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canUse() { return !HerculesBeetleEntity.this.isTame() + && !HerculesBeetleEntity.this.isLeashed() && !HerculesBeetleEntity.this.isKnockedDown() && HerculesBeetleEntity.this.getTarget() != null && HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget()); @@ -1421,6 +1438,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl return target != null && target.isAlive() && !HerculesBeetleEntity.this.isTame() + && !HerculesBeetleEntity.this.isLeashed() && !HerculesBeetleEntity.this.isKnockedDown() && HerculesBeetleEntity.this.canAttack(target); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java new file mode 100644 index 00000000..bf4053e8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java @@ -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); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java index 8e6932c9..9be7c045 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java @@ -34,6 +34,14 @@ public class DiamondMinecartItem extends Item { @Override public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag 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 diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java new file mode 100644 index 00000000..5c95561e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java @@ -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 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; + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bloodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bloodstone.json new file mode 100644 index 00000000..9b0ab008 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bloodstone.json @@ -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" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite.json new file mode 100644 index 00000000..bbc28c01 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite.json @@ -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" + } +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/deepslates.json b/common-1.20.1/src/main/resources/data/c/tags/items/deepslates.json new file mode 100644 index 00000000..1fd037df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/deepslates.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:deepslate" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/stones.json b/common-1.20.1/src/main/resources/data/c/tags/items/stones.json new file mode 100644 index 00000000..0e81af11 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/stones.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:stone" + ] +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 350bfe8b..06102371 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -43,10 +43,10 @@ public final class AntarchySettings { private static double bomberExplosionDamage = 8.0D; private static double bomberExplosionRadius = 4.0D; private static double redAntAttackDamage = 3.0D; - private static double ultimateSwordAttackDamage = 30.0D; - private static double ultimatePickaxeAttackDamage = 22.0D; - private static double ultimateAxeAttackDamage = 38.0D; - private static double ultimateShovelAttackDamage = 24.0D; + private static double ultimateSwordAttackDamage = 34.0D; + private static double ultimatePickaxeAttackDamage = 24.0D; + private static double ultimateAxeAttackDamage = 42.0D; + private static double ultimateShovelAttackDamage = 26.0D; private static double ultimateHoeAttackDamage = 8.0D; private static double ultimateBowAttackDamage = 18.0D; private static double ultimateBowPlayerHeal = 8.0D; @@ -55,8 +55,8 @@ public final class AntarchySettings { private static double ultimateCrossbowAttackDamage = 8.0D; private static double ultimateCrossbowChargeSpeedMultiplier = 0.25D; private static double ultimateMaceDamageMultiplier = 1.5D; - private static double battleAxeAttackDamage = 46.0D; - private static double bigBerthaAttackDamage = 55.0D; + private static double battleAxeAttackDamage = 50.0D; + private static double bigBerthaAttackDamage = 62.0D; private static double bigBerthaReachBonus = 3.0D; private static double bigBerthaAttackSpeed = -3.0D; private static double attitudeAdjusterBaseDamage = 47.0D; @@ -100,23 +100,23 @@ public final class AntarchySettings { private static int ultimateMaceEnchantability = 20; private static boolean ultimateToolsThreeByThreeEnabled = true; private static boolean ultimateArmorComesEnchanted = true; - private static int ultimateHelmetArmorValue = 4; - private static int ultimateChestplateArmorValue = 9; - private static int ultimateLeggingsArmorValue = 7; - private static int ultimateBootsArmorValue = 4; - private static double ultimateHelmetArmorToughness = 3.0D; - private static double ultimateChestplateArmorToughness = 3.0D; - private static double ultimateLeggingsArmorToughness = 3.0D; - private static double ultimateBootsArmorToughness = 3.0D; + private static int ultimateHelmetArmorValue = 6; + private static int ultimateChestplateArmorValue = 11; + private static int ultimateLeggingsArmorValue = 9; + private static int ultimateBootsArmorValue = 6; + private static double ultimateHelmetArmorToughness = 4.5D; + private static double ultimateChestplateArmorToughness = 4.5D; + private static double ultimateLeggingsArmorToughness = 4.5D; + private static double ultimateBootsArmorToughness = 4.5D; private static ResourceKey brownAntDestinationDimension = dimensionKey("antarchy:elythia"); private static ResourceKey redAntDestinationDimension = dimensionKey("antarchy:thoraxis"); private static ResourceKey termiteDestinationDimension = dimensionKey("antarchy:cavaryn"); private static ResourceKey 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 octopusBombHealth = 100.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 brutalflySpitDamage = 5.0D; private static double mantisHealth = 50.0D; @@ -124,7 +124,7 @@ public final class AntarchySettings { private static double mantisMovementSpeed = 0.42D; private static double mantisFlyingSpeed = 0.77D; 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 alphaMantisMovementSpeed = 0.546D; private static double alphaMantisFlyingSpeed = 0.77D; @@ -145,8 +145,8 @@ public final class AntarchySettings { private static double squidzookaLaunchVelocity = 2.1D; private static double rpoLauncherCooldownSeconds = 1.0D; private static double rpoLauncherLaunchVelocity = 1.8D; - private static double rpoLauncherExplosionDamage = 30.0D; - private static double rpoLauncherExplosionRadius = 13.5D; + private static double rpoLauncherExplosionDamage = 34.0D; + private static double rpoLauncherExplosionRadius = 14.0D; private static double sizeRayCooldownSeconds = 1.0D; private static boolean invertProjectilesFromInvertedPlayers = false; private static boolean gravityGunEnabled = true; @@ -179,26 +179,26 @@ public final class AntarchySettings { private static double dreamSandEffectDurationSeconds = 7.0D; private static double dreamSandFallingBlockGravityMultiplier = 0.4D; private static boolean ichorWitherEnabled = true; - private static int nightmareHelmetArmorValue = 3; - private static int nightmareChestplateArmorValue = 8; - private static int nightmareLeggingsArmorValue = 6; - private static int nightmareBootsArmorValue = 3; - private static double nightmareHelmetArmorToughness = 3.0D; - private static double nightmareChestplateArmorToughness = 3.0D; - private static double nightmareLeggingsArmorToughness = 3.0D; - private static double nightmareBootsArmorToughness = 3.0D; - - private static double nightmareHelmetDoubleDamageChance = 0.04D; - private static double nightmareChestplateDoubleDamageChance = 0.06D; - private static double nightmareLeggingsDoubleDamageChance = 0.05D; - private static double nightmareBootsDoubleDamageChance = 0.03D; + private static int nightmareHelmetArmorValue = 4; + private static int nightmareChestplateArmorValue = 9; + private static int nightmareLeggingsArmorValue = 7; + private static int nightmareBootsArmorValue = 4; + private static double nightmareHelmetArmorToughness = 4.0D; + private static double nightmareChestplateArmorToughness = 4.0D; + private static double nightmareLeggingsArmorToughness = 4.0D; + private static double nightmareBootsArmorToughness = 4.0D; - private static double nightmareSwordBaseDamage = 15.0D; + private static double nightmareHelmetDoubleDamageChance = 0.05D; + private static double nightmareChestplateDoubleDamageChance = 0.07D; + private static double nightmareLeggingsDoubleDamageChance = 0.07D; + private static double nightmareBootsDoubleDamageChance = 0.05D; + + private static double nightmareSwordBaseDamage = 18.0D; private static double nightmareSwordScalingFactor = 1.5D; private static boolean basiliskPetrifyingGazeEnabled = true; 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 basiliskMovementSpeed = 0.18D; private static double basiliskArmor = 6.0D; @@ -219,13 +219,13 @@ public final class AntarchySettings { private static int basiliskPreyPetrifyTicks = 200; private static boolean diamondMinecartEnabled = true; private static boolean diamondMinecartPlacesRails = true; - private static double diamondMinecartCruiseSpeed = 0.6D; - private static double diamondMinecartMaxSpeed = 1.0D; - private static double diamondMinecartAcceleration = 0.03D; - private static double diamondMinecartDeceleration = 0.04D; - private static double diamondMinecartCoastDeceleration = 0.01D; - private static boolean diamondMinecartMobDamageEnabled = true; - private static double diamondMinecartMaxMobDamage = 8.0D; + private static double diamondMinecartCruiseSpeed = 0.0D; + private static double diamondMinecartMaxSpeed = 0.55D; + private static double diamondMinecartAcceleration = 0.02D; + private static double diamondMinecartDeceleration = 0.05D; + private static double diamondMinecartCoastDeceleration = 0.02D; + private static boolean diamondMinecartMobDamageEnabled = false; + private static double diamondMinecartMaxMobDamage = 4.0D; private static boolean dreadHallucinationSoundsEnabled = true; private static double dreadHallucinationSoundMinInterval = 3.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 reverieAmbientPulseIntervalMinTicks = 12; 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 emperorScorpionMovementSpeed = 0.384D; private static double emperorScorpionArmor = 22.0D; @@ -306,7 +306,7 @@ public final class AntarchySettings { private static double jumpyBugPounceDamage = 12.0D; private static double jumpyBugCamouflageAlpha = 0.18D; 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 brutalflyMovementSpeed = 0.34D; private static double brutalflyFlyingSpeed = 0.55D; @@ -326,25 +326,25 @@ public final class AntarchySettings { private static double toreterrorDamageRange = 25.0D; private static double brutalflyDamageRange = 25.0D; private static double alphaMantisDamageRange = 25.0D; - private static float krakenLightningDamagePhaseOne = 6.0F; - private static double lucidHealth = 30.0D; + private static float krakenLightningDamagePhaseOne = 12.0F; + private static double lucidHealth = 70.0D; private static double lucidAttackDamage = 4.0D; private static double lucidMovementSpeed = 0.22D; private static double lucidFlyingSpeed = 0.35D; private static double lucidKnockbackResistance = 0.5D; - private static double missileSquidHealth = 50.0D; - private static double missileSquidAttackDamage = 6.0D; + private static double missileSquidHealth = 60.0D; + private static double missileSquidAttackDamage = 9.0D; private static double missileSquidMovementSpeed = 0.84D; private static double missileSquidFlyingSpeed = 0.84D; private static double missileSquidKnockbackResistance = 0.15D; private static double molewormHealth = 8.0D; private static double molewormAttackDamage = 1.0D; 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 triffidGrabDamage = 15.0D; 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 molevoreMovementSpeed = 0.27D; private static double molevoreArmor = 6.0D; @@ -357,7 +357,7 @@ public final class AntarchySettings { private static double molevoreBreakRange = 1.8D; private static double molevoreBreakVerticalRange = 2.2D; 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 nightmareMovementSpeed = 0.28D; private static double nightmareFlyingSpeed = 0.3D; @@ -389,7 +389,7 @@ public final class AntarchySettings { private static int bigBerthaBasiliskParalyzeDurationTicks = 80; private static int bigBerthaKrakenSlowTicks = 80; 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 primordialArmorKnockbackPerPiece = 0.5D; private static double mogglesVisionRadius = 20.0D; @@ -405,18 +405,18 @@ public final class AntarchySettings { private static int bloodCrystalAppleShieldCount = 2; private static int bloodCrystalAppleDurationTicks = 2400; 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) - private static int bloodCrystalHelmetDefense = 2; - private static int bloodCrystalChestplateDefense = 6; - private static int bloodCrystalLeggingsDefense = 5; - private static int bloodCrystalBootsDefense = 2; - private static double bloodCrystalArmorToughness = 0.0; + private static int bloodCrystalHelmetDefense = 3; + private static int bloodCrystalChestplateDefense = 7; + private static int bloodCrystalLeggingsDefense = 6; + private static int bloodCrystalBootsDefense = 3; + private static double bloodCrystalArmorToughness = 2.0D; private static int bloodCrystalHelmetDurability = 77; private static int bloodCrystalChestplateDurability = 112; private static int bloodCrystalLeggingsDurability = 105; 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 toreterrorJumpAttackKnockback = 2.5D; private static double toreterrorSpinDamage = 6.0D; @@ -441,12 +441,29 @@ public final class AntarchySettings { private static double cheepHealth = 8.0D; private static double cheepAttackDamage = 3.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 herculesBeetleChargeDamage = 40.0D; private static double ouranwoodDeerHealth = 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 magicBurstDamageNamespaces = new java.util.ArrayList<>(java.util.List.of("irons_spellbooks")); + private AntarchySettings() { } @@ -2439,4 +2456,21 @@ public final class AntarchySettings { public static void setOuranwoodDeerHealth(double v) { ouranwoodDeerHealth = v; } public static double glimmerHealth() { return glimmerHealth; } 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 magicBurstDamageNamespaces() { return magicBurstDamageNamespaces; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index e4aed67a..50bdb47b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -54,6 +54,8 @@ public final class AntarchyTags { public static final class DamageType { public static final TagKey BYPASSES_BLOODGLASS = TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "bypasses_bloodglass")); + public static final TagKey ANTARCHY_MAGIC_BURST = + TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "antarchy_magic_burst")); private DamageType() { } @@ -61,6 +63,7 @@ public final class AntarchyTags { public static final class Entities { public static final TagKey> BASILISK_PREY = TagKey.create(Registries.ENTITY_TYPE, id("basilisk_prey")); + public static final TagKey> SPELL_RESISTANT_BOSS = TagKey.create(Registries.ENTITY_TYPE, id("spell_resistant_boss")); public static final TagKey> DREAM_SAND_LOW_GRAVITY_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("dream_sand_low_gravity_blacklist")); public static final TagKey> GRAVITY_GUN_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("gravity_gun_blacklist")); public static final TagKey> INVERTED_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("inverted_immune")); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java index 866e0731..619de07a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java @@ -1,11 +1,29 @@ 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.Mob; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + public final class BossCombatUtil { private BossCombatUtil() {} + private static final Map MAGIC_WINDOWS = new HashMap<>(); + private static final Map MAGIC_WARD_EXPIRY_TICK = new HashMap<>(); + private static final Map MAGIC_WARD_BREACH_COUNTS = new HashMap<>(); + + private static final class MagicWindowState { + long windowStartTick; + float accumulated; + } + public static boolean isOutOfDamageRange(Mob boss, double range) { if (range <= 0.0D) { return false; @@ -19,4 +37,57 @@ public final class BossCombatUtil { 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); + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java index 18e8f462..58bca487 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -68,6 +68,7 @@ public class AlphaMantisEntity extends MantisEntity { .add(Attributes.FLYING_SPEED, AntarchySettings.alphaMantisFlyingSpeed()) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.ARMOR, 8.0D) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.alphaMantisArmorToughness()) .add(Attributes.KNOCKBACK_RESISTANCE, 0.8D); } @@ -81,6 +82,9 @@ public class AlphaMantisEntity extends MantisEntity { @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } float preHealth = this.getHealth(); boolean hurt = super.hurt(source, amount); if (hurt) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java index ed99ea45..5ef3c5f1 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -185,6 +185,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } if (this.isHardenedStateActive()) { return false; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java index 331a2185..0ea07a61 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -203,7 +203,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl .add(Attributes.FLYING_SPEED, FLIGHT_SPEED) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.9D) - .add(Attributes.ARMOR, 12.0D); + .add(Attributes.ARMOR, 12.0D) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.herculesBeetleArmorToughness()); } @Override @@ -239,10 +240,17 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canUse() { return !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isLeashed() && !HerculesBeetleEntity.this.isVehicle() && !HerculesBeetleEntity.this.isInBusyAnimation() && 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(4, new RandomLookAroundGoal(this)); @@ -376,6 +384,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl if (this.isKnockedDown()) { this.tickKnockedDown(); + } else if (this.isLeashed()) { + this.getNavigation().stop(); + this.setTarget(null); + this.updateAmbientAnimation(); } else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) { this.tickCharge(); } else if (this.isInBusyAnimation()) { @@ -593,6 +605,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override 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)) { return false; } @@ -1429,6 +1444,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl return null; } + @Override + public boolean canBeLeashed() { + return this.isTame() && super.canBeLeashed(); + } + private final class HerculesCombatGoal extends Goal { HerculesCombatGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); @@ -1437,6 +1457,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canUse() { return !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isLeashed() && !HerculesBeetleEntity.this.isVehicle() && HerculesBeetleEntity.this.getTarget() != null && HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget()); @@ -1448,6 +1469,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl return target != null && target.isAlive() && !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isLeashed() && !HerculesBeetleEntity.this.isVehicle() && HerculesBeetleEntity.this.canAttack(target); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 01f22f09..9a2a2c64 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -270,6 +270,9 @@ public class ToreterrorEntity extends Monster implements GeoEntity { @Override 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(DamageTypeTags.IS_PROJECTILE)) { amount *= (float) AntarchySettings.toreterrorProjectileDamageMultiplier(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java index aff4284b..15ba6bee 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java @@ -99,7 +99,8 @@ public class TriffidEntity extends Monster implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, AntarchySettings.triffidAttackDamage()) .add(Attributes.FOLLOW_RANGE, FOLLOW_RANGE) .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 diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java index 66e5544e..056d2244 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; @@ -112,7 +113,16 @@ public class BasiliskEntity extends Monster implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, AntarchySettings.basiliskAttackDamage()) .add(Attributes.ARMOR, AntarchySettings.basiliskArmor()) .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 diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java index f7122514..c87fc896 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java @@ -370,6 +370,9 @@ public class BrutalflyEntity extends Monster implements GeoEntity { @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } if (this.postCocoonInvulnerableTicks > 0) { return false; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index e03be6bd..7e848017 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -153,7 +153,8 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO .add(Attributes.FLYING_SPEED, AntarchySettings.krakenFlyingSpeed()) .add(Attributes.FOLLOW_RANGE, AntarchySettings.krakenFollowRange()) .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 entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { @@ -365,6 +366,9 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO @Override 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) || source.is(DamageTypes.IN_WALL) || source.is(DamageTypes.LIGHTNING_BOLT) diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java index a7acb7ac..22164bae 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java @@ -101,7 +101,8 @@ public class LucidEntity extends Monster implements GeoEntity { .add(Attributes.MOVEMENT_SPEED, AntarchySettings.lucidMovementSpeed()) .add(Attributes.FLYING_SPEED, AntarchySettings.lucidFlyingSpeed()) .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 diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index e2308b82..9ec5d719 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -243,7 +244,8 @@ public class NightmareEntity extends Monster implements GeoEntity { .add(Attributes.FLYING_SPEED, 0.375D) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.75D) - .add(Attributes.ARMOR, 8.0D); + .add(Attributes.ARMOR, AntarchySettings.nightmareMobArmor()) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.nightmareMobArmorToughness()); } @Override @@ -421,6 +423,9 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override 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) { return false; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java new file mode 100644 index 00000000..bf4053e8 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java @@ -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); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java index 391fcab0..24de9c9d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java @@ -356,7 +356,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem { } 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); if (push.lengthSqr() < 1.0E-4D) { push = attacker.getLookAngle().multiply(1.0D, 0.0D, 1.0D); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java index a1b75f69..124e7b36 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java @@ -35,6 +35,14 @@ public class DiamondMinecartItem extends Item { @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag 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 diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java new file mode 100644 index 00000000..80ce21d1 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java @@ -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 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; + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/king.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/king.animation.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/queen.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/queen.animation.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/king.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/king.geo.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/queen.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/queen.geo.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/prince_egg.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/prince_egg.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/princess_egg.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/princess_egg.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/prince_egg.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/prince_egg.png new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/princess_egg.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/princess_egg.png new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/king/king.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/king/king.png new file mode 100644 index 00000000..76de805a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/king/king.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/queen/queen.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/queen/queen.png new file mode 100644 index 00000000..ff9d0535 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/queen/queen.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_emissive.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_emissive.png new file mode 100644 index 00000000..bbda49e0 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_emissive.png differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/generic.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/generic.json new file mode 100644 index 00000000..ebfa6185 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/generic.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/treasure.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/treasure.json new file mode 100644 index 00000000..cfa3c85c --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/treasure.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/generic.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/generic.json new file mode 100644 index 00000000..01fe9ead --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/generic.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/treasure.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/treasure.json new file mode 100644 index 00000000..9ca8c11a --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/treasure.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/generic.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/generic.json new file mode 100644 index 00000000..482f04ec --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/generic.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/treasure.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/treasure.json new file mode 100644 index 00000000..3562a324 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/treasure.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/hard.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/hard.json new file mode 100644 index 00000000..b6d023b6 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/hard.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/medium.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/medium.json new file mode 100644 index 00000000..6119fe04 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/medium.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/hard.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/hard.json new file mode 100644 index 00000000..989d2620 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/hard.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/medium.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/medium.json new file mode 100644 index 00000000..fd12e4fd --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/medium.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/hard.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/hard.json new file mode 100644 index 00000000..69807370 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/hard.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/medium.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/medium.json new file mode 100644 index 00000000..82a0792a --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/medium.json @@ -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"} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/bloodstone.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/bloodstone.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/myrmite.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/myrmite.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/damage_type/antarchy_magic_burst.json b/common-1.21.1/src/main/resources/data/antarchy/tags/damage_type/antarchy_magic_burst.json new file mode 100644 index 00000000..50f75ace --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/damage_type/antarchy_magic_burst.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:magic", + "minecraft:indirect_magic" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/spell_resistant_boss.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/spell_resistant_boss.json new file mode 100644 index 00000000..5c424efa --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/spell_resistant_boss.json @@ -0,0 +1,12 @@ +{ + "values": [ + "antarchy:basilisk", + "antarchy:nightmare", + "antarchy:emperor_scorpion", + "antarchy:kraken", + "antarchy:toreterror", + "antarchy:brutalfly", + "antarchy:alpha_mantis", + "antarchy:hercules_beetle" + ] +} diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/deepslates.json b/common-1.21.1/src/main/resources/data/c/tags/item/deepslates.json new file mode 100644 index 00000000..e69de29b diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/stones.json b/common-1.21.1/src/main/resources/data/c/tags/item/stones.json new file mode 100644 index 00000000..e69de29b diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index 241af686..5c65da9f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -236,7 +236,7 @@ public final class AntarchyFabricMisc { SoundEvents.ARMOR_EQUIP_NETHERITE, () -> Ingredient.of(AntarchyFabricItems.PRIMORDIAL_SCUTE.get()), List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), - 3.0F, + 3.5F, 0.1F )); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java index dd168c90..32f9923a 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java @@ -129,15 +129,15 @@ public final class AntarchyMiscConfig { // Diamond Minecart b.push("diamondMinecart"); - DIAMOND_MINECART_ENABLED = b.comment("Master toggle. If false, acts like a regular minecart.") .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_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_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_ACCELERATION = b.comment("Speed gained per tick while accelerating.") .defineInRange("acceleration", 0.03D, 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_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_MOB_DAMAGE_ENABLED = b.comment("Whether the cart deals damage to mobs it collides with at speed.") .define("mobDamageEnabled", true); - 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_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 normal rails from the rider's inventory.") .define("placesRails", true); + 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 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.02D, 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.") .defineInRange("coastDeceleration", 0.02D, 0.001D, 0.5D); + 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 collision damage dealt at full speed if mob damage is enabled.") .defineInRange("maxMobDamage", 4.0D, 0.0D, 200.0D); b.pop(); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java index 7442d108..4f5c9f77 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java @@ -1090,10 +1090,7 @@ public final class AntarchyForgeEvents { if (event.getEffectInstance().getEffect() != AntarchyForgeMisc.INVERTED.get()) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( - entity, - com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN, - new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12)); + com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } @@ -1232,10 +1229,7 @@ public final class AntarchyForgeEvents { if (event.getEffect() != AntarchyForgeMisc.INVERTED.get()) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( - entity, - com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN, - new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12)); + com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java index 3f6dc61c..750bcf31 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java @@ -129,15 +129,15 @@ public final class AntarchyMiscConfig { // Diamond Minecart b.push("diamondMinecart"); - DIAMOND_MINECART_ENABLED = b.comment("Master toggle. If false, acts like a regular minecart.") .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_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_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_ACCELERATION = b.comment("Speed gained per tick while accelerating.") .defineInRange("acceleration", 0.03D, 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_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_MOB_DAMAGE_ENABLED = b.comment("Whether the cart deals damage to mobs it collides with at speed.") .define("mobDamageEnabled", true); - 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_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 normal rails from the rider's inventory.") .define("placesRails", true); + 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 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.02D, 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.") .defineInRange("coastDeceleration", 0.02D, 0.001D, 0.5D); + 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 collision damage dealt at full speed if mob damage is enabled.") .defineInRange("maxMobDamage", 4.0D, 0.0D, 200.0D); b.pop(); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index cb2e7809..8524aa51 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -97,6 +97,7 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateBowDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateCrossbowDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleNightmareArmorDoubleDamage); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBossMagicBurstMitigation); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipAttackEntity); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAttitudeAdjusterAttackEntity); 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) { if (!event.getSource().is(DamageTypes.FALL)) { return; @@ -1103,10 +1136,7 @@ public final class AntarchyNeoForgeEvents { if (!event.getEffectInstance().is(AntarchyNeoforgeMisc.INVERTED)) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( - entity, - com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN, - new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12)); + com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } @@ -1227,10 +1257,7 @@ public final class AntarchyNeoForgeEvents { if (!event.getEffect().is(AntarchyNeoforgeMisc.INVERTED)) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setGravityDirection( - entity, - com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection.DOWN, - new com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition(12)); + com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index d054e0ad..84115e55 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -134,7 +134,7 @@ public final class AntarchyNeoforgeItems { SoundEvents.ARMOR_EQUIP_NETHERITE, () -> Ingredient.of(PRIMORDIAL_SCUTE.get()), List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), - 3.0F, + 3.5F, 0.1F )); private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots",