Skip to content

Repository files navigation

RetroReactors CurseForge Project Modrinth Project Maven Project

This is the official GitHub repo for the RetroReactors mod. Rediscover the long forgotten Nether Reactor with this modern, customizable redesign! You can download this mod from CurseForge or Modrinth. Please report issues here.

Maven Dependency

This project is available on the BlameJared Maven.

If you are using Gradle you can add the mod as a dependency by adding the following to your build.gradle file.

repositories {
    maven {
        url 'https://maven.blamejared.com'
    }
}

dependencies {
     // NeoForge
     implementation group: 'net.darkhax.retroreactors', name: 'retro_reactors-neoforge-26.1.2', version: '26.1.2.0'
     // Fabric
     implementation group: 'net.darkhax.retroreactors', name: 'retro_reactors-fabric-26.1.2', version: '26.1.2.0'
     // Common / MultiLoader / Vanilla / No Loader
     implementation group: 'net.darkhax.retroreactors', name: 'retro_reactors-common-26.1.2', version: '26.1.2.0'
}

DataPack Docs

This mod is fully driven by datapacks! This means you can add new types of reactors by adding JSON files to your datapack or mod. We use the vanilla data format where possible, allowing you to use pre-existing tools and documentation like this intro to datapacks tutorial. This guide assumes you know the basics, like installing and using datapacks and data files.

Reactor type data files go here data/<namespace>/retro_reactors/reactor_type/your_type_file.json. The namespace is a unique name for your pack that can only contain lowercase characters, numbers, and underscores! Do not use retro_reactors as your namespace, that is reserved by the mod itself and should only be used for built-in types. You can find an example pack here.

Reactor Type

Reactor types define how the reactor tower and its contents are generated. Players generate your custom reactor type by building the reactor multiblock structure using matching catalyst and casing blocks.

Important

If the reactor multiblock structure matches more than one reactor type, only the first type will be used!

Property Type Description
casing Reactor Piece Checks if a block is a valid casing block. These are the blocks that surround the reactor.
catalyst Reactor Piece Checks if a block is a valid catalyst block. These are the blocks in the four corners of the reactor.
palettes Block Paletts Palettes of blocks that can be used when generating the reactor tower.
layers Reactor Layer A list of reactor layers, these define how the reactor tower is generated.
decorator Reactor Decorator Decorates the floor of the reactor tower.
mob_spawning Reactor Mobs Mobs that will spawn within the reactor tower.
loot Reactor Loot Loot tables that will randomly generate within the reactor tower.

Reactor Piece

Reactor pieces define a piece of the reactor structure that is built before the reaction occurs.

  • input - A Block Predicate that determines which blocks are valid.
  • becomes - The BlockState that the piece should turn into after the reaction.
{
  "input": {
    "blocks": "minecraft:gold_block"
  },
  "becomes": {
    "block": "minecraft:crying_obsidian"
  }
}

Block Predicate

Block predicates define requirements that blocks are tested against to determine if they match. You can test things like the block id, block tags, block state properties, nbt, and more. This is a vanilla feature, and uses the same format as advancement block predicates.

This example tests if the block is a diamond block, or if it's in the diamond_ores tag. Tags are prefixed with #.

{
  "blocks": [
    "minecraft:diamond_block",
    "#minecraft:diamond_ores"
  ]
}

This example uses a state predicate to test block state properties like how many bites are taken from a cake.

{
  "blocks": "minecraft:cake",
  "state": {
    "bites": "2"
  }
}

This example uses an NBT predicate to test the primary effect chosen for a beacon block. This is only a partial NBT match, so you only need to define the properties you care about.

{
  "blocks": "minecraft:beacon",
  "nbt": {
    "primary_effect": "minecraft:speed"
  }
}

Block Palettes

Block palettes define named lists of random blocks that can be used when generating the reactor tower. Each entry has a name, a list of blocks, and a weight that determines how common the entry is.

Tip

Palettes use weighted random instead of hardcoded percentages. This means the odds adjust dynamically as you add or remove entries. Weights do not need to add up to 100, and you can use any scale you like. For example if the weights are 1, 3, and 6, that is the same as 10%, 30%, and 60%. If you add a fourth entry with a weight of 10, the total weight changes from 10 to 20, and the odds change to 5%, 15%, 30%, and 50%.

