feat(04-01): register GravityFlipWand interaction + item JSON (WAND-01, WAND-02)
- GravityFlipWandInteraction extends SimpleInstantInteraction; Primary/Secondary routed through firstRun(), writes to WandSelectionStore via volatile bindStore() - Items/gravityflip_wand.json: Utility item (Icon Torch_Fire) whose Primary and Secondary Interactions reference Type=GravityFlipWand - GravityFlipPlugin.setup(): constructs WandSelectionStore, injects it into the interaction class, then registers via getCodecRegistry(Interaction.CODEC) (pattern from InstancesPlugin:158 / ExitInstanceInteraction) - Expose wandSelections() getter for Phase 04-02+ commands
This commit is contained in:
@@ -15,6 +15,9 @@ import com.mythlane.gravityflip.region.GravityFlipRegion;
|
||||
import com.mythlane.gravityflip.region.RegionRegistry;
|
||||
import com.mythlane.gravityflip.tick.RegionTickLoop;
|
||||
import com.mythlane.gravityflip.viz.RegionVisualizer;
|
||||
import com.mythlane.gravityflip.wand.GravityFlipWandInteraction;
|
||||
import com.mythlane.gravityflip.wand.WandSelectionStore;
|
||||
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
|
||||
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.logging.Level;
|
||||
@@ -46,6 +49,7 @@ public class GravityFlipPlugin extends JavaPlugin {
|
||||
private GravityApplier gravityApplier;
|
||||
private FallDamageGuard fallDamageGuard;
|
||||
private RegionVisualizer regionVisualizer;
|
||||
private WandSelectionStore wandSelectionStore;
|
||||
|
||||
public GravityFlipPlugin(JavaPluginInit init) {
|
||||
super(init);
|
||||
@@ -69,6 +73,18 @@ public class GravityFlipPlugin extends JavaPlugin {
|
||||
getEntityStoreRegistry().registerSystem(new FallDamageSuppressorSystem(
|
||||
fallDamageGuard,
|
||||
th -> getLogger().at(Level.WARNING).withCause(th).log("fallDamageSuppressor handle failed")));
|
||||
|
||||
// Plan 04-01 : Gravity Flip wand.
|
||||
// Interaction binding pattern per 04-00 SPIKE-RESULT (Finding 3) — same shape as
|
||||
// InstancesPlugin.java:158 / ExitInstanceInteraction. The JSON Item at
|
||||
// src/main/resources/Items/gravityflip_wand.json references this Type in
|
||||
// Interactions.Primary / Interactions.Secondary.
|
||||
this.wandSelectionStore = new WandSelectionStore();
|
||||
GravityFlipWandInteraction.bindStore(this.wandSelectionStore);
|
||||
getCodecRegistry(Interaction.CODEC).register(
|
||||
"GravityFlipWand",
|
||||
GravityFlipWandInteraction.class,
|
||||
GravityFlipWandInteraction.CODEC);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -151,6 +167,14 @@ public class GravityFlipPlugin extends JavaPlugin {
|
||||
/** Exposed for Phase 3 (gravity physics) and Phase 4 (commands). */
|
||||
public RegionRegistry regions() { return registry; }
|
||||
|
||||
/**
|
||||
* Per-player wand selection store. Populated by
|
||||
* {@link GravityFlipWandInteraction}; consumed by
|
||||
* {@code /gravityflip define} (Phase 04-02+).
|
||||
* <p>Returns {@code null} until {@link #setup()} has run.
|
||||
*/
|
||||
public WandSelectionStore wandSelections() { return wandSelectionStore; }
|
||||
|
||||
/**
|
||||
* Accessor for the region config holder. <strong>SAVE CONTRACT:</strong> any
|
||||
* caller that mutates {@code configHolder().get().getRegions()} MUST call
|
||||
|
||||
Reference in New Issue
Block a user