Replace TricksWires and TricksWireless
- Stop the server. Back up both entire data folders, including any .db-wal/.db-shm files.
- Remove both old JARs from plugins/. Keep their data folders named TricksWires and TricksWireless.
- Install GrimsRedstoneWifi-0.4.7.jar. Requires Paper 26.3 / Java 25; native methods are checked against Paper 26.3 build 194.
- Start. Missing destination databases are imported from TricksWires/wires.db and TricksWireless/wireless.db into GrimsRedstoneWifi/. Snapshots include committed WAL data. Source folders remain intact.
- If the new config is absent, old wire and wireless settings merge. Missing values use bundled defaults. The ZIP's examples/config.yml is reference only; do not install it over old settings before import.
- Check /tw status, /tw colors and /grw inspect. Existing ownership, colors, tagged hooks/strings/devices/components and placed devices remain valid. Existing transponders need no replacement or rotation.
The combined plugin refuses startup if either old plugin is still installed. Use only the combined JAR after migration. For fresh installations, install it directly. GrimsClientChecker and Floodgate remain optional.
Rollback: stop, remove the combined JAR, restore old JARs and complete backups. The combined plugin does not write back to the old folders, so rollback loses later changes unless restored from a matching saved state. Do not hot-reload or run both versions.
Staff commands
/grw give PLAYER sender 2 /grw give PLAYER receiver 2 /grw give PLAYER transponder 2 /grw give PLAYER sender-component 1 /grw give PLAYER receiver-component 1 /grw give PLAYER transponder-component 1
Exact online name required, including any Floodgate prefix; amount 1–64. Full inventory refuses without partial grants. Three separately tagged paper component recipes and five device recipes are now registered; see RECIPES.md. Tagged devices/components cannot enter unrelated vanilla crafting.
Craft Trick Hooks through the normal hook recipe. Given vanilla hooks and crate keys remain untouched. /tw novelty PLAYER [1-64] grants collectible string; ordinary string remains the building material and cut-wire refund.
Permissions
| Permission | Default | Purpose |
|---|---|---|
| trickswireless.use | Everyone | Own devices and menus |
| trickswireless.admin | Operators | Wireless give/reload |
| trickswireless.admin.edit | False | Edit/remove others' devices; cannot re-pair their ownership |
| trickswires.use | Everyone | Hooks, wires, wire controls |
| trickswires.admin | Operators | Wire status/reload |
| trickswires.admin.novelty | Operators | Collectible string grants |
| trickswires.admin.see | False, including operators | See others' nearby particles |
| trickswires.admin.edit | False | Wire ownership edit bypass |
Existing permission names remain valid. Wire edit/visibility details are in WIRE-ADMIN-GUIDE.md. ClientChecker's live touch preference selects mobile forms; Floodgate touch detection is fallback. Other clients use inventory menus, as do touch clients when forms are unavailable. /tw colors retains a single chest with 18 choices.
Settings and behavior
Both databases and config live under plugins/GrimsRedstoneWifi/. Wireless defaults: range-blocks 128, player-radius-chunks 8, max-devices 2048, max-per-player 128, pulse-ticks 40, touch-forms true. Nested limits, particles, detection and interaction control wires. /grw reload resynchronizes wireless baselines; /tw reload refreshes wires. Run both after changing both sections.
Transponders trace independent sources on six faces through dust/conducting blocks. Same-bus receiver/target output is excluded as an input source. Dust respects a bounded 15-strength path. Searches skip unloaded chunks and cap at 4096 visited states, returning unpowered if unresolved. Diodes and torches remain physical signal sources; intentionally wired feedback can latch/oscillate. Other color-bus Receivers can bridge channels.
Multiple inputs into a transponder combine before edge detection. Changes observed in the same polling tick resolve in saved device order; directional sender events retain Bukkit ordering. All later changes preserve last-change authority including OFF. Outputs are 0/15. Transponders do not relay range beyond the winning source.
Only loaded, player-viewed devices inside simulation distance run; no chunk tickets. An unavailable winner switches outputs off. Restart rechecks its physical input, preserves Toggle state and expires old Pulses.
Managed comparator tile output and target power produce physical signals. Scheduled output ticks are suppressed so vanilla comparator calculations cannot overwrite received power. Native methods may change across Paper releases; startup fails on linkage errors.
Storage failures stop the combined plugin and clear loaded outputs where possible. External block replacements are reconciled without refunds. Bukkit protection probes require testing with your actual claim plugins. No crop tripwire states are used/enabled. Install the Java/Bedrock packs and Geyser item mappings using RESOURCE-PACKS.md; visuals.enabled controls decorative models.
Build
Java 25: gradlew.bat build (or ./gradlew build). --offline uses established local dependency caches. Normal builds use declared repositories. The compile-only ClientChecker API is included under libs, not bundled at runtime. Generated assets are included in the Source ZIP. To regenerate, install Pillow and NumPy and run python tools/build_assets.py before building. See TESTING.md.
Ranked error reporting
See NIXIE-ERRORS.md for the four AskNixie ranks, the new com.evergrims.grimsredstonewifi.GrimsRedstoneWifiPlugin main class, registration and enabling all alert ranks. Existing combined installations keep their data folder and add the supplied resource packs. Local parser verification does not claim live delivery.
0.4.1 update and pulse testing
Back up plugins/GrimsRedstoneWifi/ while stopped, install the new JAR and both updated packs/mappings, then restart Paper/Geyser and reconnect clients. Database schema 2 adds saved smart-repeater settings; restore the full backup before downgrading. Existing placed device directions are retained; new placements reverse the old orientation.
The missing pulse setting is added to existing config files on startup without replacing their values:
smart-repeater:
short-pulse-ticks: 10
10 game ticks = 0.5 seconds at normal speed. The accepted range is 1–600 ticks. Edit it and run /grw reload to clear pending work and apply it; this also resynchronizes wireless inputs. The value controls newly created short pulses in bandwidth NO mode, for both START and END triggering. YES mode preserves the input duration instead.
Give new devices with /grw give PLAYER diode 20 or /grw give PLAYER smart-repeater 2. Both devices also have vanilla-ingredient crafting-table recipes; no command grants are required. See RECIPES.md. They share the existing owner protections, placement/support checks, device limits and break refunds. Local diode/repeater processing requires loaded neighboring chunks but does not require a nearby player. Wireless buses retain their existing player-active range policy.
Redstone-update flashes are addressed by per-connection block packet masking, including section and bundle packets. Packet snapshots contain no live world objects and are applied before Geyser translates the Java connection. This does not allocate custom block states. Connection-mask failures log rank 2 and show native blocks until reconnect; no extra packet plugin is needed. Actual Java/Bedrock rendering and packet-plugin compatibility still require live testing.
0.4.2 model fix
Refresh the Java resource pack and its download hash for the corrected transponder surfaces; the plugin JAR alone is insufficient. Bedrock geometry is updated too. Mapping IDs and saved devices remain compatible. Version 0.4.3 retains full-block covers only on transponders.
Smart Repeaters open their settings on ordinary use with any held item; crouching suppresses the menu and permits normal placement behavior. Since 0.4.5, crouching with any ordinary item (not dye, not empty-handed) leaves the click to vanilla on every device kind, so signs, item frames and paintings can cover devices. Earlier versions denied the device's block use, which also stopped Paper placing the held item. Claim denials, ownership and inventory-transfer protection still apply. Inventory menus use static icons, short action-specific lore and a delay in the title. Touch forms retain all settings with a compact multiline status summary.
0.4.3 low-profile installation
Replace the JAR and update both resource packs and the supplied item mappings together. Refresh the Java pack URL/SHA-1 and reconnect clients; replace the Bedrock pack and restart/reload Geyser according to its normal pack workflow. Old models do not enclose the new low cover.
Non-transponder positions are sent to textured clients as two snow layers: collision 0.125, selection 0.25. The actual server blocks remain repeaters/comparators with identical collision. Transponders still use the barrier cover and full collision. No real snow is placed; no vanilla snow model or global block mapping is overridden. Plinths enclose the cover while held-item models stay unchanged. Existing device records require no migration. Pack failures retain the native-block fallback and ranked diagnostics. Check movement, mining and interactions on Java and Bedrock before live rollout.
0.4.6 lighthouses
Players build a 5x5 ring of redstone lamps or copper bulbs (any oxidation, waxed or not) up to 3 tall, then place a standing or wall sign at ground level in the middle. If enough of the ring is lamps, the sign becomes a lighthouse owned by the placer and starts at once. One lamp per row is lit and the light walks the ring clockwise, one block per step. Right-click the sign: on/off. Crouch and right-click: settings (mode, speed, edit sign text). Crouch and break: remove. The sign cannot be broken while standing, and the block holding it up cannot be broken until the sign is removed. Explosions, pistons, fire and mobs spare both.
Startup adds any missing lighthouse keys, with comments, to an existing config.yml. Values already there are kept:
| Key | Default | Meaning |
|---|---|---|
lighthouse.min-lamp-columns | 12 | Ground-level ring spots (of 16) that must hold a lamp. Spare spots can be doorways. |
lighthouse.step-ticks | 40 | Step length for new lighthouses (20 ticks = 1 second). |
lighthouse.min-step-ticks | 40 | Fastest step owners can choose. |
lighthouse.max-step-ticks | 60 | Slowest step owners can choose. |
lighthouse.max-per-player | 16 | Lighthouses one player can own. |
lighthouse.max-total | 512 | Lighthouses on the server. |
Step values are rounded to multiples of 10 and kept between 10 and 1200 ticks. Owners change speed 10 ticks at a time within min and max. After /grw reload, a lighthouse whose saved step falls outside the new range runs at the nearest allowed value.
Permission trickswireless.lighthouse (default true) covers building, toggling, settings and removal of your own lighthouses. trickswireless.admin.edit also lets staff toggle, configure and remove other players' lighthouses. Placement runs after claim plugins (BlockPlaceEvent at MONITOR, cancelled events ignored), and removal is an ordinary BlockBreakEvent, so claims still apply.
Lighthouses are stored in a new lighthouses table in wireless.db. The schema version stays 2, so rolling back to 0.4.5 is safe: older builds ignore the table. Lamps change without block updates; while a lighthouse runs, Paper's redstone events stop neighbours or outside power from changing its lamps. Turning a lighthouse off, removing it, or stopping the server hands the lamps back to vanilla: redstone lamps follow their power and copper bulbs go dark. Stepping runs on the existing wireless timer and does work only every 10 ticks while a lighthouse is on. Each step reads the 48 ring blocks of each lighthouse and writes only the lamps that change. Lighthouses in unloaded chunks pause, and no chunks are loaded for them.
Wire administration in GrimsRedstoneWifi
Install and migrate using ADMIN-GUIDE.md. These wire commands and permissions are retained.
Colors and novelty giveaways
/tw colors opens a 27-slot chest on every client, including touch. Its first 18 slots are color choices; the bottom row selects Wire, Corners or Junctions, resets all colors, or closes the menu. Standard clicks/taps suffice. The main /tw controls still follow ClientChecker's live touch preference, and include a link to the color chest.
Colors save per owner in the wire database, apply to all their existing and future networks, and are shown consistently to authorized viewers. Default lines are light gray, corners amber, and junctions cyan. Red/green construction previews remain unchanged. Color customization never changes detection, redstone, privacy, range, or particle budgets.
Console or staff with trickswires.admin.novelty can use /tw novelty <online-player> [amount], for example /tw novelty Alex 3. Amount defaults to 1 and must be 1-64. Use the recipient's exact current player name, including any Floodgate prefix. The command refuses offline recipients and insufficient inventory space without partial delivery. Reward systems may run it as console while the recipient is online.
The collectible is separately tagged, named exactly Tricks' Wire, and excluded from wire placement/consumption. It is never crafted, automatically substituted into inventories, or returned by cutting. This command cannot give Trick Hooks; their crafted-only identity remains intact.
Permissions
| Permission | Default | Purpose |
|---|---|---|
trickswires.use | Everyone | Craft hooks, build own wires, use controls |
trickswires.admin | Operators | Reload configuration and view server totals |
trickswires.admin.novelty | Operators | Give the separate string collectible with /tw novelty |
trickswires.admin.see | False, including operators | See other owners' nearby wire particles |
trickswires.admin.edit | False | Remove another owner's points/supports; selecting/cutting points also requires visibility |
General admin access does not include either bypass. Example LuckPerms grants:
/lp user YOUR_NAME permission set trickswires.admin.see true
/lp user YOUR_NAME permission set trickswires.admin.edit true
Networks cannot mix owners, even with edit bypass. Administrators can inspect/remove another owner's wire but cannot extend it into their own network. Particles are sent to individual authorized players; no world-wide particle broadcast is used. Placement previews are private to the builder.
Commands and configuration
/tw reload reloads plugins/GrimsRedstoneWifi/config.yml without deleting wires. /tw status shows server totals to admins and personal totals to other players. /trickswires and /tricks are aliases.
A successful run ending at a registered Trick Hook or an existing wire point now clears the builder's selection automatically. This includes loop closure and joining an existing network at a junction. The next click with string starts a new line. New open endpoints stay selected for turns; rejected connections retain their original starting point. The behavior is shared by direct interaction, /tw point, and the mobile controls, with no extra setting or permission.
Defaults: 48 blocks per straight segment, 512 points per connected network, 4,096 points per owner, 32,768 points server-wide; particles within 6 blocks every 10 ticks, capped at 160 per player per update; detection every tick with a 10-tick release delay. Values are bounded in code to prevent accidental extreme settings. New limits affect future edits; they do not delete existing networks.
Players, mobs, and vehicles trigger wires by default. Items and projectiles are configurable and default off. Spectators and armor stands are excluded. String placing/cutting is disabled in Adventure and Spectator modes.
The default detection.height: 0.125 is the wire's center above its support, not the height of a detection wall. detection.half-width: 0.10 also sets the vertical half-thickness, giving a band from 0.025 to 0.225 blocks above the support. Turning on projectiles does not extend it upward. There are no vertical runs or detection curtains in this release.
Active hooks output strength 15, strongly powering their solid mounting blocks. A repeater behind a mounting block, pointing away, can feed a circuit. All hooks in the connected network activate together. The virtual wire and its corner/junction markers are not redstone output blocks. Live electrical propagation still needs the acceptance checks.
World and protection behavior
Each wire position needs air and a full supporting top face. Hooks need a full wall face and may connect only from the front. Automatic routing never removes blocks or crops.
Placement performs cancellable Bukkit build checks at every point, and cutting performs a Bukkit break check. These are event probes for virtual positions, not real temporary block placements. Test them with the claim/protection plugins and configuration you actually use; plugins that require a changed physical block or use nonstandard APIs may need a dedicated integration.
Owners can build over their wire or break its support to remove it. Other players cannot overwrite another owner's wire through normal placement or support breaking. Pistons touching a wire/hook or its support are blocked; incoming fluids and entity block changes are blocked at those positions. Explosion, burning, fading, or external block replacement can invalidate wire; destructive/unknown external changes are reconciled without refunds to avoid duplicate drops. Creative removals return no items.
Networks crossing unloaded chunks are suspended, including their hook support chunks. Loaded outputs switch off and resume detection when the complete network is loaded again. The plugin never loads or tickets chunks to keep traps running.
Native hooks are placed directly without Minecraft's hook-item placement scan. Their powered/attached flags are managed by the plugin, with targeted native redstone notifications. Flags are cleared before managed removal, and outputs are cleared on shutdown. Physical hooks remain visible to everyone; privacy applies to wire particles.
Data and recovery
Topology, owner UUIDs and player color preferences live in plugins/GrimsRedstoneWifi/wires.db. While running, SQLite may also use wires.db-wal and wires.db-shm. Stop the server before copying the database, or use a proper SQLite backup; do not copy only the main DB during active writes.
Edits use transactions. A storage error disables the plugin and retains the database for investigation. Invalid data is not silently replaced with an empty network. Preserve the full data directory before recovery.
The plugin does not scan and adopt existing vanilla hook blocks or tripwire crop blocks. Only hooks registered by this plugin are managed. If you remove the plugin, its wire particles/detection stop and existing hooks become ordinary inactive blocks after a clean shutdown. Restore the matching database with the plugin to recover ownership and networks.
Building from source
Run gradlew.bat build with Java 25. The Source ZIP includes the matching GrimsClientChecker API for compilation only. You can select another compatible API with -PclientCheckerApi=path/to/api.jar. Normal builds resolve Paper, Floodgate, SQLite, JUnit, and MockBukkit from their repositories.
For an existing complete dependency cache, gradlew.bat --offline build uses local cached JARs. -PofflineCacheRoot=path selects an exported cache with Gradle's group/module/version layout. Outputs are under build/libs/ and build/distributions/.
tools/PaperLinkageProbe.java can check adapter signatures against a Paper server JAR and its library classpath; it bootstraps registries without starting a server. This check is not a world/redstone test. tools/Audit-Artifacts.ps1 checks release contents, test results and hashes.
Crouch-placing ordinary string passes through to vanilla tripwire placement and clears the active virtual-wire selection. The plugin does not choose or rewrite tripwire block states for this action. Existing protection and crop-plugin rules still apply.