anthology split
This commit is contained in:
1 parent
bba2a56671
commit
f7e7bebac3
244 files changed
+452
-11595
No files matched your search
-6
@@ -1,7 +1,6 @@
|
||||
package com.craisinlord.antarchy.neoforge;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.network.ImpactShakeSync;
|
||||
import com.craisinlord.antarchy.config.ConfigResetGuard;
|
||||
import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload;
|
||||
import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync;
|
||||
@@ -31,7 +30,6 @@ public final class AntarchyConfigModuleNeoforge {
|
||||
modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyMiscConfig.SPEC, "antarchy/antarchy_misc.toml");
|
||||
HerculesBeetleImpactShakeSync.setSink((player, ticks) -> PacketDistributor.sendToPlayer(player, new HerculesBeetleImpactShakePayload(ticks)));
|
||||
KingJudgmentFlashSync.setSink((player, ticks) -> PacketDistributor.sendToPlayer(player, new KingJudgmentFlashPayload(ticks)));
|
||||
ImpactShakeSync.setSink(PacketDistributor::sendToPlayer);
|
||||
HordeIntensitySync.setSink(PacketDistributor::sendToPlayer);
|
||||
AntarchyNeoforge.modEventBusTempHolder.addListener(AntarchyConfigModuleNeoforge::onConfigChange);
|
||||
}
|
||||
@@ -683,11 +681,7 @@ public final class AntarchyConfigModuleNeoforge {
|
||||
|
||||
AntarchySettings.setElythiaFireflyParticlesEnabled(AntarchyMiscConfig.elythiaFireflyParticlesEnabled());
|
||||
|
||||
AntarchySettings.setDreamSandEnabled(AntarchyMiscConfig.dreamSandEnabled());
|
||||
AntarchySettings.setDreamSandJumpVelocityMultiplier(AntarchyMiscConfig.dreamSandJumpVelocityMultiplier());
|
||||
AntarchySettings.setDreamSandGravityMultiplier(AntarchyMiscConfig.dreamSandGravityMultiplier());
|
||||
AntarchySettings.setDreamSandFallingBlockGravityMultiplier(AntarchyMiscConfig.dreamSandFallingBlockGravityMultiplier());
|
||||
AntarchySettings.setDreamSandEffectDurationSeconds(AntarchyMiscConfig.dreamSandEffectDurationSeconds());
|
||||
|
||||
AntarchySettings.setIchorWitherEnabled(AntarchyMiscConfig.ichorWitherEnabled());
|
||||
|
||||
|
||||
+1
-13
@@ -9,10 +9,6 @@ public final class AntarchyMiscConfig {
|
||||
private static final ModConfigSpec.BooleanValue ELYTHIA_FIREFLY_PARTICLES_ENABLED;
|
||||
|
||||
// Dream Sand
|
||||
private static final ModConfigSpec.BooleanValue DREAM_SAND_ENABLED;
|
||||
private static final ModConfigSpec.DoubleValue DREAM_SAND_JUMP_VELOCITY_MULTIPLIER;
|
||||
private static final ModConfigSpec.DoubleValue DREAM_SAND_GRAVITY_MULTIPLIER;
|
||||
private static final ModConfigSpec.DoubleValue DREAM_SAND_EFFECT_DURATION_SECONDS;
|
||||
private static final ModConfigSpec.DoubleValue DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER;
|
||||
|
||||
// Ichor
|
||||
@@ -85,11 +81,7 @@ public final class AntarchyMiscConfig {
|
||||
// Dream Sand
|
||||
|
||||
b.push("dreamSand");
|
||||
DREAM_SAND_ENABLED = b.comment("If true, jumping from dream sand applies temporary low gravity until solid ground is touched.").define("enabled", true);
|
||||
DREAM_SAND_JUMP_VELOCITY_MULTIPLIER = b.comment("Multiplier applied to upward jump velocity when leaving dream sand.") .defineInRange("jumpVelocityMultiplier", 1.3D, 0.0D, 16.0D);
|
||||
DREAM_SAND_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to downward velocity while low gravity is active.") .defineInRange("gravityMultiplier", 0.45D, 0.0D, 1.0D);
|
||||
DREAM_SAND_EFFECT_DURATION_SECONDS = b.comment("Seconds the low-gravity effect remains active after leaving dream sand.") .defineInRange("effectDurationSeconds", 7.0D, 0.0D, 60.0D);
|
||||
DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to dream sand's own falling-block gravity (how slowly it falls as a block, distinct from the player low-gravity effect).").defineInRange("fallingBlockGravityMultiplier", 0.4D, 0.0D, 16.0D);
|
||||
DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to dream sand's falling-block gravity, i.e. how slowly it falls as a block.").defineInRange("fallingBlockGravityMultiplier", 0.4D, 0.0D, 16.0D);
|
||||
b.pop();
|
||||
|
||||
|
||||
@@ -200,10 +192,6 @@ public final class AntarchyMiscConfig {
|
||||
|
||||
static boolean elythiaFireflyParticlesEnabled() { return ELYTHIA_FIREFLY_PARTICLES_ENABLED.get(); }
|
||||
|
||||
static boolean dreamSandEnabled() { return DREAM_SAND_ENABLED.get(); }
|
||||
static double dreamSandJumpVelocityMultiplier() { return DREAM_SAND_JUMP_VELOCITY_MULTIPLIER.get(); }
|
||||
static double dreamSandGravityMultiplier() { return DREAM_SAND_GRAVITY_MULTIPLIER.get(); }
|
||||
static double dreamSandEffectDurationSeconds() { return DREAM_SAND_EFFECT_DURATION_SECONDS.get(); }
|
||||
static double dreamSandFallingBlockGravityMultiplier() { return DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER.get(); }
|
||||
|
||||
static boolean ichorWitherEnabled() { return ICHOR_WITHER_ENABLED.get(); }
|
||||
|
||||
@@ -272,12 +272,6 @@ public class AntarchyNeoforge {
|
||||
player,
|
||||
TigerEyeCamouflageSync.payload(player)
|
||||
));
|
||||
com.craisinlord.antarchy.content.time.TimeDilationApi.setSyncDispatcher(
|
||||
com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking::syncRate
|
||||
);
|
||||
com.craisinlord.antarchy.content.time.TimeDilationApi.setFieldSyncDispatcher(
|
||||
com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking::syncFields
|
||||
);
|
||||
if (isSupportedInfinityLoaded()) {
|
||||
InfinityCompat.bind(new NeoForgeInfinityCompat());
|
||||
}
|
||||
@@ -451,7 +445,6 @@ public class AntarchyNeoforge {
|
||||
AntarchyObjects.setLucid(AntarchyNeoforgeEntites.LUCID);
|
||||
AntarchyObjects.setVortex(AntarchyNeoforgeEntites.VORTEX);
|
||||
AntarchyObjects.setWindVortex(() -> AntarchyNeoforgeEntites.WIND_VORTEX.get());
|
||||
AntarchyObjects.setTimeDilationField(() -> AntarchyNeoforgeEntites.TIME_DILATION_FIELD.get());
|
||||
AntarchyObjects.setRoyalBlackHole(() -> AntarchyNeoforgeEntites.ROYAL_BLACK_HOLE.get());
|
||||
AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyNeoforgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get());
|
||||
AntarchyObjects.setVortexChargeProjectile(() -> AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get());
|
||||
|
||||
-2
@@ -6,7 +6,6 @@ import com.craisinlord.antarchy.content.command.CaterpillarCommand;
|
||||
import com.craisinlord.antarchy.content.command.DimensionalTearCommand;
|
||||
import com.craisinlord.antarchy.content.command.QueenLocateCommand;
|
||||
import com.craisinlord.antarchy.content.command.RoyalCommand;
|
||||
import com.craisinlord.antarchy.content.time.TimeDilationCommand;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
||||
@@ -25,7 +24,6 @@ public final class AntarchyNeoforgeEvents {
|
||||
CaterpillarCommand.register(event.getDispatcher());
|
||||
DimensionalTearCommand.register(event.getDispatcher());
|
||||
QueenLocateCommand.register(event.getDispatcher());
|
||||
TimeDilationCommand.register(event.getDispatcher());
|
||||
RoyalCommand.register(event.getDispatcher());
|
||||
com.craisinlord.antarchy.content.command.PortalGunCommand.register(event.getDispatcher());
|
||||
}
|
||||
|
||||
+1
-18
@@ -16,7 +16,6 @@ import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeItems;
|
||||
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
|
||||
import com.mojang.blaze3d.shaders.FogShape;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import net.minecraft.client.model.BoatModel;
|
||||
import net.minecraft.client.model.ArmorStandModel;
|
||||
@@ -39,7 +38,6 @@ import net.minecraft.client.renderer.BiomeColors;
|
||||
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
|
||||
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.ShaderInstance;
|
||||
import net.minecraft.client.renderer.blockentity.CampfireRenderer;
|
||||
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
||||
import net.minecraft.client.renderer.item.ItemProperties;
|
||||
@@ -58,7 +56,6 @@ import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent;
|
||||
import net.neoforged.neoforge.client.event.RegisterShadersEvent;
|
||||
import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent;
|
||||
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent;
|
||||
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
|
||||
@@ -101,23 +98,10 @@ public final class AntarchyNeoForgeClient {
|
||||
private AntarchyNeoForgeClient() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerPortalViewShader(RegisterShadersEvent event) {
|
||||
PortalGunPortalViewRenderer.clearPortalViewShader();
|
||||
try {
|
||||
event.registerShader(
|
||||
new ShaderInstance(event.getResourceProvider(), ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "portal_view"), DefaultVertexFormat.POSITION_TEX),
|
||||
PortalGunPortalViewRenderer::setPortalViewShader
|
||||
);
|
||||
} catch (java.io.IOException | RuntimeException exception) {
|
||||
Antarchy.LOGGER.error("Failed to register portal view shader", exception);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void clientSetup(FMLClientSetupEvent event) {
|
||||
Antarchy.physicalClient = true;
|
||||
com.craisinlord.antarchy.content.movement.AntarchyGravityHooks.registerClient();
|
||||
com.craisinlord.antarchy.content.AntarchyAnthologyHooks.registerClient();
|
||||
event.enqueueWork(() -> {
|
||||
AntarchyArchivePreviews.register();
|
||||
AntarchyComputerGames.register();
|
||||
@@ -187,7 +171,6 @@ public final class AntarchyNeoForgeClient {
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.WIND_VORTEX.get(), WindVortexRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.TIME_DILATION_FIELD.get(), TimeDilationFieldRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBlackHoleRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalAssailantBlackHoleRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.CRITTER_CAGE_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.client.CameraShakeClientState;
|
||||
import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState;
|
||||
import com.craisinlord.antarchy.content.item.BigBerthaItem;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.event.ViewportEvent;
|
||||
|
||||
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
|
||||
public final class CameraShakeHandler {
|
||||
private static final int TORETERROR_SHAKE_TICKS = 25;
|
||||
|
||||
private CameraShakeHandler() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
if (mc.level == null || mc.player == null) {
|
||||
CameraShakeClientState.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
float shakeStrength = CameraShakeClientState.getStrength(event.getCamera().getPosition());
|
||||
|
||||
int beetleShakeTicks = HerculesBeetleImpactShakeClientState.getTicks();
|
||||
if (beetleShakeTicks > 0) {
|
||||
shakeStrength += (float) beetleShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F;
|
||||
}
|
||||
|
||||
int bigBerthaShakeTicks = BigBerthaItem.clientShakeTicks;
|
||||
if (bigBerthaShakeTicks > 0) {
|
||||
shakeStrength += (float) bigBerthaShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F;
|
||||
}
|
||||
|
||||
if (shakeStrength <= 0.0F) return;
|
||||
|
||||
float time = (float) (mc.player.tickCount + event.getPartialTick());
|
||||
event.setYaw(event.getYaw() + Mth.sin(time * 1.5F) * shakeStrength * 2.5F);
|
||||
event.setPitch(event.getPitch() + Mth.cos(time * 1.8F) * shakeStrength * 2.0F);
|
||||
event.setRoll(event.getRoll() + Mth.sin(time * 2.2F) * shakeStrength * 1.5F);
|
||||
}
|
||||
}
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.neoforge.mixins.level.ClientLevelPartEntitiesAccessor;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.neoforge.entity.PartEntity;
|
||||
|
||||
public final class ClientPartEntityRegistry {
|
||||
private ClientPartEntityRegistry() {
|
||||
}
|
||||
|
||||
public static Int2ObjectMap<PartEntity<?>> get(Level level) {
|
||||
if (level instanceof ClientLevel clientLevel) {
|
||||
return ((ClientLevelPartEntitiesAccessor) clientLevel).antarchy$getPartEntities();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
||||
|
||||
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
|
||||
public final class ClientTimeDilationHandler {
|
||||
private ClientTimeDilationHandler() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onClientTick(ClientTickEvent.Post event) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
if (mc.level != null) {
|
||||
ClientTimeDilationTicker.tick(mc.level);
|
||||
}
|
||||
}
|
||||
}
|
||||
-2
@@ -1,7 +1,6 @@
|
||||
package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.client.CameraShakeClientState;
|
||||
import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState;
|
||||
import com.craisinlord.antarchy.content.client.HordeClientState;
|
||||
import com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState;
|
||||
@@ -30,7 +29,6 @@ public final class HerculesBeetleClientHandler {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onClientTick(ClientTickEvent.Post event) {
|
||||
CameraShakeClientState.tick();
|
||||
HerculesBeetleImpactShakeClientState.tick();
|
||||
KingJudgmentFlashClientState.tick();
|
||||
HordeClientState.tick();
|
||||
|
||||
-22
@@ -1,22 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalViewRenderer;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
|
||||
|
||||
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
|
||||
public final class PortalGunPortalViewRenderHandler {
|
||||
private PortalGunPortalViewRenderHandler() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRenderLevelStage(RenderLevelStageEvent event) {
|
||||
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_LEVEL) {
|
||||
return;
|
||||
}
|
||||
PortalGunPortalViewRenderer.render(event.getCamera(), event.getModelViewMatrix(), event.getProjectionMatrix(), event.getPartialTick());
|
||||
}
|
||||
}
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.client.PortalGunRollClientState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
||||
|
||||
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
|
||||
public final class PortalGunRollClientHandler {
|
||||
private PortalGunRollClientHandler() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onClientTick(ClientTickEvent.Post event) {
|
||||
PortalGunRollClientState.tick(Minecraft.getInstance());
|
||||
}
|
||||
}
|
||||
-207
@@ -1,207 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.entity.multipart;
|
||||
|
||||
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.anthology.gravity.GravityApi;
|
||||
import com.craisinlord.anthology.gravity.GravityRotationUtil;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityDimensions;
|
||||
import net.minecraft.world.entity.OwnableEntity;
|
||||
import net.minecraft.world.entity.Pose;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.neoforged.neoforge.entity.PartEntity;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class MultipartPartEntity extends PartEntity<Entity> implements OwnableEntity, MultipartPartAccess {
|
||||
private final MultipartEntityOwner owner;
|
||||
private final int partIndex;
|
||||
private final MultipartPartDefinition definition;
|
||||
|
||||
public MultipartPartEntity(Entity parent, MultipartEntityOwner owner, int partIndex, MultipartPartDefinition definition) {
|
||||
super(parent);
|
||||
this.owner = owner;
|
||||
this.partIndex = partIndex;
|
||||
this.definition = definition;
|
||||
this.setNoGravity(true);
|
||||
this.refreshDimensions();
|
||||
this.antarchy$syncFromParent();
|
||||
}
|
||||
|
||||
public int getPartIndex() {
|
||||
return this.partIndex;
|
||||
}
|
||||
|
||||
public String getPartName() {
|
||||
return this.definition.name();
|
||||
}
|
||||
|
||||
public float getDamageMultiplier() {
|
||||
return this.definition.damageMultiplier();
|
||||
}
|
||||
|
||||
public MultipartPartDefinition getPartDefinition() {
|
||||
return this.definition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable java.util.UUID getOwnerUUID() {
|
||||
Entity parent = this.getParent();
|
||||
return parent instanceof OwnableEntity ownable ? ownable.getOwnerUUID() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityDimensions getDimensions(Pose pose) {
|
||||
return EntityDimensions.scalable(this.definition.width(), this.definition.height());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void antarchy$syncFromParent() {
|
||||
Entity parent = this.getParent();
|
||||
if (parent == null || parent.isRemoved()) {
|
||||
return;
|
||||
}
|
||||
|
||||
GravityApi.applySyncedState(
|
||||
this,
|
||||
GravityApi.getGravityDirection(parent),
|
||||
GravityApi.getPrevGravityDirection(parent),
|
||||
GravityApi.isGravityForced(parent),
|
||||
GravityApi.getTransitionDuration(parent),
|
||||
GravityApi.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 localOffset = new Vec3(
|
||||
forward.x * this.definition.forwardOffset() + right.x * this.definition.lateralOffset(),
|
||||
this.definition.yOffset(),
|
||||
forward.z * this.definition.forwardOffset() + right.z * this.definition.lateralOffset());
|
||||
Vec3 offset = GravityRotationUtil.vecPlayerToWorld(localOffset, GravityApi.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;
|
||||
this.yo = oldY;
|
||||
this.zo = oldZ;
|
||||
this.xOld = oldX;
|
||||
this.yOld = oldY;
|
||||
this.zOld = oldZ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean is(Entity entity) {
|
||||
return entity == this || entity == this.getParent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPickable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAttackable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPushable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeCollidedWith() {
|
||||
// Always true so player melee raycasts (ProjectileUtil.getEntityHitResult) can find this part.
|
||||
// Physical push is prevented separately via isPushable()=false and canCollideWith()=false.
|
||||
return !this.isRemoved();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCollideWith(Entity entity) {
|
||||
if (!this.definition.collisionEnabled()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Entity parent = this.getParent();
|
||||
if (entity == parent) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entity instanceof PartEntity<?> otherPart && otherPart.getParent() == parent) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return entity.canBeCollidedWith() && !this.isPassengerOfSameVehicle(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldBeSaved() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPickResult() {
|
||||
Entity parent = this.getParent();
|
||||
return parent == null ? ItemStack.EMPTY : parent.getPickResult();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hurt(DamageSource source, float amount) {
|
||||
Entity parent = this.getParent();
|
||||
if (parent == null || parent.isRemoved()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.level().isClientSide()) {
|
||||
if (source.getEntity() instanceof Player) {
|
||||
MultipartFramework.sendMultipartAttack(parent.getUUID(), this.partIndex, amount * this.definition.damageMultiplier());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return this.owner.antarchy$hurtMultipartPart(this, source, amount * this.definition.damageMultiplier());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerableTo(DamageSource source) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand hand) {
|
||||
Entity parent = this.getParent();
|
||||
if (parent == null || parent.isRemoved()) {
|
||||
return InteractionResult.PASS;
|
||||
}
|
||||
|
||||
if (this.level().isClientSide()) {
|
||||
MultipartFramework.sendMultipartInteract(parent.getUUID(), this.partIndex, hand.ordinal());
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
return this.owner.antarchy$interactMultipartPart(this, player, vec, hand);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void readAdditionalSaveData(CompoundTag tag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addAdditionalSaveData(CompoundTag tag) {
|
||||
}
|
||||
}
|
||||
-62
@@ -1,62 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.entity.multipart;
|
||||
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
|
||||
import com.craisinlord.antarchy.neoforge.mixins.level.ServerLevelPartEntitiesAccessor;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.neoforge.entity.PartEntity;
|
||||
|
||||
public final class MultipartPartLevelRegistry {
|
||||
private MultipartPartLevelRegistry() {
|
||||
}
|
||||
|
||||
public static void register(MultipartEntityOwner owner) {
|
||||
Entity[] parts = owner.antarchy$getMultipartParts();
|
||||
if (parts == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Int2ObjectMap<PartEntity<?>> registry = getRegistry(((Entity) owner).level());
|
||||
if (registry == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Entity part : parts) {
|
||||
if (part instanceof PartEntity<?> partEntity) {
|
||||
registry.put(partEntity.getId(), partEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void unregister(MultipartEntityOwner owner) {
|
||||
Entity[] parts = owner.antarchy$getMultipartParts();
|
||||
if (parts == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Int2ObjectMap<PartEntity<?>> registry = getRegistry(((Entity) owner).level());
|
||||
if (registry == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Entity part : parts) {
|
||||
if (part instanceof PartEntity<?> partEntity) {
|
||||
registry.remove(partEntity.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Int2ObjectMap<PartEntity<?>> getRegistry(Level level) {
|
||||
if (level instanceof ServerLevel serverLevel) {
|
||||
return ((ServerLevelPartEntitiesAccessor) serverLevel).antarchy$getPartEntities();
|
||||
}
|
||||
|
||||
if (level.isClientSide()) {
|
||||
return com.craisinlord.antarchy.neoforge.client.ClientPartEntityRegistry.get(level);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.mixins.entity;
|
||||
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.neoforged.neoforge.entity.PartEntity;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
@Mixin(Entity.class)
|
||||
/*
|
||||
* Exposes multipart child lookup from base entities.
|
||||
*/
|
||||
public abstract class MultipartEntityBridgeMixin {
|
||||
@Unique
|
||||
private Entity[] antarchy$multipartSourceParts;
|
||||
|
||||
@Unique
|
||||
private PartEntity<?>[] antarchy$multipartBridgeParts;
|
||||
|
||||
public boolean isMultipartEntity() {
|
||||
return (Object) this instanceof MultipartEntityOwner;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PartEntity<?>[] getParts() {
|
||||
if (!((Object) this instanceof MultipartEntityOwner owner)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Entity[] parts = owner.antarchy$getMultipartParts();
|
||||
if (parts == null) {
|
||||
parts = owner.antarchy$createMultipartParts();
|
||||
owner.antarchy$setMultipartParts(parts);
|
||||
owner.antarchy$syncMultipartParts();
|
||||
}
|
||||
|
||||
if (parts.length == 0) {
|
||||
return new PartEntity<?>[0];
|
||||
}
|
||||
|
||||
if (this.antarchy$multipartSourceParts != parts || this.antarchy$multipartBridgeParts == null || this.antarchy$multipartBridgeParts.length != parts.length) {
|
||||
PartEntity<?>[] bridgedParts = new PartEntity<?>[parts.length];
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
if (!(parts[i] instanceof PartEntity<?> part)) {
|
||||
throw new IllegalStateException("Multipart owner returned a non-PartEntity child: " + parts[i]);
|
||||
}
|
||||
bridgedParts[i] = part;
|
||||
}
|
||||
this.antarchy$multipartSourceParts = parts;
|
||||
this.antarchy$multipartBridgeParts = bridgedParts;
|
||||
}
|
||||
|
||||
return this.antarchy$multipartBridgeParts;
|
||||
}
|
||||
}
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.mixins.entity;
|
||||
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
|
||||
import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartLevelRegistry;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.level.entity.EntityInLevelCallback;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(Entity.class)
|
||||
/*
|
||||
* Keeps multipart child entities registered in NeoForge levels.
|
||||
*/
|
||||
public abstract class MultipartEntityLevelRegistryMixin {
|
||||
@Inject(method = "setLevelCallback", at = @At("TAIL"))
|
||||
private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) {
|
||||
if ((Object) this instanceof MultipartEntityOwner owner
|
||||
&& entityInLevelCallback != EntityInLevelCallback.NULL) {
|
||||
if (owner.antarchy$getMultipartParts() == null) {
|
||||
owner.antarchy$spawnMultipartParts();
|
||||
}
|
||||
MultipartPartLevelRegistry.register(owner);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "setRemoved", at = @At("HEAD"))
|
||||
private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) {
|
||||
if ((Object) this instanceof MultipartEntityOwner owner) {
|
||||
MultipartPartLevelRegistry.unregister(owner);
|
||||
}
|
||||
}
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.mixins.level;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.neoforged.neoforge.entity.PartEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(ClientLevel.class)
|
||||
/*
|
||||
* Accessor for client part-entity storage.
|
||||
*/
|
||||
public interface ClientLevelPartEntitiesAccessor {
|
||||
@Accessor("partEntities")
|
||||
Int2ObjectMap<PartEntity<?>> antarchy$getPartEntities();
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.mixins.level;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.neoforged.neoforge.entity.PartEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(ServerLevel.class)
|
||||
/*
|
||||
* Accessor for server part-entity storage.
|
||||
*/
|
||||
public interface ServerLevelPartEntitiesAccessor {
|
||||
@Accessor("dragonParts")
|
||||
Int2ObjectMap<PartEntity<?>> antarchy$getPartEntities();
|
||||
}
|
||||
-30
@@ -12,12 +12,9 @@ import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload;
|
||||
import com.craisinlord.antarchy.content.network.GravityGunScrollPayload;
|
||||
import com.craisinlord.antarchy.content.network.TemporalTunerScrollPayload;
|
||||
import com.craisinlord.antarchy.content.item.TemporalTunerItem;
|
||||
import com.craisinlord.antarchy.content.network.ImpactShakePayload;
|
||||
import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload;
|
||||
import com.craisinlord.antarchy.content.client.CameraShakeClientState;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
||||
@@ -36,10 +33,6 @@ public final class AntarchyGravityNetworking {
|
||||
com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.STREAM_CODEC,
|
||||
AntarchyGravityNetworking::handlePortalGunIndicatorRequest
|
||||
).playToClient(
|
||||
ImpactShakePayload.TYPE,
|
||||
ImpactShakePayload.STREAM_CODEC,
|
||||
AntarchyGravityNetworking::handleImpactShake
|
||||
).playToServer(
|
||||
GravityGunPrimaryPayload.TYPE,
|
||||
GravityGunPrimaryPayload.STREAM_CODEC,
|
||||
@@ -48,20 +41,6 @@ public final class AntarchyGravityNetworking {
|
||||
PortalGunPrimaryPayload.TYPE,
|
||||
PortalGunPrimaryPayload.STREAM_CODEC,
|
||||
AntarchyGravityNetworking::handlePortalGunPrimary
|
||||
).playToServer(
|
||||
com.craisinlord.antarchy.content.network.PortalGunTransitPayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunTransitPayload.STREAM_CODEC,
|
||||
(payload, context) -> {
|
||||
if (context.player() instanceof ServerPlayer serverPlayer && serverPlayer.getServer() != null && serverPlayer.getServer().isSameThread()) {
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunTransitHandler.handle(serverPlayer, payload);
|
||||
return;
|
||||
}
|
||||
context.enqueueWork(() -> {
|
||||
if (context.player() instanceof ServerPlayer serverPlayer) {
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunTransitHandler.handle(serverPlayer, payload);
|
||||
}
|
||||
});
|
||||
}
|
||||
).playToServer(
|
||||
com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.STREAM_CODEC,
|
||||
@@ -105,15 +84,6 @@ public final class AntarchyGravityNetworking {
|
||||
);
|
||||
}
|
||||
|
||||
private static void handleImpactShake(ImpactShakePayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> CameraShakeClientState.triggerImpact(
|
||||
new Vec3(payload.x(), payload.y(), payload.z()),
|
||||
payload.intensity(),
|
||||
payload.durationTicks(),
|
||||
payload.radius()
|
||||
));
|
||||
}
|
||||
|
||||
private static void handleGravityGunScroll(GravityGunScrollPayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
|
||||
|
||||
-52
@@ -1,52 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.network;
|
||||
|
||||
import com.craisinlord.antarchy.content.network.TimeDilationRatePayload;
|
||||
import com.craisinlord.antarchy.content.network.TimeDilationFieldsPayload;
|
||||
import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot;
|
||||
import java.util.List;
|
||||
import com.craisinlord.antarchy.content.time.TimeDilationApi;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
||||
|
||||
public final class AntarchyTimeDilationNetworking {
|
||||
private AntarchyTimeDilationNetworking() {
|
||||
}
|
||||
|
||||
public static void register(PayloadRegistrar registrar) {
|
||||
registrar.playToClient(
|
||||
TimeDilationRatePayload.TYPE,
|
||||
TimeDilationRatePayload.STREAM_CODEC,
|
||||
AntarchyTimeDilationNetworking::handleTimeDilationRate
|
||||
);
|
||||
registrar.playToClient(
|
||||
TimeDilationFieldsPayload.TYPE,
|
||||
TimeDilationFieldsPayload.STREAM_CODEC,
|
||||
AntarchyTimeDilationNetworking::handleTimeDilationFields
|
||||
);
|
||||
}
|
||||
|
||||
public static void syncRate(Entity entity, double rate) {
|
||||
PacketDistributor.sendToPlayersTrackingEntityAndSelf(entity, new TimeDilationRatePayload(entity.getUUID(), rate));
|
||||
}
|
||||
|
||||
public static void syncRateToPlayer(ServerPlayer player, Entity entity, double rate) {
|
||||
PacketDistributor.sendToPlayer(player, new TimeDilationRatePayload(entity.getUUID(), rate));
|
||||
}
|
||||
|
||||
public static void syncFields(ServerPlayer player, List<TimeDilationFieldSnapshot> fields) {
|
||||
PacketDistributor.sendToPlayer(player, new TimeDilationFieldsPayload(fields));
|
||||
}
|
||||
|
||||
private static void handleTimeDilationRate(TimeDilationRatePayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
TimeDilationApi.applySyncedRate(payload.entityUuid(), payload.rate());
|
||||
});
|
||||
}
|
||||
|
||||
private static void handleTimeDilationFields(TimeDilationFieldsPayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> com.craisinlord.antarchy.content.client.ClientTimeDilationTicker.applyFields(payload.fields()));
|
||||
}
|
||||
}
|
||||
-95
@@ -1,95 +0,0 @@
|
||||
package com.craisinlord.antarchy.neoforge.network;
|
||||
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
|
||||
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload;
|
||||
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
||||
|
||||
public final class MultipartNetworking {
|
||||
private MultipartNetworking() {
|
||||
}
|
||||
|
||||
public static void register(PayloadRegistrar registrar) {
|
||||
registrar.playToServer(
|
||||
MultipartAttackPayload.TYPE,
|
||||
MultipartAttackPayload.STREAM_CODEC,
|
||||
MultipartNetworking::handleAttack
|
||||
).playToServer(
|
||||
MultipartInteractPayload.TYPE,
|
||||
MultipartInteractPayload.STREAM_CODEC,
|
||||
MultipartNetworking::handleInteract
|
||||
);
|
||||
}
|
||||
|
||||
private static void handleAttack(MultipartAttackPayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId());
|
||||
if (!(entity instanceof MultipartEntityOwner owner)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity[] parts = owner.antarchy$getMultipartParts();
|
||||
if (parts == null) {
|
||||
parts = owner.antarchy$createMultipartParts();
|
||||
owner.antarchy$setMultipartParts(parts);
|
||||
owner.antarchy$syncMultipartParts();
|
||||
}
|
||||
|
||||
if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity part = parts[payload.partIndex()];
|
||||
if (part == null || part.isRemoved()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (serverPlayer.distanceToSqr(part) > 10000.0D) {
|
||||
return;
|
||||
}
|
||||
|
||||
serverPlayer.attack(part);
|
||||
});
|
||||
}
|
||||
|
||||
private static void handleInteract(MultipartInteractPayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId());
|
||||
if (!(entity instanceof MultipartEntityOwner owner)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity[] parts = owner.antarchy$getMultipartParts();
|
||||
if (parts == null) {
|
||||
parts = owner.antarchy$createMultipartParts();
|
||||
owner.antarchy$setMultipartParts(parts);
|
||||
owner.antarchy$syncMultipartParts();
|
||||
}
|
||||
|
||||
if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity part = parts[payload.partIndex()];
|
||||
if (part == null || part.isRemoved()) {
|
||||
return;
|
||||
}
|
||||
|
||||
InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND;
|
||||
owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand);
|
||||
});
|
||||
}
|
||||
}
|
||||
-49
@@ -20,7 +20,6 @@ import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
|
||||
import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity;
|
||||
import com.craisinlord.antarchy.content.entity.lucid.LucidEntity;
|
||||
import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity;
|
||||
import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework;
|
||||
import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity;
|
||||
import com.craisinlord.antarchy.content.entity.vortex.VortexEntity;
|
||||
import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager;
|
||||
@@ -32,11 +31,9 @@ import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper;
|
||||
import com.craisinlord.antarchy.content.AntarchyTags;
|
||||
import com.craisinlord.antarchy.mixins.PoiTypesAccessor;
|
||||
import com.craisinlord.antarchy.content.portal.PermanentPortalManager;
|
||||
import com.craisinlord.antarchy.content.time.TimeDilationManager;
|
||||
import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController;
|
||||
import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync;
|
||||
import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes;
|
||||
import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartEntity;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
@@ -139,13 +136,10 @@ public final class AntarchyNeoForgeEvents {
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassWardRemoved);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassWardExpired);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickBloodglassRecharge);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickTimeDilation);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickAntArrivals);
|
||||
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);
|
||||
@@ -258,10 +252,6 @@ public final class AntarchyNeoForgeEvents {
|
||||
}
|
||||
}
|
||||
|
||||
static void tickTimeDilation(ServerTickEvent.Post event) {
|
||||
TimeDilationManager.tickServer(event.getServer());
|
||||
}
|
||||
|
||||
static void tickAntArrivals(ServerTickEvent.Post event) {
|
||||
com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.tick(event.getServer());
|
||||
}
|
||||
@@ -326,29 +316,11 @@ public final class AntarchyNeoForgeEvents {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getTarget() instanceof com.craisinlord.antarchy.content.time.TimeDilationEntityAccess access
|
||||
&& event.getEntity() instanceof ServerPlayer trackingPlayer) {
|
||||
com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking.syncRateToPlayer(
|
||||
trackingPlayer, event.getTarget(), access.antarchy$getTimeDilationRate()
|
||||
);
|
||||
}
|
||||
if (event.getTarget() instanceof ServerPlayer trackedPlayer && event.getEntity() instanceof ServerPlayer trackingPlayer) {
|
||||
TigerEyeCamouflageSync.syncTo(trackingPlayer, trackedPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -364,7 +336,6 @@ public final class AntarchyNeoForgeEvents {
|
||||
|
||||
static void handleTigerEyeRespawn(PlayerEvent.PlayerRespawnEvent event) {
|
||||
if (event.getEntity() instanceof ServerPlayer player) {
|
||||
com.craisinlord.antarchy.content.time.ChronosphereManager.refresh(player);
|
||||
TigerEyeCamouflageController.deactivate(player, false);
|
||||
TigerEyeCamouflageSync.sync(player);
|
||||
}
|
||||
@@ -372,14 +343,12 @@ public final class AntarchyNeoForgeEvents {
|
||||
|
||||
static void handleTigerEyeLogin(PlayerEvent.PlayerLoggedInEvent event) {
|
||||
if (event.getEntity() instanceof ServerPlayer player) {
|
||||
com.craisinlord.antarchy.content.time.ChronosphereManager.refresh(player);
|
||||
TigerEyeCamouflageSync.sync(player);
|
||||
}
|
||||
}
|
||||
|
||||
static void handleTigerEyeDimensionChange(PlayerEvent.PlayerChangedDimensionEvent event) {
|
||||
if (event.getEntity() instanceof ServerPlayer player) {
|
||||
com.craisinlord.antarchy.content.time.ChronosphereManager.refresh(player);
|
||||
TigerEyeCamouflageController.deactivate(player, false);
|
||||
TigerEyeCamouflageSync.sync(player);
|
||||
}
|
||||
@@ -1403,24 +1372,6 @@ public final class AntarchyNeoForgeEvents {
|
||||
VortexChargeProjectileEntity.defaultItemSupplier = () -> AntarchyNeoforgeItems.VORTEX_CHARGE.get();
|
||||
VortexChargeProjectileEntity.projectileTypeSupplier = () -> AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get();
|
||||
VortexChargeProjectileEntity.windVortexTypeSupplier = () -> AntarchyNeoforgeEntites.WIND_VORTEX.get();
|
||||
MultipartFramework.bootstrap(
|
||||
(owner, partIndex, spec) -> new MultipartPartEntity((Entity) owner, owner, partIndex, spec),
|
||||
new MultipartFramework.NetworkBridge() {
|
||||
@Override
|
||||
public void sendAttack(java.util.UUID parentId, int partIndex, float damage) {
|
||||
net.neoforged.neoforge.network.PacketDistributor.sendToServer(
|
||||
new com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload(parentId, partIndex, damage)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendInteract(java.util.UUID parentId, int partIndex, int handId) {
|
||||
net.neoforged.neoforge.network.PacketDistributor.sendToServer(
|
||||
new com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload(parentId, partIndex, handId)
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f);
|
||||
|
||||
-8
@@ -68,7 +68,6 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity;
|
||||
import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity;
|
||||
import com.craisinlord.antarchy.content.entity.vortex.VortexEntity;
|
||||
import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity;
|
||||
import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity;
|
||||
import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity;
|
||||
import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity;
|
||||
import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity;
|
||||
@@ -394,13 +393,6 @@ public final class AntarchyNeoforgeEntites {
|
||||
.updateInterval(2)
|
||||
.fireImmune()
|
||||
.build("royal_assailant_black_hole"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<TimeDilationFieldEntity>> TIME_DILATION_FIELD = ENTITY_TYPES.register("time_dilation_field",
|
||||
() -> EntityType.Builder.<TimeDilationFieldEntity>of(TimeDilationFieldEntity::new, MobCategory.MISC)
|
||||
.sized(0.5F, 0.5F)
|
||||
.clientTrackingRange(16)
|
||||
.updateInterval(20)
|
||||
.fireImmune()
|
||||
.build("time_dilation_field"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<LucidBoltEntity>> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt",
|
||||
() -> EntityType.Builder.<LucidBoltEntity>of(LucidBoltEntity::new, MobCategory.MISC)
|
||||
.sized(0.3F, 0.3F)
|
||||
|
||||
+4
-8
@@ -10,8 +10,6 @@ import com.craisinlord.antarchy.content.effect.BloodMoonMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.GoopedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.GrowthMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.CommandedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.DilatedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.ContractedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.ShrinkMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.StinkyMobEffect;
|
||||
@@ -179,8 +177,6 @@ public final class AntarchyNeoforgeMisc {
|
||||
public static final DeferredHolder<MobEffect, BloodMoonMobEffect> BLOOD_MOON = MOB_EFFECTS.register("blood_moon", BloodMoonMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, ParalyzedMobEffect> PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, CommandedMobEffect> COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, DilatedMobEffect> DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, ContractedMobEffect> CONTRACTED = MOB_EFFECTS.register("contracted", ContractedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, StinkyMobEffect> STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, GoopedMobEffect> GOOPED = MOB_EFFECTS.register("gooped", GoopedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, com.craisinlord.antarchy.content.effect.BloodglassWardEffect> BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new);
|
||||
@@ -200,13 +196,13 @@ public final class AntarchyNeoforgeMisc {
|
||||
public static final DeferredHolder<Potion, Potion> LONG_COMMAND = POTIONS.register("long_command",
|
||||
() -> new Potion("command", new MobEffectInstance(COMMANDED, 1200)));
|
||||
public static final DeferredHolder<Potion, Potion> TIME_DILATION = POTIONS.register("time_dilation",
|
||||
() -> new Potion(new MobEffectInstance(DILATED, 1200)));
|
||||
() -> new Potion(new MobEffectInstance(AnthologyEffects.dilated(), 1200)));
|
||||
public static final DeferredHolder<Potion, Potion> LONG_TIME_DILATION = POTIONS.register("long_time_dilation",
|
||||
() -> new Potion("time_dilation", new MobEffectInstance(DILATED, 1200, 1)));
|
||||
() -> new Potion("time_dilation", new MobEffectInstance(AnthologyEffects.dilated(), 1200, 1)));
|
||||
public static final DeferredHolder<Potion, Potion> TIME_CONTRACTION = POTIONS.register("time_contraction",
|
||||
() -> new Potion(new MobEffectInstance(CONTRACTED, 1200)));
|
||||
() -> new Potion(new MobEffectInstance(AnthologyEffects.contracted(), 1200)));
|
||||
public static final DeferredHolder<Potion, Potion> LONG_TIME_CONTRACTION = POTIONS.register("long_time_contraction",
|
||||
() -> new Potion("time_contraction", new MobEffectInstance(CONTRACTED, 1200, 1)));
|
||||
() -> new Potion("time_contraction", new MobEffectInstance(AnthologyEffects.contracted(), 1200, 1)));
|
||||
public static final DeferredHolder<Potion, Potion> STINKY_POTION = POTIONS.register("stinky",
|
||||
() -> new Potion(new MobEffectInstance(STINKY, 1200)));
|
||||
public static final DeferredHolder<Potion, Potion> LONG_STINKY = POTIONS.register("long_stinky",
|
||||
|
||||
-4
@@ -12,8 +12,6 @@ import com.craisinlord.antarchy.neoforge.network.BrutalflyElytraNetworking;
|
||||
import com.craisinlord.antarchy.neoforge.network.DorrieJumpNetworking;
|
||||
import com.craisinlord.antarchy.neoforge.network.HerculesBeetleNetworking;
|
||||
import com.craisinlord.antarchy.neoforge.network.SpringyBootsNetworking;
|
||||
import com.craisinlord.antarchy.neoforge.network.MultipartNetworking;
|
||||
import com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
|
||||
|
||||
@@ -41,7 +39,6 @@ public class AntarchyNeoforgePayloadHandlers {
|
||||
(payload, ctx) -> ctx.enqueueWork(() -> com.craisinlord.antarchy.content.client.AntarchyGameClientState.update(payload))
|
||||
);
|
||||
AntarchyGravityNetworking.register(registrar);
|
||||
AntarchyTimeDilationNetworking.register(registrar);
|
||||
BrutalflyElytraNetworking.register(registrar);
|
||||
SpringyBootsNetworking.register(registrar);
|
||||
DorrieJumpNetworking.register(registrar);
|
||||
@@ -182,6 +179,5 @@ public class AntarchyNeoforgePayloadHandlers {
|
||||
com.craisinlord.antarchy.content.client.HordeClientState.update(payload.intensity())
|
||||
)
|
||||
);
|
||||
MultipartNetworking.register(registrar);
|
||||
}
|
||||
}
|
||||
@@ -17,9 +17,6 @@ displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy"
|
||||
[[mixins]]
|
||||
config = "antarchy-common.mixins.json"
|
||||
|
||||
[[mixins]]
|
||||
config = "antarchy-sodium.mixins.json"
|
||||
|
||||
[[mixins]]
|
||||
config = "antarchy-neoforge.mixins.json"
|
||||
|
||||
|
||||
@@ -6,18 +6,14 @@
|
||||
"mixins": [
|
||||
"compat.SablePhysicsColliderBlockGetterMixin",
|
||||
"item.BucketItemThoraxisWaterMixin",
|
||||
"entity.MultipartEntityBridgeMixin",
|
||||
"entity.MultipartEntityLevelRegistryMixin",
|
||||
"entity.ParalyzedMobFreezeMixin",
|
||||
"infinity.AmendmentRareOresMixin",
|
||||
"infinity.ConfigGenInvocationMixin",
|
||||
"infinity.PortalCreatorMixin",
|
||||
"infinity.PortalCreatorInvoker",
|
||||
"infinity.WarpLogicMixin",
|
||||
"level.ServerLevelPartEntitiesAccessor"
|
||||
"infinity.WarpLogicMixin"
|
||||
],
|
||||
"client": [
|
||||
"level.ClientLevelPartEntitiesAccessor"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
||||
Reference in new issue
Block a user