moved miners dream to seperate mod
new portal gun draft fixed scorched guns mixin sodium compat layer
This commit is contained in:
1 parent
23599c4c59
commit
c7cb48edfb
193 files changed
+6528
-2821
No files matched your search
@@ -46,6 +46,9 @@ neoForge {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
if (providers.gradleProperty('antarchySodiumCompatTest').orNull == 'true') {
|
||||
runtimeOnly(files(rootProject.file("infinite_dimensions_jars/sodium-neoforge-0.8.13+mc1.21.1.jar")))
|
||||
}
|
||||
compileOnly(files(rootProject.file("infinite_dimensions_jars/antos-neoforge-1.21.1-${antos_version}.jar")))
|
||||
runtimeOnly(files(rootProject.file("infinite_dimensions_jars/antos-neoforge-1.21.1-${antos_version}.jar")))
|
||||
compileOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_neoforge}")
|
||||
|
||||
+9
-5
@@ -630,11 +630,6 @@ public final class AntarchyConfigModuleNeoforge {
|
||||
AntarchySettings.setCritterCageMaxCapturableWidth(AntarchyToolsConfig.critterCageMaxCapturableWidth());
|
||||
AntarchySettings.setCritterCageMaxCapturableHeight(AntarchyToolsConfig.critterCageMaxCapturableHeight());
|
||||
|
||||
AntarchySettings.setMinersDreamEnabled(AntarchyToolsConfig.minersDreamEnabled());
|
||||
AntarchySettings.setMinersDreamMinimumRange(AntarchyToolsConfig.minersDreamMinimumRange());
|
||||
AntarchySettings.setMinersDreamMaximumRange(AntarchyToolsConfig.minersDreamMaximumRange());
|
||||
AntarchySettings.setMinersDreamTorchSpacing(AntarchyToolsConfig.minersDreamTorchSpacing());
|
||||
AntarchySettings.setMinersDreamBlocksPerTick(AntarchyToolsConfig.minersDreamBlocksPerTick());
|
||||
|
||||
AntarchySettings.setDuctTapeRepairPercentPerUse(AntarchyToolsConfig.ductTapeRepairPercentPerUse());
|
||||
AntarchySettings.setPotentNyxiteInvertedDurationSeconds(AntarchyToolsConfig.potentNyxiteInvertedDurationSeconds());
|
||||
@@ -669,6 +664,15 @@ public final class AntarchyConfigModuleNeoforge {
|
||||
AntarchySettings.setElythiaPortalEnabled(AntarchyMiscConfig.elythiaPortalEnabled());
|
||||
AntarchySettings.setThoraxisPortalEnabled(AntarchyMiscConfig.thoraxisPortalEnabled());
|
||||
AntarchySettings.setCavarynPortalEnabled(AntarchyMiscConfig.cavarynPortalEnabled());
|
||||
AntarchySettings.setPortalGunCanFireThroughGlass(AntarchyMiscConfig.portalGunCanFireThroughGlass());
|
||||
AntarchySettings.setPortalGunCanFireThroughLiquid(AntarchyMiscConfig.portalGunCanFireThroughLiquid());
|
||||
AntarchySettings.setPortalGunCanPortalsResizeWhenCreated(AntarchyMiscConfig.portalGunCanPortalsResizeWhenCreated());
|
||||
AntarchySettings.setPortalGunCanPortalProjectilesChunkload(AntarchyMiscConfig.portalGunCanPortalProjectilesChunkload());
|
||||
AntarchySettings.setPortalGunSeeThroughPortals(AntarchyMiscConfig.portalGunSeeThroughPortals());
|
||||
AntarchySettings.setPortalGunFancyPortals(AntarchyMiscConfig.portalGunFancyPortals());
|
||||
AntarchySettings.setPortalGunMaxShootDistance(AntarchyMiscConfig.portalGunMaxShootDistance());
|
||||
AntarchySettings.setPortalGunEntityGrabWeightBase(AntarchyMiscConfig.portalGunEntityGrabWeightBase());
|
||||
AntarchySettings.setPortalGunIndicatorSize(AntarchyMiscConfig.portalGunIndicatorSize());
|
||||
|
||||
|
||||
// Misc
|
||||
|
||||
+30
@@ -32,6 +32,15 @@ public final class AntarchyMiscConfig {
|
||||
private static final ModConfigSpec.BooleanValue ELYTHIA_PORTAL_ENABLED;
|
||||
private static final ModConfigSpec.BooleanValue THORAXIS_PORTAL_ENABLED;
|
||||
private static final ModConfigSpec.BooleanValue CAVARYN_PORTAL_ENABLED;
|
||||
private static final ModConfigSpec.BooleanValue PORTAL_GUN_CAN_FIRE_THROUGH_GLASS;
|
||||
private static final ModConfigSpec.BooleanValue PORTAL_GUN_CAN_FIRE_THROUGH_LIQUID;
|
||||
private static final ModConfigSpec.BooleanValue PORTAL_GUN_CAN_PORTALS_RESIZE_WHEN_CREATED;
|
||||
private static final ModConfigSpec.BooleanValue PORTAL_GUN_CAN_PORTAL_PROJECTILES_CHUNKLOAD;
|
||||
private static final ModConfigSpec.BooleanValue PORTAL_GUN_SEE_THROUGH_PORTALS;
|
||||
private static final ModConfigSpec.BooleanValue PORTAL_GUN_FANCY_PORTALS;
|
||||
private static final ModConfigSpec.IntValue PORTAL_GUN_MAX_SHOOT_DISTANCE;
|
||||
private static final ModConfigSpec.IntValue PORTAL_GUN_ENTITY_GRAB_WEIGHT_BASE;
|
||||
private static final ModConfigSpec.IntValue PORTAL_GUN_INDICATOR_SIZE;
|
||||
|
||||
// Diamond Minecart
|
||||
private static final ModConfigSpec.BooleanValue DIAMOND_MINECART_ENABLED;
|
||||
@@ -129,6 +138,18 @@ public final class AntarchyMiscConfig {
|
||||
CAVARYN_PORTAL_ENABLED = b.comment("Whether Myrmite portals to Cavaryn can activate and function.").define("cavarynPortalEnabled", true);
|
||||
b.pop();
|
||||
|
||||
b.push("portalGun");
|
||||
PORTAL_GUN_CAN_FIRE_THROUGH_GLASS = b.define("canFireThroughGlass", false);
|
||||
PORTAL_GUN_CAN_FIRE_THROUGH_LIQUID = b.define("canFireThroughLiquid", false);
|
||||
PORTAL_GUN_CAN_PORTALS_RESIZE_WHEN_CREATED = b.define("canPortalsResizeWhenCreated", true);
|
||||
PORTAL_GUN_CAN_PORTAL_PROJECTILES_CHUNKLOAD = b.define("canPortalProjectilesChunkload", true);
|
||||
PORTAL_GUN_SEE_THROUGH_PORTALS = b.define("seeThroughPortals", true);
|
||||
PORTAL_GUN_FANCY_PORTALS = b.define("fancyPortals", true);
|
||||
PORTAL_GUN_MAX_SHOOT_DISTANCE = b.defineInRange("maxShootDistance", 10000, 1, Integer.MAX_VALUE);
|
||||
PORTAL_GUN_ENTITY_GRAB_WEIGHT_BASE = b.defineInRange("entityGrabWeightBase", 100, 0, 1000);
|
||||
PORTAL_GUN_INDICATOR_SIZE = b.defineInRange("indicatorSize", 30, 0, 100);
|
||||
b.pop();
|
||||
|
||||
|
||||
// Diamond Minecart
|
||||
|
||||
@@ -196,6 +217,15 @@ public final class AntarchyMiscConfig {
|
||||
public static boolean elythiaPortalEnabled() { return ELYTHIA_PORTAL_ENABLED.get(); }
|
||||
public static boolean thoraxisPortalEnabled() { return THORAXIS_PORTAL_ENABLED.get(); }
|
||||
public static boolean cavarynPortalEnabled() { return CAVARYN_PORTAL_ENABLED.get(); }
|
||||
public static boolean portalGunCanFireThroughGlass() { return PORTAL_GUN_CAN_FIRE_THROUGH_GLASS.get(); }
|
||||
public static boolean portalGunCanFireThroughLiquid() { return PORTAL_GUN_CAN_FIRE_THROUGH_LIQUID.get(); }
|
||||
public static boolean portalGunCanPortalsResizeWhenCreated() { return PORTAL_GUN_CAN_PORTALS_RESIZE_WHEN_CREATED.get(); }
|
||||
public static boolean portalGunCanPortalProjectilesChunkload() { return PORTAL_GUN_CAN_PORTAL_PROJECTILES_CHUNKLOAD.get(); }
|
||||
public static boolean portalGunSeeThroughPortals() { return PORTAL_GUN_SEE_THROUGH_PORTALS.get(); }
|
||||
public static boolean portalGunFancyPortals() { return PORTAL_GUN_FANCY_PORTALS.get(); }
|
||||
public static int portalGunMaxShootDistance() { return PORTAL_GUN_MAX_SHOOT_DISTANCE.get(); }
|
||||
public static int portalGunEntityGrabWeightBase() { return PORTAL_GUN_ENTITY_GRAB_WEIGHT_BASE.get(); }
|
||||
public static int portalGunIndicatorSize() { return PORTAL_GUN_INDICATOR_SIZE.get(); }
|
||||
|
||||
static boolean diamondMinecartEnabled() { return DIAMOND_MINECART_ENABLED.get(); }
|
||||
static boolean diamondMinecartPlacesRails() { return DIAMOND_MINECART_PLACES_RAILS.get(); }
|
||||
|
||||
+6
@@ -11,6 +11,7 @@ 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;
|
||||
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
@@ -29,4 +30,9 @@ public final class AntarchyNeoforgeEvents {
|
||||
TimeDilationCommand.register(event.getDispatcher());
|
||||
RoyalCommand.register(event.getDispatcher());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onServerStopping(ServerStoppingEvent event) {
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity.releaseAllProjectileTickets();
|
||||
}
|
||||
}
|
||||
-20
@@ -258,11 +258,6 @@ public final class AntarchyToolsConfig {
|
||||
|
||||
// Miner's Dream
|
||||
|
||||
private static final ModConfigSpec.BooleanValue MINERS_DREAM_ENABLED;
|
||||
private static final ModConfigSpec.IntValue MINERS_DREAM_MINIMUM_RANGE;
|
||||
private static final ModConfigSpec.IntValue MINERS_DREAM_MAXIMUM_RANGE;
|
||||
private static final ModConfigSpec.IntValue MINERS_DREAM_TORCH_SPACING;
|
||||
private static final ModConfigSpec.IntValue MINERS_DREAM_BLOCKS_PER_TICK;
|
||||
|
||||
|
||||
// Miscellaneous items / consumables
|
||||
@@ -635,16 +630,6 @@ public final class AntarchyToolsConfig {
|
||||
b.pop();
|
||||
|
||||
|
||||
// Miner's Dream
|
||||
|
||||
b.push("minersDream");
|
||||
MINERS_DREAM_ENABLED = b.comment("Master toggle. If false, the item remains craftable but cannot be used.").define("enabled", true);
|
||||
MINERS_DREAM_MINIMUM_RANGE = b.comment("Minimum cave length in blocks. Clamped to [8, 256].") .defineInRange("minimumRange", 48, 8, 256);
|
||||
MINERS_DREAM_MAXIMUM_RANGE = b.comment("Maximum cave length in blocks. Clamped to [8, 256].") .defineInRange("maximumRange", 96, 8, 256);
|
||||
MINERS_DREAM_TORCH_SPACING = b.comment("Approximate blocks between torch placements along the cave.") .defineInRange("torchSpacing", 10, 4, 64);
|
||||
MINERS_DREAM_BLOCKS_PER_TICK = b.comment("Maximum blocks removed per server tick while excavating.") .defineInRange("blocksPerTick", 150, 1, 2000);
|
||||
b.pop();
|
||||
|
||||
|
||||
// Miscellaneous items / consumables
|
||||
|
||||
@@ -833,11 +818,6 @@ public final class AntarchyToolsConfig {
|
||||
static double critterCageMaxCapturableWidth() { return CRITTER_CAGE_MAX_CAPTURABLE_WIDTH.get(); }
|
||||
static double critterCageMaxCapturableHeight() { return CRITTER_CAGE_MAX_CAPTURABLE_HEIGHT.get(); }
|
||||
|
||||
static boolean minersDreamEnabled() { return MINERS_DREAM_ENABLED.get(); }
|
||||
static int minersDreamMinimumRange() { return MINERS_DREAM_MINIMUM_RANGE.get(); }
|
||||
static int minersDreamMaximumRange() { return MINERS_DREAM_MAXIMUM_RANGE.get(); }
|
||||
static int minersDreamTorchSpacing() { return MINERS_DREAM_TORCH_SPACING.get(); }
|
||||
static int minersDreamBlocksPerTick() { return MINERS_DREAM_BLOCKS_PER_TICK.get(); }
|
||||
|
||||
static double ductTapeRepairPercentPerUse() { return DUCT_TAPE_REPAIR_PERCENT_PER_USE.get(); }
|
||||
static double potentNyxiteInvertedDurationSeconds() { return POTENT_NYXITE_INVERTED_DURATION_SECONDS.get(); }
|
||||
|
||||
+40
@@ -58,6 +58,27 @@ public final class AntarchyKeyBindings {
|
||||
InputConstants.KEY_B,
|
||||
CATEGORY
|
||||
);
|
||||
public static final KeyMapping PORTAL_GUN_ZOOM = new KeyMapping(
|
||||
"key.antarchy.portal_gun_zoom",
|
||||
KeyConflictContext.IN_GAME,
|
||||
InputConstants.Type.MOUSE,
|
||||
InputConstants.MOUSE_BUTTON_MIDDLE,
|
||||
CATEGORY
|
||||
);
|
||||
public static final KeyMapping PORTAL_GUN_GRAB = new KeyMapping(
|
||||
"key.antarchy.portal_gun_grab",
|
||||
KeyConflictContext.IN_GAME,
|
||||
InputConstants.Type.KEYSYM,
|
||||
InputConstants.KEY_G,
|
||||
CATEGORY
|
||||
);
|
||||
public static final KeyMapping PORTAL_GUN_RESET = new KeyMapping(
|
||||
"key.antarchy.portal_gun_reset",
|
||||
KeyConflictContext.IN_GAME,
|
||||
InputConstants.Type.KEYSYM,
|
||||
InputConstants.KEY_R,
|
||||
CATEGORY
|
||||
);
|
||||
|
||||
private AntarchyKeyBindings() {}
|
||||
|
||||
@@ -69,6 +90,9 @@ public final class AntarchyKeyBindings {
|
||||
event.register(TIGERS_EYE_CAMOUFLAGE);
|
||||
event.register(ROYAL_INVERSION_TOGGLE);
|
||||
event.register(ROYAL_BOUNDARY);
|
||||
event.register(PORTAL_GUN_ZOOM);
|
||||
event.register(PORTAL_GUN_GRAB);
|
||||
event.register(PORTAL_GUN_RESET);
|
||||
}
|
||||
|
||||
public static boolean isMountFlightTogglePressed() {
|
||||
@@ -90,4 +114,20 @@ public final class AntarchyKeyBindings {
|
||||
public static boolean consumeRoyalBoundaryPressed() {
|
||||
return ROYAL_BOUNDARY.consumeClick();
|
||||
}
|
||||
|
||||
public static boolean consumePortalGunZoomPressed() {
|
||||
return PORTAL_GUN_ZOOM.consumeClick();
|
||||
}
|
||||
|
||||
public static boolean consumePortalGunGrabPressed() {
|
||||
return PORTAL_GUN_GRAB.consumeClick();
|
||||
}
|
||||
|
||||
public static boolean consumePortalGunResetPressed() {
|
||||
return PORTAL_GUN_RESET.consumeClick();
|
||||
}
|
||||
|
||||
public static boolean isPortalGunResetDown() {
|
||||
return PORTAL_GUN_RESET.isDown() || PORTAL_GUN_RESET.consumeClick();
|
||||
}
|
||||
}
|
||||
+22
@@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.client.GoopedHudRenderer;
|
||||
import com.craisinlord.antarchy.content.client.PortalGunCrosshairRenderer;
|
||||
import com.craisinlord.antarchy.content.client.AntarchyArchivePreviews;
|
||||
import com.craisinlord.antarchy.content.client.game.AntarchyComputerGames;
|
||||
import com.craisinlord.antarchy.content.client.HordeHudRenderer;
|
||||
@@ -16,6 +17,7 @@ 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;
|
||||
@@ -38,6 +40,7 @@ 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;
|
||||
@@ -56,6 +59,7 @@ 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;
|
||||
@@ -98,6 +102,19 @@ 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;
|
||||
@@ -368,6 +385,11 @@ public final class AntarchyNeoForgeClient {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerGuiLayers(RegisterGuiLayersEvent event) {
|
||||
event.registerAbove(
|
||||
VanillaGuiLayers.CROSSHAIR,
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "portal_gun_crosshair"),
|
||||
(guiGraphics, partialTick) -> PortalGunCrosshairRenderer.render(guiGraphics)
|
||||
);
|
||||
event.registerAboveAll(
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "dread_darkness"),
|
||||
(guiGraphics, partialTick) -> DreadHudRenderer.render(guiGraphics)
|
||||
|
||||
+26
-3
@@ -2,7 +2,9 @@ package com.craisinlord.antarchy.neoforge.client;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.item.PortalGunItem;
|
||||
import com.craisinlord.antarchy.content.client.PortalGunZoomClientState;
|
||||
import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload;
|
||||
import com.craisinlord.antarchy.content.network.PortalGunGrabPayload;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
@@ -20,19 +22,40 @@ public final class PortalGunClientHandler {
|
||||
@SubscribeEvent
|
||||
public static void onClientTick(ClientTickEvent.Post event) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
if (mc.player == null) {
|
||||
com.craisinlord.antarchy.content.client.PortalGunGrabClientState.clear();
|
||||
com.craisinlord.antarchy.content.client.PortalGunResetClientState.clear();
|
||||
}
|
||||
com.craisinlord.antarchy.content.client.PortalGunIndicatorClientState.setRequestSender(net.neoforged.neoforge.network.PacketDistributor::sendToServer);
|
||||
boolean hasPortalGun = mc.player != null && (mc.player.getMainHandItem().getItem() instanceof PortalGunItem || mc.player.getOffhandItem().getItem() instanceof PortalGunItem);
|
||||
boolean gameplayInput = mc.screen == null;
|
||||
boolean held = hasPortalGun && gameplayInput;
|
||||
boolean zoomPressed = AntarchyKeyBindings.consumePortalGunZoomPressed();
|
||||
PortalGunZoomClientState.tick(mc, hasPortalGun, zoomPressed && gameplayInput);
|
||||
boolean resetActive = com.craisinlord.antarchy.content.client.PortalGunResetClientState.tick(
|
||||
mc,
|
||||
held,
|
||||
AntarchyKeyBindings.isPortalGunResetDown(),
|
||||
net.neoforged.neoforge.network.PacketDistributor::sendToServer
|
||||
);
|
||||
if (held && AntarchyKeyBindings.consumePortalGunGrabPressed()) {
|
||||
PacketDistributor.sendToServer(new PortalGunGrabPayload());
|
||||
}
|
||||
if (mc.player == null || mc.level == null || mc.screen != null) {
|
||||
lastAttackDown = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(mc.player.getMainHandItem().getItem() instanceof PortalGunItem)) {
|
||||
boolean offhand = !(mc.player.getMainHandItem().getItem() instanceof PortalGunItem)
|
||||
&& mc.player.getOffhandItem().getItem() instanceof PortalGunItem;
|
||||
if (!offhand && !(mc.player.getMainHandItem().getItem() instanceof PortalGunItem)) {
|
||||
lastAttackDown = false;
|
||||
return;
|
||||
}
|
||||
|
||||
boolean attackDown = mc.options.keyAttack.isDown();
|
||||
if (attackDown && !lastAttackDown) {
|
||||
PacketDistributor.sendToServer(new PortalGunPrimaryPayload());
|
||||
if (attackDown && !lastAttackDown && !resetActive) {
|
||||
PacketDistributor.sendToServer(new PortalGunPrimaryPayload(offhand));
|
||||
}
|
||||
lastAttackDown = attackDown;
|
||||
}
|
||||
|
||||
+7
-9
@@ -2,26 +2,24 @@ 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 static long lastStageLogNanos;
|
||||
|
||||
private PortalGunPortalViewRenderHandler() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRenderLevelStage(RenderLevelStageEvent event) {
|
||||
if (!PortalGunPortalViewRenderer.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES) {
|
||||
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_BLOCK_ENTITIES) {
|
||||
return;
|
||||
}
|
||||
long now = System.nanoTime();
|
||||
if (now - lastStageLogNanos > 5_000_000_000L) {
|
||||
lastStageLogNanos = now;
|
||||
Antarchy.LOGGER.info("Portal gun NeoForge render stage fired stage={} partial={}", event.getStage(), event.getPartialTick().getGameTimeDeltaPartialTick(false));
|
||||
}
|
||||
PortalGunPortalViewRenderer.render(event.getCamera(), event.getPoseStack().last().pose(), event.getPartialTick());
|
||||
PortalGunPortalViewRenderer.render(event.getCamera(), event.getModelViewMatrix(), event.getProjectionMatrix(), event.getPartialTick());
|
||||
}
|
||||
}
|
||||
+46
-2
@@ -19,6 +19,7 @@ import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload;
|
||||
import com.craisinlord.antarchy.content.client.CameraShakeClientState;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
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;
|
||||
@@ -29,7 +30,21 @@ public final class AntarchyGravityNetworking {
|
||||
}
|
||||
|
||||
public static void register(PayloadRegistrar registrar) {
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.setSender(PacketDistributor::sendToPlayer);
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunGrabManager.setStateSender(PacketDistributor::sendToPlayer);
|
||||
registrar.playToClient(
|
||||
com.craisinlord.antarchy.content.network.PortalGunIndicatorPayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunIndicatorPayload.STREAM_CODEC,
|
||||
(payload, context) -> context.enqueueWork(() -> com.craisinlord.antarchy.content.client.PortalGunIndicatorClientState.update(payload))
|
||||
).playToServer(
|
||||
com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.STREAM_CODEC,
|
||||
AntarchyGravityNetworking::handlePortalGunIndicatorRequest
|
||||
).playToClient(
|
||||
com.craisinlord.antarchy.content.network.PortalGunGrabStatePayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunGrabStatePayload.STREAM_CODEC,
|
||||
(payload, context) -> context.enqueueWork(() -> com.craisinlord.antarchy.content.client.PortalGunGrabClientState.update(payload.active()))
|
||||
).playToClient(
|
||||
GravityStatePayload.TYPE,
|
||||
GravityStatePayload.STREAM_CODEC,
|
||||
AntarchyGravityNetworking::handleGravityState
|
||||
@@ -45,6 +60,18 @@ public final class AntarchyGravityNetworking {
|
||||
PortalGunPrimaryPayload.TYPE,
|
||||
PortalGunPrimaryPayload.STREAM_CODEC,
|
||||
AntarchyGravityNetworking::handlePortalGunPrimary
|
||||
).playToServer(
|
||||
com.craisinlord.antarchy.content.network.PortalGunGrabPayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunGrabPayload.STREAM_CODEC,
|
||||
AntarchyGravityNetworking::handlePortalGunGrab
|
||||
).playToServer(
|
||||
com.craisinlord.antarchy.content.network.PortalGunResetPayload.TYPE,
|
||||
com.craisinlord.antarchy.content.network.PortalGunResetPayload.STREAM_CODEC,
|
||||
(payload, context) -> context.enqueueWork(() -> {
|
||||
if (context.player() instanceof ServerPlayer serverPlayer) {
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.handleInput(serverPlayer, payload.action());
|
||||
}
|
||||
})
|
||||
).playToServer(
|
||||
EyeOfStormPrimaryPayload.TYPE,
|
||||
EyeOfStormPrimaryPayload.STREAM_CODEC,
|
||||
@@ -203,11 +230,28 @@ public final class AntarchyGravityNetworking {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(serverPlayer.getMainHandItem().getItem() instanceof PortalGunItem portalGunItem)) {
|
||||
ItemStack stack = payload.offhand() ? serverPlayer.getOffhandItem() : serverPlayer.getMainHandItem();
|
||||
if (!(stack.getItem() instanceof PortalGunItem portalGunItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
portalGunItem.firePrimary(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem());
|
||||
portalGunItem.firePrimary(serverPlayer.serverLevel(), serverPlayer, stack, payload.offhand());
|
||||
});
|
||||
}
|
||||
|
||||
private static void handlePortalGunGrab(com.craisinlord.antarchy.content.network.PortalGunGrabPayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
if (context.player() instanceof ServerPlayer serverPlayer) {
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunGrabManager.toggle(serverPlayer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void handlePortalGunIndicatorRequest(com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload payload, IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
if (context.player() instanceof ServerPlayer serverPlayer) {
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.handleRequest(serverPlayer, payload);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+10
-100
@@ -88,29 +88,18 @@ import net.neoforged.neoforge.event.village.VillagerTradesEvent;
|
||||
import net.neoforged.neoforge.event.village.WandererTradesEvent;
|
||||
import net.neoforged.neoforge.event.tick.PlayerTickEvent;
|
||||
import net.neoforged.neoforge.event.tick.ServerTickEvent;
|
||||
import com.craisinlord.antarchy.content.item.MinersDreamExcavationManager;
|
||||
import net.neoforged.neoforge.fluids.FluidInteractionRegistry;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
|
||||
public final class AntarchyNeoForgeEvents {
|
||||
private static final long SERVER_HANG_WARN_NANOS = 5_000_000_000L;
|
||||
private static final long SERVER_IDLE_BUSY_WARN_NANOS = 30_000_000_000L;
|
||||
private static final long SERVER_HANG_REPEAT_NANOS = 30_000_000_000L;
|
||||
private static final double OVERHEAD_INVERSION_WARN_MS = 10.0D;
|
||||
private static final long OVERHEAD_INVERSION_WARN_INTERVAL_TICKS = 100L;
|
||||
private static volatile boolean serverHangWatchdogStarted;
|
||||
private static volatile long serverTickStartNanos;
|
||||
private static volatile long serverTickEndNanos;
|
||||
private static volatile long serverHangLastDumpNanos;
|
||||
private static volatile Thread serverTickThread;
|
||||
private static long lastOverheadInversionWarnTick = Long.MIN_VALUE / 2L;
|
||||
|
||||
private AntarchyNeoForgeEvents() {}
|
||||
|
||||
public static void register(IEventBus modEventBus) {
|
||||
modEventBus.addListener(AntarchyNeoForgeEvents::onCommonSetup);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::beginServerTickWatchdog);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::endServerTickWatchdog);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onMissileSquidDeath);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onPermanentPortalSacrifice);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onLivingBreathe);
|
||||
@@ -126,6 +115,7 @@ public final class AntarchyNeoForgeEvents {
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBossMagicBurstMitigation);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipAttackEntity);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAttitudeAdjusterAttackEntity);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handlePortalGunAttackEntity);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipLeftClickBlock);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handlePortalGunLeftClickBlock);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipRightClickBlock);
|
||||
@@ -140,7 +130,7 @@ public final class AntarchyNeoForgeEvents {
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickDreadAndIchor);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickScorpionWhips);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickWormHooks);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickMinersDreamExcavations);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickAttitudeAdjusterSlams);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAntiwaterDamage);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAntiwaterFall);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodCrystalBootsFall);
|
||||
@@ -178,92 +168,6 @@ public final class AntarchyNeoForgeEvents {
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onWandererTrades);
|
||||
}
|
||||
|
||||
static void beginServerTickWatchdog(ServerTickEvent.Pre event) {
|
||||
ensureServerHangWatchdogStarted();
|
||||
serverTickThread = Thread.currentThread();
|
||||
serverTickStartNanos = System.nanoTime();
|
||||
}
|
||||
|
||||
static void endServerTickWatchdog(ServerTickEvent.Post event) {
|
||||
serverTickEndNanos = System.nanoTime();
|
||||
serverTickStartNanos = 0L;
|
||||
}
|
||||
|
||||
private static synchronized void ensureServerHangWatchdogStarted() {
|
||||
if (serverHangWatchdogStarted) {
|
||||
return;
|
||||
}
|
||||
serverHangWatchdogStarted = true;
|
||||
Thread watchdog = new Thread(() -> {
|
||||
while (true) {
|
||||
try {
|
||||
Thread.sleep(2_000L);
|
||||
} catch (InterruptedException ignored) {
|
||||
Thread.currentThread().interrupt();
|
||||
return;
|
||||
}
|
||||
|
||||
long tickStart = serverTickStartNanos;
|
||||
long tickEnd = serverTickEndNanos;
|
||||
Thread tickThread = serverTickThread;
|
||||
long now = System.nanoTime();
|
||||
if (tickThread == null || now - serverHangLastDumpNanos < SERVER_HANG_REPEAT_NANOS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tickStart > 0L && now - tickStart >= SERVER_HANG_WARN_NANOS) {
|
||||
antarchy$dumpServerThreadWatchdog(
|
||||
"server thread appears hung",
|
||||
(now - tickStart) / 1_000_000.0D,
|
||||
tickThread
|
||||
);
|
||||
serverHangLastDumpNanos = now;
|
||||
continue;
|
||||
}
|
||||
|
||||
Thread.State state = tickThread.getState();
|
||||
boolean idleBusy = tickStart <= 0L
|
||||
&& tickEnd > 0L
|
||||
&& now - tickEnd >= SERVER_IDLE_BUSY_WARN_NANOS
|
||||
&& state != Thread.State.WAITING
|
||||
&& state != Thread.State.TIMED_WAITING
|
||||
&& !antarchy$isServerThreadIdleWait(tickThread);
|
||||
if (idleBusy) {
|
||||
antarchy$dumpServerThreadWatchdog(
|
||||
"server thread busy outside active tick",
|
||||
(now - tickEnd) / 1_000_000.0D,
|
||||
tickThread
|
||||
);
|
||||
serverHangLastDumpNanos = now;
|
||||
}
|
||||
}
|
||||
}, "Antarchy Server Hang Watchdog");
|
||||
watchdog.setDaemon(true);
|
||||
watchdog.start();
|
||||
}
|
||||
|
||||
private static void antarchy$dumpServerThreadWatchdog(String message, double elapsedMs, Thread tickThread) {
|
||||
Antarchy.LOGGER.error(
|
||||
"[antarchy-watchdog] {} elapsedMs={} thread={} state={}",
|
||||
message, elapsedMs, tickThread.getName(), tickThread.getState()
|
||||
);
|
||||
for (StackTraceElement element : tickThread.getStackTrace()) {
|
||||
Antarchy.LOGGER.error("[antarchy-watchdog] at {}", element);
|
||||
}
|
||||
}
|
||||
|
||||
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() == AntarchyNeoforgeMisc.COMPUTER_SCIENTIST.get()) {
|
||||
int[] slots = ComputerScientistTradeManager.slotsPerLevel();
|
||||
@@ -1093,6 +997,13 @@ public final class AntarchyNeoForgeEvents {
|
||||
AttitudeAdjusterSlamManager.markSpecialHit(player);
|
||||
}
|
||||
|
||||
static void handlePortalGunAttackEntity(AttackEntityEvent event) {
|
||||
if (event.getEntity().getMainHandItem().getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem
|
||||
|| event.getEntity().getOffhandItem().getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
static void handleScorpionWhipLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) {
|
||||
if (!(event.getEntity() instanceof ServerPlayer player)) {
|
||||
return;
|
||||
@@ -1216,10 +1127,9 @@ public final class AntarchyNeoForgeEvents {
|
||||
}
|
||||
}
|
||||
|
||||
static void tickMinersDreamExcavations(ServerTickEvent.Post event) {
|
||||
static void tickAttitudeAdjusterSlams(ServerTickEvent.Post event) {
|
||||
for (ServerLevel level : event.getServer().getAllLevels()) {
|
||||
AttitudeAdjusterSlamManager.tick(level);
|
||||
MinersDreamExcavationManager.tick(level);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -127,6 +127,9 @@ public final class AntarchyNeoforgeSounds {
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> PORTAL_OPEN_BLUE = registerSoundEvent("portal_open_blue");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> PORTAL_OPEN_ORANGE = registerSoundEvent("portal_open_orange");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> PORTAL_FIZZLE = registerSoundEvent("portal_fizzle");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> PORTAL_ENTER = registerSoundEvent("portal_enter");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> PORTAL_EXIT = registerSoundEvent("portal_exit");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> PORTAL_AMBIENT = registerSoundEvent("portal_ambient");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> BED_BUG_HURT = registerSoundEvent("bed_bug_hurt");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> BED_BUG_ATTACK = registerSoundEvent("bed_bug_attack");
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@ public class AntarchyNeoforgeSpawnPlacements {
|
||||
event.register(AntarchyNeoforgeEntites.VORTEX.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.vortex.VortexEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
event.register(AntarchyNeoforgeEntites.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
event.register(AntarchyNeoforgeEntites.CRAWLING_BLIGHT.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CrawlingBlightEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
event.register(AntarchyNeoforgeEntites.SKULKING_FRIGHT.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, SkulkingFrightEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
event.register(AntarchyNeoforgeEntites.MANTICORE.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.ManticoreEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.craisinlord.antarchy.neoforge.registry;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.portalgun.PortalGunGrabManager;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
|
||||
import net.neoforged.neoforge.event.tick.ServerTickEvent;
|
||||
|
||||
@EventBusSubscriber(modid = Antarchy.MODID)
|
||||
public final class PortalGunGrabEvents {
|
||||
private PortalGunGrabEvents() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onServerTick(ServerTickEvent.Post event) {
|
||||
PortalGunGrabManager.tick(event.getServer());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onServerStopping(ServerStoppingEvent event) {
|
||||
PortalGunGrabManager.clear(event.getServer());
|
||||
com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.clear(event.getServer());
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,9 @@ 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"
|
||||
|
||||
@@ -68,6 +71,22 @@ modId="antos"
|
||||
side="BOTH"
|
||||
reason="Antarchy requires Infinite Dimensions 2.7.3 or newer"
|
||||
|
||||
[[dependencies.antarchy]]
|
||||
modId="apple_cows"
|
||||
type="incompatible"
|
||||
versionRange="*"
|
||||
ordering="NONE"
|
||||
side="BOTH"
|
||||
reason="Antarchy already includes Apple Cows. Remove the standalone Apple Cows mod."
|
||||
|
||||
[[dependencies.antarchy]]
|
||||
modId="hoverboards"
|
||||
type="incompatible"
|
||||
versionRange="*"
|
||||
ordering="NONE"
|
||||
side="BOTH"
|
||||
reason="Antarchy already includes Hoverboards. Remove the standalone Hoverboards mod."
|
||||
|
||||
[[dependencies.antarchy]]
|
||||
modId="configured"
|
||||
type="optional"
|
||||
|
||||
Reference in new issue
Block a user