Skip to content

Neonalig/CreatePop

Repository files navigation

Create: Pop Logo

Create: Pop

Available on Modrinth Available on CurseForge

Create: Pop is a NeoForge addon for Create.

Brew custom sodas in your Create mixer by carbonating water and reacting it with potions, dyes, and stabilisers. Every recipe is procedurally unique: effects combine, stack, and mutate through a reaction chain that rewards experimentation and careful record-keeping. The instability system ensures that reckless remixing has consequences - but the right stabiliser at the right moment can turn a dangerous batch into something remarkable.

Features

  • Soda brewing via Create mixers: Carbonate water with a diamond, then mix it with any potion to create a soda base. Sodas carry real potion effects and can be bottled, bucketed, or piped through your Create contraptions.
  • Procedural effect reactions: Mixing two different sodas triggers a deterministic reaction phase that can fuse, split, or catalyse effects into entirely new combinations.
  • Instability system: Every remix adds instability. Push too far and the batch backfires, injecting a random negative effect. Stabilise with acacia, magma cream, or amethyst to keep production clean.
  • Discovery and naming: First-time recipes prompt you to name the result. Names persist across the world and sync to all players who encounter the same soda.
  • Brewer's Notebook: Record learned recipes, ingredients, effects, and personal tasting notes. Combine or duplicate notebooks to share recipes with other players.
  • Brewer's Guide: An in-game reference covering carbonation, mixing rules, instability, and the full discovery loop.
  • JEI integration: Soda reaction hints are visible in JEI once discovered, with an optional cheat/debug mode to reveal all possibilities.
  • Dye recolouring: Add a dye to the mixer to shift a soda's colour without changing its effects.

Dependency


Technical Overview

Version and Target

  • Mod id: createpop
  • Current version: Create: Pop Current Tag
  • Target Minecraft: Minecraft 1.21.1
  • Target NeoForge: NeoForge 21.1.x
  • Java toolchain: Java 21

Brewing Chain

  1. Add water to a Create mixer basin.
  2. Add a diamond to carbonate the water (heat not required).
  3. Mix carbonated water with any potion fluid (or a potion item in the basin) to create a soda base. Each base carries a starting instability of ~0.24.
  4. Mix two different sodas to combine and react their effects.
  5. Add a dye item to recolour the soda without altering its effects.
  6. Add a stabiliser item with the required heat level to reduce instability before a backfire occurs. Every mix in steps 4-6 consumes exactly 250 mB of each fluid input. Stabilisation requires 1000 mB.

Instability Mechanics

  • Base creation adds basePotionInstabilityGain (default: 0.24) instability.
  • Each remix adds mixFlatInstabilityGain (default: 0.12) plus mixReactionInstabilityGain (default: 0.45) per positive reaction resolved.
  • When instability exceeds instabilityThreshold (default: 0.70), a random negative effect is injected and instability resets to safeInstabilityAfterBackfire (default: 0.45).
  • Acacia stabilisation (heated mixer): reduces instability by acaciaLogInstabilityReduction (default: 0.05).
  • Magma cream stabilisation (heated mixer): reduces instability by magmaCreamInstabilityReduction (default: 0.45).
  • Amethyst purification (superheated mixer): sets instability to exactly 0.0 and inverts every negative effect to its positive counterpart.

Reaction System

When two sodas are mixed, a deterministic per-world-seed reaction phase runs on the combined effect list:

  • Each unique effect pair is tested against reactionAffinityThreshold (default: 0.45).
  • Reactions may fuse (both effects consumed, all time goes to one new effect), fission (total time split between two effects), or catalyse (one effect kept at its own duration, the other converts to a new effect).
  • Each triggered reaction increases instability by mixReactionInstabilityGain.

Discovery System

  • Picking up a soda for the first time triggers the learning flow for the player.
  • Right-clicking a vessel while holding a Brewer's Notebook scans it for soda data.
  • New discoveries prompt a naming dialog on the client; names are stored server-side and broadcast to all affected stacks.
  • Notebooks carry their own recipe maps and can be merged, duplicated, or combined via crafting recipes.

UI and Commands

  • Brewer's Guide (right-click): In-game reference covering all major mechanics.
  • Brewer's Notebook (right-click in air): Opens the notebook screen for browsing discovered recipes, reading ingredients and effects, and writing tasting notes.
  • Soda Name Prompt: Appears automatically on first recipe discovery.
  • /createpop soda_debug: Prints internal soda data (effects, colour, instability, fluid amount) to chat. Available to all players.

Project Structure (Key Paths)

Build and Run

Prerequisites

  • JDK 21
  • Internet access for first dependency resolution

Gradle Tasks

# Build Jar (output in build/libs/)
.\gradlew.bat jar
# Run Dev Client
.\gradlew.bat runClient
# Run Dev Server
.\gradlew.bat runServer
# Run Data Generation
.\gradlew.bat runData

Configuration

Common config (config/createpop-common.toml) includes:

  • Instability values (base gain, reaction gain, flat gain, threshold, reset value)
  • Stabilisation reduction amounts per stabiliser type
  • Reaction affinity threshold Client config (config/createpop-client.toml) includes:
  • forceUnlockAllJeiSodaRecipes - debug option to show all JEI hints regardless of discovery state

Troubleshooting

  • JEI shows no soda recipes: Discover sodas in-game first, or enable forceUnlockAllJeiSodaRecipes in the client config.
  • Instability backfiring unexpectedly: Use a stabiliser between major remix steps. Check current instability with /createpop soda_debug.
  • Notebook not saving recipes: Right-click in air (not targeting a block) while holding the notebook, then use the save button in the screen.
  • Wrong fluid being consumed in mixing: Ensure the mixer basin has at least 250 mB of each expected fluid input and the correct heat level.

Notes for Contributors

  • Keep DynamicSodaMixing.findRecipe() lightweight - it runs on the server thread per basin tick.
  • Keep SodaEffectReducer.mix() deterministic given the same world seed and inputs.
  • Avoid cross-thread mutation in the discovery manager.
  • New item content should include recipes, advancements, lang entries, textures, and models.

License

Licensed under the MIT License. See LICENSE for details.

About

Brew custom sodas and become the most pop-ular distributor around

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

 

Packages

 
 
 

Contributors

Languages