portal gun fixes and variants

This commit is contained in:
craisinlord committed 2026-10-08 13:54:21 -05:00
1 parent 2d90cb8aaf
commit 216efeb39b
111 files changed
+1937 -2136

No files matched your search

@@ -671,8 +671,9 @@ public final class AntarchyConfigModuleNeoforge {
AntarchySettings.setPortalGunSeeThroughPortals(AntarchyMiscConfig.portalGunSeeThroughPortals());
AntarchySettings.setPortalGunFancyPortals(AntarchyMiscConfig.portalGunFancyPortals());
AntarchySettings.setPortalGunMaxShootDistance(AntarchyMiscConfig.portalGunMaxShootDistance());
AntarchySettings.setPortalGunEntityGrabWeightBase(AntarchyMiscConfig.portalGunEntityGrabWeightBase());
AntarchySettings.setPortalGunIndicatorSize(AntarchyMiscConfig.portalGunIndicatorSize());
AntarchySettings.setPortalGunMinFloorExitSpeed(AntarchyMiscConfig.portalGunMinFloorExitSpeed());
AntarchySettings.setPortalGunMaxLiveViews(AntarchyMiscConfig.portalGunMaxLiveViews());
AntarchySettings.setPortalGunMaxExitSpeed(AntarchyMiscConfig.portalGunMaxExitSpeed());
// Misc
@@ -39,8 +39,9 @@ public final class AntarchyMiscConfig {
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;
private static final ModConfigSpec.DoubleValue PORTAL_GUN_MIN_FLOOR_EXIT_SPEED;
private static final ModConfigSpec.IntValue PORTAL_GUN_MAX_LIVE_VIEWS;
private static final ModConfigSpec.DoubleValue PORTAL_GUN_MAX_EXIT_SPEED;
// Diamond Minecart
private static final ModConfigSpec.BooleanValue DIAMOND_MINECART_ENABLED;
@@ -146,8 +147,9 @@ public final class AntarchyMiscConfig {
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);
PORTAL_GUN_MAX_LIVE_VIEWS = b.comment("How many portals can show a live see-through view at once. Each one re-renders the world, so higher values cost frame rate. 0 shows only the animated surface.").defineInRange("maxLiveViews", 8, 0, 32);
PORTAL_GUN_MIN_FLOOR_EXIT_SPEED = b.comment("Minimum speed in blocks/tick when leaving an upward-facing portal, so the traveller clears it. 0 disables.").defineInRange("minFloorExitSpeed", 0.6D, 0.0D, 4.0D);
PORTAL_GUN_MAX_EXIT_SPEED = b.comment("Maximum speed in blocks/tick when leaving a portal. 0 keeps momentum uncapped.").defineInRange("maxExitSpeed", 0.0D, 0.0D, 100.0D);
b.pop();
@@ -224,8 +226,9 @@ public final class AntarchyMiscConfig {
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(); }
public static double portalGunMinFloorExitSpeed() { return PORTAL_GUN_MIN_FLOOR_EXIT_SPEED.get(); }
public static int portalGunMaxLiveViews() { return PORTAL_GUN_MAX_LIVE_VIEWS.get(); }
public static double portalGunMaxExitSpeed() { return PORTAL_GUN_MAX_EXIT_SPEED.get(); }
static boolean diamondMinecartEnabled() { return DIAMOND_MINECART_ENABLED.get(); }
static boolean diamondMinecartPlacesRails() { return DIAMOND_MINECART_PLACES_RAILS.get(); }
@@ -65,13 +65,6 @@ public final class AntarchyKeyBindings {
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,
@@ -91,7 +84,6 @@ public final class AntarchyKeyBindings {
event.register(ROYAL_INVERSION_TOGGLE);
event.register(ROYAL_BOUNDARY);
event.register(PORTAL_GUN_ZOOM);
event.register(PORTAL_GUN_GRAB);
event.register(PORTAL_GUN_RESET);
}
@@ -119,10 +111,6 @@ public final class AntarchyKeyBindings {
return PORTAL_GUN_ZOOM.consumeClick();
}
public static boolean consumePortalGunGrabPressed() {
return PORTAL_GUN_GRAB.consumeClick();
}
public static boolean consumePortalGunResetPressed() {
return PORTAL_GUN_RESET.consumeClick();
}
@@ -384,6 +384,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) -> com.craisinlord.antarchy.content.client.PortalGunCrosshairRenderer.render(guiGraphics)
);
event.registerAboveAll(
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "dread_darkness"),
(guiGraphics, partialTick) -> DreadHudRenderer.render(guiGraphics)
@@ -626,6 +631,8 @@ public final class AntarchyNeoForgeClient {
registerGeoItemExtensionSizeRay(event, AntarchyNeoforgeItems.GROWTH_RAY.get());
registerGeoItemExtension(event, AntarchyNeoforgeItems.GRAVITY_GUN.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.PORTAL_GUN.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.PORTAL_GUN_ATLAS.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.PORTAL_GUN_P_BODY.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.SQUIDZOOKA.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.RPO_LAUNCHER.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.WATER_CANNON.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
@@ -1,38 +0,0 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.block.DuctTapeBlock;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.MovementInputUpdateEvent;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class DuctTapeClientHandler {
private DuctTapeClientHandler() {
}
@SubscribeEvent
public static void onMovementInputUpdate(MovementInputUpdateEvent event) {
if (!(event.getEntity() instanceof LocalPlayer player)) {
return;
}
Minecraft mc = Minecraft.getInstance();
if (mc.level == null || (!player.isNoGravity() && !DuctTapeBlock.isTouchingTape(mc.level, player))) {
return;
}
var input = event.getInput();
input.left = false;
input.right = false;
input.up = false;
input.down = false;
input.leftImpulse = 0.0F;
input.forwardImpulse = 0.0F;
input.jumping = false;
input.shiftKeyDown = false;
}
}
@@ -4,7 +4,6 @@ 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;
@@ -23,7 +22,6 @@ public final class PortalGunClientHandler {
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);
@@ -38,9 +36,6 @@ public final class PortalGunClientHandler {
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;
@@ -14,9 +14,6 @@ public final class PortalGunPortalViewRenderHandler {
@SubscribeEvent
public static void onRenderLevelStage(RenderLevelStageEvent event) {
if (!PortalGunPortalViewRenderer.isEnabled()) {
return;
}
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_LEVEL) {
return;
}
@@ -29,7 +29,6 @@ public final class WaspSoundHandler {
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
// Ambient buzzing now comes from the wasp entity itself.
}
private static void refreshNearbyWasps(Minecraft mc) {
@@ -31,7 +31,6 @@ 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,
@@ -40,10 +39,6 @@ public final class AntarchyGravityNetworking {
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,
@@ -61,9 +56,19 @@ public final class AntarchyGravityNetworking {
PortalGunPrimaryPayload.STREAM_CODEC,
AntarchyGravityNetworking::handlePortalGunPrimary
).playToServer(
com.craisinlord.antarchy.content.network.PortalGunGrabPayload.TYPE,
com.craisinlord.antarchy.content.network.PortalGunGrabPayload.STREAM_CODEC,
AntarchyGravityNetworking::handlePortalGunGrab
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.PortalGunResetPayload.TYPE,
com.craisinlord.antarchy.content.network.PortalGunResetPayload.STREAM_CODEC,
@@ -239,13 +244,6 @@ public final class AntarchyGravityNetworking {
});
}
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(() -> {
@@ -5,7 +5,6 @@ import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.AntarchySoundEvents;
import com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes;
import com.craisinlord.antarchy.content.block.DuctTapeBlock;
import com.craisinlord.antarchy.content.dispenser.RpoLauncherDispenseBehavior;
import com.craisinlord.antarchy.content.dispenser.SizeRayDispenseBehavior;
import com.craisinlord.antarchy.content.dispenser.BugSprayDispenseBehavior;
@@ -152,7 +151,6 @@ public final class AntarchyNeoForgeEvents {
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickThoraxisUnderside);
modEventBus.addListener(AntarchyNeoForgeEvents::modifyEntityAttributes);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickOverheadInversion);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickDuctTapeStickiness);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreadDeath);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleFallenKingCrownKill);
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreadBedSleep);
@@ -248,6 +246,7 @@ public final class AntarchyNeoForgeEvents {
for (ServerLevel level : event.getServer().getAllLevels()) {
CavarynHordeManager.tick(level);
com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level);
com.craisinlord.antarchy.content.worldgen.elythia.KingsTreeGridFeature.tickPendingSpawns(level);
}
}
@@ -448,12 +447,6 @@ public final class AntarchyNeoForgeEvents {
event.setResult(MobSpawnEvent.PositionCheck.Result.FAIL);
}
static void tickDuctTapeStickiness(EntityTickEvent.Post event) {
if (DuctTapeBlock.shouldTickStuckEntity(event.getEntity())) {
DuctTapeBlock.tickStuckEntity(event.getEntity());
}
}
static void handleDreadDeath(LivingDeathEvent event) {
LivingEntity entity = event.getEntity();
if (!entity.hasEffect(AntarchyNeoforgeMisc.DREAD)) {
@@ -1039,7 +1039,28 @@ public final class AntarchyNeoforgeItems {
AntarchyNeoforgeEntites.PORTAL_GUN_BLACK_HOLE,
AntarchyNeoforgeEntites.PORTAL_GUN_PROJECTILE,
AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_MASTER,
AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_BASE
AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_BASE,
com.craisinlord.antarchy.content.portalgun.PortalGunVariant.DEFAULT
));
public static final DeferredItem<PortalGunItem> PORTAL_GUN_ATLAS = ITEMS.register("portal_gun_atlas",
() -> new PortalGunItem(
new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE),
AntarchyNeoforgeEntites.PORTAL_GUN_PORTAL,
AntarchyNeoforgeEntites.PORTAL_GUN_BLACK_HOLE,
AntarchyNeoforgeEntites.PORTAL_GUN_PROJECTILE,
AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_MASTER,
AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_BASE,
com.craisinlord.antarchy.content.portalgun.PortalGunVariant.ATLAS
));
public static final DeferredItem<PortalGunItem> PORTAL_GUN_P_BODY = ITEMS.register("portal_gun_p_body",
() -> new PortalGunItem(
new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE),
AntarchyNeoforgeEntites.PORTAL_GUN_PORTAL,
AntarchyNeoforgeEntites.PORTAL_GUN_BLACK_HOLE,
AntarchyNeoforgeEntites.PORTAL_GUN_PROJECTILE,
AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_MASTER,
AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_BASE,
com.craisinlord.antarchy.content.portalgun.PortalGunVariant.P_BODY
));
public static final DeferredItem<EyeOfTheStormItem> EYE_OF_THE_STORM = ITEMS.register("eye_of_the_storm",
() -> new EyeOfTheStormItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.EPIC)));
@@ -1,25 +1,17 @@
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());
public final class PortalGunServerEvents {
private PortalGunServerEvents() {
}
@SubscribeEvent
public static void onServerStopping(ServerStoppingEvent event) {
PortalGunGrabManager.clear(event.getServer());
com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.clear(event.getServer());
}
}
@@ -0,0 +1,18 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "antarchy:item/portal_gun_held_geo"
},
"perspectives": {
"gui": {
"parent": "antarchy:item/portal_gun_atlas_gui"
},
"ground": {
"parent": "antarchy:item/portal_gun_atlas_gui"
},
"fixed": {
"parent": "antarchy:item/portal_gun_atlas_gui"
}
}
}
@@ -0,0 +1,18 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "antarchy:item/portal_gun_held_geo"
},
"perspectives": {
"gui": {
"parent": "antarchy:item/portal_gun_p_body_gui"
},
"ground": {
"parent": "antarchy:item/portal_gun_p_body_gui"
},
"fixed": {
"parent": "antarchy:item/portal_gun_p_body_gui"
}
}
}