Skip to content

Fixes, tests#20

Merged
StannisMod merged 617 commits into
1.12from
feature/upstream
Jun 1, 2026
Merged

Fixes, tests#20
StannisMod merged 617 commits into
1.12from
feature/upstream

Conversation

@StannisMod

Copy link
Copy Markdown
Owner

Merged almost all from https://github.com/dercodeKoenig/AdvancedRocketry/pull/70
+
Made tests for all core mechanics of AR

kaduvill and others added 30 commits December 14, 2025 17:58
Added a minimum brightness constant and updated the getStellarBrightness method to ensure it never returns zero, NaN, or Infinity.
Updated various item and tile names, improved error messages, and added new tooltips for better clarity.
Update Chinese localization
Added compatibility check for liquid container blocks.
Refactor observatory tile to manage button presses and seed synchronization.
avoids desync in all my tests
Added anchored warning module to display station's anchored status.
Fix missing newline at end of file
Added detailed changelog for versions 2.2.0 to 2.2.2, including new features, bug fixes, and performance improvements across various components.
Updated changelog to version 2.2.2, adding new blocks, features, and bug fixes.
StannisMod and others added 27 commits May 31, 2026 16:20
- EntityRocket flight, abort events, TP grace, fail reasons
- Mission system: corrupt/stale cleanup, gas/ore mission updates
- Satellite microwave energy fix, atmosphere handler leak guards
- Station object handling, network packet guards, util helpers
- XML planet/ore loaders: UTF-8, oreGen save, volcano/geode multipliers
- Worldgen crash guards (crater negative-Y, asteroid skylight)
- DimensionManager/DimensionProperties biome-by-registry, temp.dat save
- PR async-weather impl (reconciled to our Mixin platform in R2)
- JEI categories: Satellite Builder, Fuel Station, Station Assembler,
  CO2 Scrubber, Oxygen Vent, Orbital Laser Drill, Asteroids, Gas Giants
- TheOneProbe + Waila providers for rockets and data blocks
- TooltipInjector + per-block tooltips
- GL state leak fixes (renderers, particle FX)
- JEI-optional client tick handler guard
- ARConfiguration: PlusTiC compat, gas harvest, orbital registry, databus
- AdvancedRocketry main: ARCommandRoot registration, TOP/databus/hover
  tweaks, Tags-based version, transceiver rename
- API surface updates (registries, capability accessors)
- Lang updates (en_US, zh_CN, ru_RU and others)
- New blockstates/models/textures: orbital registry, databus big,
  wireless transceiver, plate press head, pipes