The following example shows a palette named floor with two potential blocks that can be selected. Because the total weight is 4, the diamond ore has a 25% chance to happen and the coal ore has a 75% chance.

{
  "palettes": {
    "floor": [
      {
        "data": {
          "block": "minecraft:diamond_ore"
        },
        "weight": 1
      },
      {
        "data": {
          "block": "minecraft:coal_ore"
        },
        "weight": 3
      }
    ]
  }
}

Blocks will use their default state unless specified.

{
  "palettes": {
    "floor": [
      {
        "data": {
          "block": "minecraft:redstone_lamp",
          "properties": {
            "lit": "true"
          }
        },
        "weight": 1
      }
    ]
  }
}

Reactor Layer

The reactor tower is generated using layers of circles that are stacked on top of each other. The first layer is the floor and is generated below the reactor. By combining layers in different ways, you can create different shapes.

  • palette - The name of the palette to use when generating the layer. This palette must exist in the palettes section!
  • radius - The radius of the circle used to generate the layer. Defaults to 12. Must be between 0 and 32.
  • height - The height of the layer. Defaults to 1. Must be between 0 and 64.
  • fill - Determines if the layer should be filled in, or if just the outer edge is generated. Defaults to false.

This is an example of what a floor layer typically looks like. We set fill to true to ensure the whole are is filled. This is an example of what a floor layer typically looks like. We set fill to true to ensure the whole are is filled.

{
  "palette": "floor",
  "radius": 12,
  "height": 1,
  "fill": true
}

This is an example of what wall layers typically look like. By default, the layer is not filled.

{
  "palette": "wall",
  "radius": 12,
  "height": 3
}

Reactor Decorator

The decorator is an optional layer that allows you to decorate the floor of the tower with blocks like plants. The foliage layer never replaces blocks, and can only be placed in areas where the block can normally be placed.

Tip

Set the radius to be at least 1 less than the radius of your floor, to account for the walls.

{
  "palette": "foliage",
  "radius": 11
}

Reactor Mobs

When the reactor tower is generates mobs can also be spawned. Spawned mobs will automatically target the player that activated the reactor.

  • radius - The distance away from the core to spawn mobs. Must be between 0 and 32. Defaults to 8.
  • amount - A number provider that determines the amount of random mobs to spawn.
  • random_spawns - A weighted list of mobs that can randomly spawn.
  • always_spawns - A list of mobs that will always spawn.

Tip

Mob entries use the same format as spawn eggs or the summon command, allowing you to give mobs armor or other properties and effects.

This example spawns 3-7 zombies in the tower. Zombies have a 10% chance to spawn with a copper sword. Additionally, one ghast will also always spawn.

{
  "mob_spawning": {
    "amount": {
      "type": "minecraft:uniform",
      "min": 3,
      "max": 7
    },
    "radius": 5,
    "random_spawns": [
      {
        "data": {
          "id": "minecraft:zombie"
        },
        "weight": 90
      },
      {
        "data": {
          "id": "minecraft:zombie",
          "equipment": {
            "mainhand": {
              "id": "minecraft:copper_sword"
            }
          }
        },
        "weight": 10
      }
    ],
    "always_spawns": [
      {
        "id": "minecraft:ghast"
      }
    ]
  }
}

Reactor Loot

When the reactor tower generates, loot can optionally be spawned on the ground inside the tower.

  • amount - Determines the amount of times to generate loot. The default is 6.
  • radius - Determines how far out to spawn the loot. The default is 8.
  • table - The ID of the loot table to generate loot from.

This example generates loot from the dungeon loot chest 3-7 times.

{
  "amount": {
    "type": "minecraft:uniform",
    "min": 3,
    "max": 7
  },
  "table": "minecraft:chests/simple_dungeon"
}

Sponsors


RetroReactors is proudly sponsored by Nodecraft! Play your favorite games with your friends using their high performance game servers! Use code DARKHAX for 30% off your first month of service!

About

Rediscover the long forgotten Nether Reactor with this modern, customizable redesign!

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages