fix king and queen attack anim bug
stabalize RainbowAntEntity dims patch config inconsitency fixed undervault performance improvements
This commit is contained in:
1 parent
377f3785af
commit
37e941915d
47 files changed
+784
-231
No files matched your search
+20
@@ -0,0 +1,20 @@
|
||||
package com.craisinlord.antarchy.neoforge;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public final class InfinityGenerationFailure {
|
||||
private static final ThreadLocal<ResourceLocation> FAILURE = new ThreadLocal<>();
|
||||
|
||||
private InfinityGenerationFailure() {
|
||||
}
|
||||
|
||||
public static void mark(ResourceLocation dimensionId) {
|
||||
FAILURE.set(dimensionId);
|
||||
}
|
||||
|
||||
public static boolean consume(ResourceLocation dimensionId) {
|
||||
ResourceLocation failed = FAILURE.get();
|
||||
FAILURE.remove();
|
||||
return dimensionId.equals(failed);
|
||||
}
|
||||
}
|
||||
+6
-3
@@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge;
|
||||
import com.craisinlord.antarchy.compat.infinity.InfinityWarpResult;
|
||||
import net.lerariemann.infinity.InfinityMod;
|
||||
import net.lerariemann.infinity.util.InfinityMethods;
|
||||
import net.lerariemann.infinity.util.teleport.PortalCreator;
|
||||
@@ -69,13 +70,15 @@ public final class NeoForgeInfinityCompat implements InfinityCompatBridge {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requestWarp(ServerPlayer player, ResourceLocation dimensionId) {
|
||||
public InfinityWarpResult requestWarp(ServerPlayer player, ResourceLocation dimensionId) {
|
||||
try {
|
||||
WarpLogic.requestWarp(player, dimensionId, false);
|
||||
return true;
|
||||
return InfinityWarpResult.PENDING;
|
||||
} catch (Throwable throwable) {
|
||||
Antarchy.LOGGER.error("[Antarchy] Failed to request an Infinity warp to {}", dimensionId, throwable);
|
||||
return false;
|
||||
return InfinityGenerationFailure.consume(dimensionId)
|
||||
? InfinityWarpResult.FAILED_GENERATION
|
||||
: InfinityWarpResult.REJECTED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-5
@@ -4,6 +4,8 @@ import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework;
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartPartAccess;
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition;
|
||||
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
|
||||
import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
@@ -67,17 +69,27 @@ public class MultipartPartEntity extends PartEntity<Entity> implements OwnableEn
|
||||
return;
|
||||
}
|
||||
|
||||
AntarchyGravityApi.applySyncedState(
|
||||
this,
|
||||
AntarchyGravityApi.getGravityDirection(parent),
|
||||
AntarchyGravityApi.getPrevGravityDirection(parent),
|
||||
AntarchyGravityApi.isGravityForced(parent),
|
||||
AntarchyGravityApi.getTransitionDuration(parent),
|
||||
AntarchyGravityApi.getTransitionRemaining(parent)
|
||||
);
|
||||
|
||||
double oldX = this.getX();
|
||||
double oldY = this.getY();
|
||||
double oldZ = this.getZ();
|
||||
double yawRadians = Math.toRadians(parent.getYRot());
|
||||
Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians));
|
||||
Vec3 right = new Vec3(forward.z, 0.0D, -forward.x);
|
||||
Vec3 position = new Vec3(
|
||||
parent.getX() + forward.x * this.definition.forwardOffset() + right.x * this.definition.lateralOffset(),
|
||||
parent.getY() + this.definition.yOffset(),
|
||||
parent.getZ() + forward.z * this.definition.forwardOffset() + right.z * this.definition.lateralOffset()
|
||||
);
|
||||
Vec3 localOffset = new Vec3(
|
||||
forward.x * this.definition.forwardOffset() + right.x * this.definition.lateralOffset(),
|
||||
this.definition.yOffset() + (AntarchyGravityApi.isGravityInverted(parent) ? this.definition.height() : 0.0D),
|
||||
forward.z * this.definition.forwardOffset() + right.z * this.definition.lateralOffset());
|
||||
Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(localOffset, AntarchyGravityApi.getGravityDirection(parent));
|
||||
Vec3 position = parent.position().add(offset);
|
||||
this.setPos(position.x, position.y, position.z);
|
||||
this.setRot(parent.getYRot(), parent.getXRot());
|
||||
this.xo = oldX;
|
||||
|
||||
-5
@@ -9,11 +9,6 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
@Mixin(value = ConfigGenInvocation.class, remap = false)
|
||||
/*
|
||||
* Guards against a NPE in Infinite Dimensions' SurfaceRuleScanner when another mod
|
||||
* registers a surface rule with a missing "biome_is" field. Without this, the crash
|
||||
* propagates up through PlayerList.placeNewPlayer and kicks the player on login
|
||||
*/
|
||||
public class ConfigGenInvocationMixin {
|
||||
|
||||
@Redirect(
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.craisinlord.antarchy.neoforge.mixins.infinity;
|
||||
|
||||
import com.craisinlord.antarchy.neoforge.InfinityGenerationFailure;
|
||||
import net.lerariemann.infinity.access.MinecraftServerAccess;
|
||||
import net.lerariemann.infinity.util.teleport.PortalCreator;
|
||||
import net.lerariemann.infinity.util.teleport.WarpLogic;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.world.level.Level;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
@Mixin(value = WarpLogic.class, remap = false)
|
||||
public interface WarpLogicMixin {
|
||||
@Redirect(
|
||||
method = "requestWarp(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/resources/ResourceLocation;Z)V",
|
||||
at = @At(value = "INVOKE", target = "Lnet/lerariemann/infinity/util/teleport/PortalCreator;tryAddInfinityDimension(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/resources/ResourceLocation;)Z"),
|
||||
remap = false
|
||||
)
|
||||
private static boolean antarchy$queuedDimensionCountsAsNew(MinecraftServer server, ResourceLocation dimensionId) throws Throwable {
|
||||
ResourceKey<Level> key = ResourceKey.create(Registries.DIMENSION, dimensionId);
|
||||
if (server instanceof MinecraftServerAccess access && access.infinity$hasToAdd(key)) {
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
return PortalCreator.tryAddInfinityDimension(server, dimensionId);
|
||||
} catch (Throwable throwable) {
|
||||
InfinityGenerationFailure.mark(dimensionId);
|
||||
throw throwable;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -57,8 +57,7 @@ public final class MultipartNetworking {
|
||||
return;
|
||||
}
|
||||
|
||||
DamageSource source = serverPlayer.level().damageSources().playerAttack(serverPlayer);
|
||||
owner.antarchy$hurtMultipartPart(part, source, payload.damage());
|
||||
serverPlayer.attack(part);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+28
-10
@@ -143,6 +143,8 @@ public final class AntarchyNeoForgeEvents {
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassPlayerDeath);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassRespawn);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassLogin);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTimeDilationLogin);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTimeDilationRespawn);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleCavarynHordeKill);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleCavarynHordeBlockBreak);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickCavarynHordes);
|
||||
@@ -213,7 +215,8 @@ public final class AntarchyNeoForgeEvents {
|
||||
&& tickEnd > 0L
|
||||
&& now - tickEnd >= SERVER_IDLE_BUSY_WARN_NANOS
|
||||
&& state != Thread.State.WAITING
|
||||
&& state != Thread.State.TIMED_WAITING;
|
||||
&& state != Thread.State.TIMED_WAITING
|
||||
&& !antarchy$isServerThreadIdleWait(tickThread);
|
||||
if (idleBusy) {
|
||||
antarchy$dumpServerThreadWatchdog(
|
||||
"server thread busy outside active tick",
|
||||
@@ -238,6 +241,18 @@ public final class AntarchyNeoForgeEvents {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean antarchy$isServerThreadIdleWait(Thread tickThread) {
|
||||
for (StackTraceElement element : tickThread.getStackTrace()) {
|
||||
String method = element.getMethodName();
|
||||
if (method.equals("waitUntilNextTick")
|
||||
|| method.equals("waitForTasks")
|
||||
|| method.equals("managedBlock")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static void onVillagerTrades(VillagerTradesEvent event) {
|
||||
if (event.getType() == VillagerProfession.FARMER) {
|
||||
event.getTrades().get(1).add(emeraldForItems(AntarchyObjects.CORN.get(), 20, 16, 2));
|
||||
@@ -384,6 +399,18 @@ public final class AntarchyNeoForgeEvents {
|
||||
}
|
||||
}
|
||||
|
||||
static void handleTimeDilationLogin(PlayerEvent.PlayerLoggedInEvent event) {
|
||||
if (event.getEntity() instanceof ServerPlayer player) {
|
||||
TimeDilationManager.resyncPersistentEffects(player);
|
||||
}
|
||||
}
|
||||
|
||||
static void handleTimeDilationRespawn(PlayerEvent.PlayerRespawnEvent event) {
|
||||
if (event.getEntity() instanceof ServerPlayer player) {
|
||||
TimeDilationManager.resyncPersistentEffects(player);
|
||||
}
|
||||
}
|
||||
|
||||
static void handleTigerEyeLogout(PlayerEvent.PlayerLoggedOutEvent event) {
|
||||
if (event.getEntity() instanceof ServerPlayer player) {
|
||||
TigerEyeCamouflageController.deactivate(player, false);
|
||||
@@ -561,15 +588,6 @@ public final class AntarchyNeoForgeEvents {
|
||||
}
|
||||
|
||||
if (existingInverted == null || existingInverted.getDuration() <= ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS) {
|
||||
if (livingEntity instanceof Player || livingEntity.level().dimension().location().toString().equals("antarchy:thoraxis")) {
|
||||
Antarchy.LOGGER.info(
|
||||
"[antarchy-gravity] overhead antimetal applying inverted effect targetType={} uuid={} pos=({}, {}, {}) dim={} existingDuration={} gameTime={}",
|
||||
livingEntity.getType(), livingEntity.getUUID(), livingEntity.getX(), livingEntity.getY(), livingEntity.getZ(),
|
||||
livingEntity.level().dimension().location(),
|
||||
existingInverted != null ? existingInverted.getDuration() : -1,
|
||||
gameTime
|
||||
);
|
||||
}
|
||||
livingEntity.addEffect(new MobEffectInstance(AntarchyNeoforgeMisc.INVERTED, ANTIMETAL_INVERTED_REFRESH_TICKS, 0, false, false, false));
|
||||
spawnAntimetalInversionParticles(livingEntity);
|
||||
}
|
||||
|
||||
+2
-2
@@ -717,8 +717,8 @@ public final class AntarchyNeoforgeItems {
|
||||
public static final DeferredItem<MantisClawItem> MANTIS_CLAW = ITEMS.register("mantis_claw",
|
||||
() -> new MantisClawItem(Tiers.IRON, new Item.Properties().stacksTo(1).durability(50).rarity(Rarity.UNCOMMON)));
|
||||
public static final DeferredItem<Item> HERCULES_HORN = ITEMS.registerSimpleItem("hercules_horn", new Item.Properties().rarity(Rarity.UNCOMMON));
|
||||
public static final DeferredItem<Item> KING_SCALE = ITEMS.registerSimpleItem("king_scale", new Item.Properties().rarity(Rarity.RARE));
|
||||
public static final DeferredItem<Item> QUEEN_SCALE = ITEMS.registerSimpleItem("queen_scale", new Item.Properties().rarity(Rarity.RARE));
|
||||
public static final DeferredItem<Item> KING_SCALE = ITEMS.registerSimpleItem("king_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant());
|
||||
public static final DeferredItem<Item> QUEEN_SCALE = ITEMS.registerSimpleItem("queen_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant());
|
||||
public static final DeferredItem<Item> CHITIN = ITEMS.registerSimpleItem("chitin", new Item.Properties().rarity(Rarity.UNCOMMON));
|
||||
public static final DeferredItem<Item> JERRY_NUCLEUS = ITEMS.register("jerry_nucleus",
|
||||
() -> new com.craisinlord.antarchy.content.item.JerryNucleusItem(new Item.Properties().rarity(Rarity.UNCOMMON)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"infinity.AmendmentRareOresMixin",
|
||||
"infinity.ConfigGenInvocationMixin",
|
||||
"infinity.PortalCreatorMixin",
|
||||
"infinity.WarpLogicMixin",
|
||||
"level.ClientLevelPartEntitiesAccessor",
|
||||
"level.ServerLevelPartEntitiesAccessor"
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user