- AT moved to advancedrocketry_at.cfg (worldInfo only; deps provide rest)
- docs/ oreconfig + planetdefs guides, CI deploy workflow
- Remove legacy Template.xml, XML_CONFIG_README.txt
- Add 6 mixins + mixins.advancedrocketry.json (TASK-08-mixin set)
- AdvancedRocketryPlugin bootstraps Mixin, registers no ASM transformers
- Remove ClassTransformer (fully superseded by mixins; J21 anchor moot)
- Restore RocketInventoryHelper.shouldAllowContainerInteract hook
- Enable use_mixins in RFG (native refmap/AP)
- PlusTiC transformer left unregistered pending @pseudo Mixin conversion
- Replace PR's CustomDerivedWorldInfo/WorldInfoSavedData/WorldInfoHandler
  with world/weather/** (ARWeatherWorldInfo wrapper + saved-data + manager)
- Install wrapper via MixinWorldServerMulti; register PlanetWeatherEventHandler
- Keep PR's usesCustomWorldInfo() short-circuit + nextInt clamps in
  WorldProviderPlanet, add our instance-check warn-once guard
- Add weather config keys (enableCustomPlanetWeather, logPlanetWeatherWrapping,
  forcePlanetWeatherWorldInfoWrapper)
- Remove PlusTiCPacketReleaseEntityTransformer (last pure-ASM transformer)
- Remove enablePlusTiCPortlyRocketCompat config option
- Document removal in README compatibility notes
- SpaceStationObject: read autoLand flag from "autoLand" not "occupied"
- ItemSpaceElevatorChip: clear list under "list" key, not "positions"
- ItemPlanetIdentificationChip: attach NBT in INVALID_PLANET branch

SatelliteRegistry.getNewSatellite returning null (not SatelliteDefunct)
remains a known live bug, pinned by a test in the suite step.
- Wire testUnit / testIntegration JUnit 4 task topology (RFG Groovy)
- Resolve forge-test-framework 0.4.2:dev from mavenLocal (composite build
  is incompatible with RFG variant transforms)
- Import 35 unit + 9 integration test classes + shared bootstrap
- Drop 25 orphaned cable tests (subsystem removed upstream)
- Adapt tests to PR API: DimensionProperties weather getters/setters,
  FuelRegistry non-inverted add return, default mission NBT serialises,
  fixed geode-multiplier getter
- Move satellite display-name contract to integration (getName resolves
  via LibVulpes.proxy); bootstrap LibVulpes.proxy in MinecraftBootstrap

testServer / testClient harness layers deferred (RFG harness rewrite).
Port the server/client test-harness Gradle wiring from the FG6 branch to
RetroFuturaGradle. No FG6 run-config reflection is needed: RunMinecraftTask
extends JavaExec, and forge-test-framework already defaults to RFG's
GradleStartServer launcher with legacyArgs. The child JVM self-configures
SRG/CSV mappings and discovers our coremod + FMLAT from the classpath manifest
(baked into GradleStart at token-replacement, scanned by GradleForgeHacks).

Key correctness points:
- Take the run task's classpath EAGERLY (.get().classpath) and never depend on
  the run task executing — a `runTask.map { it.classpath }` provider makes
  Gradle schedule runServer, which launches a foreground MC server that never
  exits and hangs the build.
- Exclude sourceSets.main.output from the test classpath: our mod is carried by
  the built jar via the run classpath, and FML throws DuplicateModsFoundException
  if it sees advancedrocketry as both classes dir and jar. The jar is also the
  only form with the FMLCorePlugin/FMLAT manifest, required for coremod loading.

Proven by HarnessDiagnosticTest: boots a real AR dedicated server under RFG and
gets `/list` -> "There are 0/20 players online" back via the framework's
command round-trip.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… runs)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The .agent/ tree (Navigator docs, ~60 context markers, 51 task docs, SOPs,
audits, knowledge graph, known-bugs ledger, DEVELOPMENT-README) and the full
CLAUDE.md rule set were stashed as "config noise" when feature/upstream was
branched from a clean 1.12 to keep the production merge focused. They hold
important decisions and rules, so bring them back as the historical base.

- Imported feature/tests .agent as-is; layered the 2026-05-31 upstream-merge
  marker (this branch) on top so it sorts chronologically last.
- Recovered three newer feature/tests markers (2026-05-30/31) plus the latest
  knowledge graph + nav-config from the stash.
- Dropped the stale .active resume pointer; appended the imported markers to
  .marker-log.
- Updated CLAUDE.md build facts for the RFG migration (FancyGradle/Kotlin-DSL ->
  RFG 2.0.2 Groovy, JDK 25 to run Gradle, testServer/testClient harness layers,
  mandatory wall-clock timeout on harness runs). The Russian-communication and
  bug-tracking rules carry over unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Bring the test-only probe command tree (12.9k lines) + its conditional
registration from the FG6 branch and reconcile it against the rewritten PR API.
Registered from AdvancedRocketry.serverStarting, gated on
-Dadvancedrocketry.tests=true (or a harness-spawned -Dforge.test.server=true),
so it is a no-op in normal gameplay.

API reconciliation:
- Wireless probes: the cable subsystem (tile.cables.TileWirelessTransciever,
  cable.NetworkRegistry/HandlerDataNetwork/CableNetwork) was replaced by the
  wireless-data backend. Rewrote the wireless-pair/info/set-mode/set-enabled/
  role-on-network handlers against tile.TileWirelessTransceiver's public API
  (getWirelessNetworkId/setWirelessNetworkId/isExtractModeWireless/...) and
  wirelessdata.{NetworkRegistry,HandlerDataNetwork,DataNetwork}. NetworkRegistry
  .dataNetwork is now dataNetwork(world); addSource/addSink take a priority.
  Source/sink role detection reflects DataNetwork's private endpoint sets (no
  public accessor); added forceJoinWirelessNetwork + wirelessEndpointMatches.
- TileForceFieldProjector.onIntermittentUpdate() -> update().
- world.util.TeleporterNoPortalSeekBlock(World) -> TeleporterSeekBlock(BlockPos)
  seeded with the destination world's spawn point.
- DimensionProperties.{rain,thunder}StartLength are now private -> read via
  get{Rain,Thunder}StartLength().

compileJava + testUnit + testIntegration green. Probe runtime behaviour will be
exercised by the server-tier suite (Phase C).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Bring the full server-tier suite from the FG6 branch. These drive the server
entirely through the /artest probe string surface and parse JSON responses, so
they carry almost no direct AR-API coupling and compile clean against the
upstream-merged tree. Runtime validation runs under `./gradlew testServer`
(each test boots a real MC dedicated server via forge-test-framework).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The PR renamed the block from advancedrocketry:wirelessTransciever to the
corrected advancedrocketry:wirelessTransceiver, so the `artest place` calls put
no tile down and wireless-pair reported "tiles not TileWirelessTransceiver".
PipeNetworkSmokeTest.wirelessTransceiverPairsAndTransmits now passes, validating
the Phase B wireless probe port end-to-end.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The mission complete-now probe stopped completing missions (completed:false)
after the upstream merge for two reasons:
- MissionResourceCollection.getProgress() now measures against dim-0 universal
  time (AdvancedRocketry.proxy.getWorldTimeUniversal(0)), not the mission dim's
  own clock, so the probe must backdate startWorldTime against the same source.
- tickEntity() now only evaluates completion once every MISSION_COMPLETION_TICKS
  (60) ticks, gated by completionCheckTimer, so a single tickEntity() call no
  longer reaches the progress>=1 check. Prime the timer to 59 first.

Added writeIntField helper. Fixes the 6 MissionGas/Infrastructure/Pyramid
completion tests.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…d bug #7 fix

The PR replaced the WorldCommand /ar monolith with the ARCommandRoot tree, so
the command-surface server tests needed updating to the new contract:
- WorldCommandGuardContractTest: player-requiring subcommands now resolve the
  sender via vanilla getCommandSenderAsPlayer (unified "You must specify which
  player..." message); goto/station are subtrees (goto dimension, station give);
  setGravity falls through to usage; addSolidBlockOverride was removed.
- CommandsSmokeTest: help now prints "/advancedrocketry [subcommand]".
- WorldCommandStarMiscContractTest: dumpBiomes moved under the dev subtree.

Also reapply known-bug #7's fix that upstream dropped: ReloadRecipesCommand
called createAutoGennedRecipes() on the runtime reload path, which registers
ShapedOreRecipe into Forge's frozen recipe registry and throws "being added too
late". Auto-genned recipes are registered once at init; the runtime reload only
refreshes machine + XML recipes. Restores /advancedrocketry reloadRecipes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- forcefield-tick probe: TileForceFieldProjector merged its gate-free
  projection step into update(), which only acts on world.getTotalWorldTime()
  % 5 == 0. Driving update() N times in one command saw a single world time
  (all-or-nothing). Advance the world clock to a fresh 5-tick boundary before
  each call so extension/retraction step deterministically.
- RocketFlightFailureModes: the merge added a launch-time fuel gate, so a
  zero-fuel rocket is now refused (isInFlight stays false) instead of entering
  flight. Pin the new gate.
- WirelessTransceiverContract: the rewritten tile's enabled toggle defaults ON,
  so a freshly placed transceiver starts enabled=true.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The rewritten unmanned-vehicle assembler scan now requires intakePower > 0 (an
air intake) and a generic IFluidHandler tank (the liquidTank, distinct from the
propellant fuelTank), or it returns NOINTAKE / NOTANK. Add both blocks to the
uv-rocket fixture interior so the assemble scan reaches SUCCESS.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
TileSatelliteTerminal.onInventoryButtonPressed(1) is the client half — it only
calls PacketHandler.sendToServer(id 101), which throws "Missing" client->server
network manager on a dedicated server and never runs the erase. The press-erase
probe now invokes the server half directly: useNetworkData(.., id=101) performs
the production erase (removeSatellite + chip.erase).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…on plan

Expand the progress marker with the Phase E client-test integration steps and
record that testClient (and any GL run) must use DISPLAY=:100 (:99 has no
OpenGL). Mirror the display rule into CLAUDE.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- precision-assembler: spread recipe ingredients across multiple input
  hatches (recipe index != inventory slot); add 2nd input hatch overlay
- cutting machine: fill ingredient with its recipe meta, not meta 0
- fueling station: add force-tick-clock probe verb that advances world
  time so the % OP_THROTTLE_TICKS transfer gate can fire
- wire testClient natives to RFG's extractNatives2 (run/natives/lwjgl2);
  there is no plain extractNatives task under RFG
- restore ClientProxy test-bridge bootstrap hook so RealClientHarness's
  ClientBot can attach (inert in production, gated on forge.test.client)
- import 24 client e2e tests + 2 support classes from feature/tests
- reconcile /ar command paths to the ARCommandRoot subcommand tree:
  goto <dim> -> goto dimension <dim>, giveStation -> station give,
  addSolidBlockOverride -> addSealant, fetch unknown-name now fails (0)
…) for attribution

Records all 584 original commits (kaduvill, ZHAY10086/ZetaY, jchung01,
Marvin Eckhardt, Wizzerinus) as ancestry. Tree is unchanged: production
content was already adopted by cluster in P0-P11; this restores authorship
that the squash dropped.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants