Bedrock Snippets

Custom Fluid

View Source

custom_fluids > bp > blocks > custom_fluid.json

{
  "format_version": "1.20.30",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:custom_fluid",
      "menu_category": {
        "category": "none"
      },
      "states": {
        "wiki:source": [true, false],
        // Depth of fluid - default to 4
        "wiki:depth": [4, 5, 3, 2, 1]
      }
    },
    "components": {
      "minecraft:light_dampening": 0,
      "minecraft:collision_box": false,
      "minecraft:selection_box": false,
      "minecraft:destructible_by_explosion": false,
      // Trigger fluid spread
      "minecraft:queued_ticking": {
        "looping": true,
        "interval_range": [20, 20], // Fluid speed in ticks
        "on_tick": {
          "event": "wiki:flow"
        }
      },
      "minecraft:material_instances": {
        "*": {
          "texture": "custom_fluid", // Shortname defined in `RP/textures/terrain_texture.json`
          "render_method": "blend",
          "ambient_occlusion": false,
          "face_dimming": false
        }
      },
      "minecraft:loot": "loot_tables/empty.json",
      "tag:custom_fluid": {}
    },
    "events": {
      "wiki:flow": {
        "sequence": [
          // Dry out
          {
            "condition": "!q.block_state('wiki:source') && ((q.block_state('wiki:depth') == 5 && !q.block_neighbor_has_any_tag(0, 1, 0, 'custom_fluid')) || (q.block_state('wiki:depth') == 1 && !(q.block_neighbor_has_any_tag(1, 0, 0, 'custom_fluid_2') || q.block_neighbor_has_any_tag(-1, 0, 0, 'custom_fluid_2') || q.block_neighbor_has_any_tag(0, 0, 1, 'custom_fluid_2') || q.block_neighbor_has_any_tag(0, 0, -1, 'custom_fluid_2')) || q.block_state('wiki:depth') == 2 && !(q.block_neighbor_has_any_tag(1, 0, 0, 'custom_fluid_3') || q.block_neighbor_has_any_tag(-1, 0, 0, 'custom_fluid_3') || q.block_neighbor_has_any_tag(0, 0, 1, 'custom_fluid_3') || q.block_neighbor_has_any_tag(0, 0, -1, 'custom_fluid_3'))) || (q.block_state('wiki:depth') == 3 && !(q.block_neighbor_has_any_tag(1, 0, 0, 'custom_fluid_4', 'custom_fluid_5') || q.block_neighbor_has_any_tag(-1, 0, 0, 'custom_fluid_4', 'custom_fluid_5') || q.block_neighbor_has_any_tag(0, 0, 1, 'custom_fluid_4', 'custom_fluid_5') || q.block_neighbor_has_any_tag(0, 0, -1, 'custom_fluid_4', 'custom_fluid_5'))))",
            "die": {}
          },
          // Spread
          {
            "condition": "q.block_state('wiki:depth') == 4",
            "run_command": {
              "command": [
                "execute if block ~~~1 air run setblock ~~~1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]",
                "execute if block ~~~-1 air run setblock ~~~-1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]",
                "execute if block ~1~~ air run setblock ~1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]",
                "execute if block ~-1~~ air run setblock ~-1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]"
              ]
            }
          },
          {
            "condition": "q.block_state('wiki:source') && q.block_neighbor_has_any_tag(0, 1, 0, 'custom_fluid')",
            "set_block_state": {
              "wiki:depth": 5
            }
          },
          {
            "condition": "q.block_state('wiki:source') && !q.block_neighbor_has_any_tag(0, 1, 0, 'custom_fluid')",
            "set_block_state": {
              "wiki:depth": 4
            }
          },
          {
            "condition": "q.block_state('wiki:depth') == 3",
            "run_command": {
              "command": [
                "execute if block ~~~1 air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~~~1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=2]",
                "execute if block ~~~-1 air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~~~-1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=2]",
                "execute if block ~1~~ air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=2]",
                "execute if block ~-1~~ air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~-1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=2]"
              ]
            }
          },
          {
            "condition": "q.block_state('wiki:depth') == 2",
            "run_command": {
              "command": [
                "execute if block ~~~1 air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~~~1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=1]",
                "execute if block ~~~-1 air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~~~-1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=1]",
                "execute if block ~1~~ air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=1]",
                "execute if block ~-1~~ air unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid run setblock ~-1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=1]"
              ]
            }
          },
          {
            "condition": "q.block_state('wiki:depth') == 5 && q.block_neighbor_has_any_tag(0, 1, 0, 'custom_fluid')",
            "run_command": {
              "command": [
                "execute if block ~~-1~ wiki:custom_fluid [\"wiki:depth\"=3] run setblock ~~-1~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=5]",
                "execute if block ~~-1~ wiki:custom_fluid [\"wiki:depth\"=2] run setblock ~~-1~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=5]",
                "execute if block ~~-1~ wiki:custom_fluid [\"wiki:depth\"=1] run setblock ~~-1~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=5]",
                "execute unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid if block ~1~~ air run setblock ~1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]",
                "execute unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid if block ~~~1 air run setblock ~~~1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]",
                "execute unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid if block ~-1~~ air run setblock ~-1~~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]",
                "execute unless block ~~-1~ air unless block ~~-1~ wiki:custom_fluid if block ~~~-1 air run setblock ~~~-1 wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=3]"
              ]
            }
          },
          // Fall
          {
            "run_command": {
              "command": "execute if block ~~-1~ air run setblock ~~-1~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=5]"
            }
          },
          {
            "condition": "q.block_neighbor_has_any_tag(0, -1, 0, 'flowing_custom_fluid')",
            "run_command": {
              "command": "setblock ~~-1~ wiki:custom_fluid [\"wiki:source\"=false,\"wiki:depth\"=5]"
            }
          }
        ]
      },
      "wiki:pick_up": {
        "die": {},
        "decrement_stack": {},
        "run_command": {
          "command": "give @s lava_bucket",
          "target": "other"
        }
      }
    },
    "permutations": [
      {
        "condition": "q.block_state('wiki:source')",
        "components": {
          // Enables the block to be picked up by an item of choice
          "minecraft:selection_box": {
            "origin": [-7.5, 0.5, -7.5],
            "size": [15, 13, 15]
          },
          "tag:custom_fluid_source": {}
        }
      },
      {
        "condition": "!q.block_state('wiki:source')",
        "components": {
          "tag:flowing_custom_fluid": {}
        }
      },
      {
        "condition": "q.block_state('wiki:depth') == 5",
        "components": {
          "minecraft:geometry": "geometry.fluid.5",
          "tag:custom_fluid_5": {}
        }
      },
      {
        "condition": "q.block_state('wiki:depth') == 4",
        "components": {
          "minecraft:geometry": "geometry.fluid.4",
          "tag:custom_fluid_4": {}
        }
      },
      {
        "condition": "q.block_state('wiki:depth') == 3",
        "components": {
          "minecraft:geometry": "geometry.fluid.3",
          "tag:custom_fluid_3": {}
        }
      },
      {
        "condition": "q.block_state('wiki:depth') == 2",
        "components": {
          "minecraft:geometry": "geometry.fluid.2",
          "tag:custom_fluid_2": {}
        }
      },
      {
        "condition": "q.block_state('wiki:depth') == 1",
        "components": {
          "minecraft:geometry": "geometry.fluid.1",
          "tag:custom_fluid_1": {}
        }
      }
    ]
  }
}
Copied to Clipboard