Merge branch '1.21' into new-container-api
This commit is contained in:
commit
45651d81b5
@ -44,6 +44,26 @@ fun addChestLootTables(loot: LootTables) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loot.builder(LootContextParamSets.VAULT, modLootTable("laboratory_vault")){
|
||||||
|
lootPool {
|
||||||
|
item(MItems.MATTER_DUST) {
|
||||||
|
chanceCondition(0.1)
|
||||||
|
setWeight(4)
|
||||||
|
apply(MatterDustItem.Randomizer(UniformDecimal(Decimal(100), Decimal(2_500))))
|
||||||
|
}
|
||||||
|
item(Items.IRON_INGOT) {
|
||||||
|
setCount(minimal = 1, maximal = 3)
|
||||||
|
setWeight(3)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loot.builder(LootContextParamSets.VAULT, modLootTable("laboratory_ominous_vault")){
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
loot.builder(LootContextParamSets.CHEST, modLootTable("frigate_cargo")) {
|
loot.builder(LootContextParamSets.CHEST, modLootTable("frigate_cargo")) {
|
||||||
lootPool {
|
lootPool {
|
||||||
item(Items.IRON_INGOT) {
|
item(Items.IRON_INGOT) {
|
||||||
|
@ -78,7 +78,7 @@ public class LoaderModel {
|
|||||||
this.animate(entity.getIdleState(), LoaderAnimation.ATTACK, ageInTicks, 1.0F);
|
this.animate(entity.getIdleState(), LoaderAnimation.ATTACK, ageInTicks, 1.0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.animateWalk(LoaderAnimation.MOVE, limbSwing, limbSwingAmount, 1.0F, 2.5F);
|
this.animateWalk(LoaderAnimation.MOVE, limbSwing, limbSwingAmount, 0.8F, 2.5F);
|
||||||
this.animate(entity.getIdleState(), LoaderAnimation.IDLE, ageInTicks, 1.0F);
|
this.animate(entity.getIdleState(), LoaderAnimation.IDLE, ageInTicks, 1.0F);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import net.minecraft.client.Minecraft
|
|||||||
import net.minecraft.core.BlockPos
|
import net.minecraft.core.BlockPos
|
||||||
import net.minecraft.core.HolderLookup
|
import net.minecraft.core.HolderLookup
|
||||||
import net.minecraft.core.SectionPos
|
import net.minecraft.core.SectionPos
|
||||||
|
import net.minecraft.core.particles.DustParticleOptions
|
||||||
|
import net.minecraft.core.particles.ParticleTypes
|
||||||
import net.minecraft.nbt.CompoundTag
|
import net.minecraft.nbt.CompoundTag
|
||||||
import net.minecraft.server.level.ServerLevel
|
import net.minecraft.server.level.ServerLevel
|
||||||
import net.minecraft.server.level.ServerPlayer
|
import net.minecraft.server.level.ServerPlayer
|
||||||
@ -211,6 +213,31 @@ class BlackHoleBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Mattery
|
|||||||
val distance = item.position().distanceTo(center)
|
val distance = item.position().distanceTo(center)
|
||||||
setDeltaMovement(item, center, distance)
|
setDeltaMovement(item, center, distance)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//no way null malware reference
|
||||||
|
val tempLevel = level
|
||||||
|
if (tempLevel?.otmRandom!!.nextFloat() < 0.8f) {
|
||||||
|
|
||||||
|
val size = gravitationStrength.pow(0.5)
|
||||||
|
val eventHorizonRadius = size / 2
|
||||||
|
|
||||||
|
val spawnRadius = 4 + eventHorizonRadius * (1.2 + tempLevel.otmRandom.nextDouble() * 0.6)
|
||||||
|
|
||||||
|
val theta = tempLevel.otmRandom.nextDouble() * Math.PI * 2
|
||||||
|
val phi = tempLevel.otmRandom.nextDouble() * Math.PI - Math.PI / 2
|
||||||
|
|
||||||
|
//мугек я не ощущаю центр
|
||||||
|
//хз нужно настроить
|
||||||
|
val x = blockPos.x + 0.5 + spawnRadius * Math.cos(theta) * Math.cos(phi)
|
||||||
|
val y = blockPos.y + 0.5 + spawnRadius * Math.sin(phi)
|
||||||
|
val z = blockPos.z + 0.5 + spawnRadius * Math.sin(theta) * Math.cos(phi)
|
||||||
|
|
||||||
|
val motionX = (blockPos.x + 0.5 - x) * 0.05
|
||||||
|
val motionY = (blockPos.y - 1.5 - y) * 0.05
|
||||||
|
val motionZ = (blockPos.z + 0.5 - z) * 0.05
|
||||||
|
|
||||||
|
tempLevel.addParticle(ParticleTypes.SMOKE, x, y, z, motionX, motionY, motionZ)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val sphericalPositionsCache = ArrayList<BlockPos>()
|
private val sphericalPositionsCache = ArrayList<BlockPos>()
|
||||||
|
@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.block.entity.cable
|
|||||||
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap
|
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap
|
||||||
import it.unimi.dsi.fastutil.objects.ReferenceArraySet
|
import it.unimi.dsi.fastutil.objects.ReferenceArraySet
|
||||||
import it.unimi.dsi.fastutil.objects.ReferenceLinkedOpenHashSet
|
import it.unimi.dsi.fastutil.objects.ReferenceLinkedOpenHashSet
|
||||||
|
import net.minecraft.core.Direction
|
||||||
import org.apache.logging.log4j.LogManager
|
import org.apache.logging.log4j.LogManager
|
||||||
import ru.dbotthepony.mc.otm.SERVER_IS_LIVE
|
import ru.dbotthepony.mc.otm.SERVER_IS_LIVE
|
||||||
import ru.dbotthepony.mc.otm.UNIVERSE_TICKS
|
import ru.dbotthepony.mc.otm.UNIVERSE_TICKS
|
||||||
@ -74,16 +75,20 @@ private class LinkedPriorityQueue<T : Comparable<T>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableGraph>() {
|
class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableGraph>() {
|
||||||
private val livelyNodes = HashSet<EnergyCableBlockEntity.Node>()
|
private val livelyNodes = HashSet<Pair<EnergyCableBlockEntity.Node, RelativeSide>>()
|
||||||
private val livelyNodesList = ArrayList<EnergyCableBlockEntity.Node>()
|
private val livelyNodesList = ArrayList<Pair<EnergyCableBlockEntity.Node, RelativeSide>>()
|
||||||
|
|
||||||
fun addLivelyNode(node: EnergyCableBlockEntity.Node) {
|
fun addLivelyNode(node: EnergyCableBlockEntity.Node) {
|
||||||
when (contains(node)) {
|
when (contains(node)) {
|
||||||
ContainsStatus.ABOUT_TO_BE_REMOVED, ContainsStatus.ABOUT_TO_BE_ADDED -> { } // do nothing
|
ContainsStatus.ABOUT_TO_BE_REMOVED, ContainsStatus.ABOUT_TO_BE_ADDED -> { } // do nothing
|
||||||
ContainsStatus.DOES_NOT_BELONG -> throw IllegalArgumentException("$node does not belong to $this")
|
ContainsStatus.DOES_NOT_BELONG -> throw IllegalArgumentException("$node does not belong to $this")
|
||||||
ContainsStatus.CONTAINS -> {
|
ContainsStatus.CONTAINS -> {
|
||||||
if (livelyNodes.add(node)) {
|
for (dir in RelativeSide.entries) {
|
||||||
livelyNodesList.add(node)
|
val pair = node to dir
|
||||||
|
|
||||||
|
if (livelyNodes.add(pair)) {
|
||||||
|
livelyNodesList.add(pair)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -584,8 +589,12 @@ class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableG
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onNodeRemoved(node: EnergyCableBlockEntity.Node) {
|
override fun onNodeRemoved(node: EnergyCableBlockEntity.Node) {
|
||||||
if (livelyNodes.remove(node)) {
|
for (dir in RelativeSide.entries) {
|
||||||
check(livelyNodesList.remove(node))
|
val pair = node to dir
|
||||||
|
|
||||||
|
if (livelyNodes.remove(pair)) {
|
||||||
|
check(livelyNodesList.remove(pair))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val touchedSegments = HashSet<Segment>()
|
val touchedSegments = HashSet<Segment>()
|
||||||
@ -608,8 +617,11 @@ class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableG
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onNodeAdded(node: EnergyCableBlockEntity.Node) {
|
override fun onNodeAdded(node: EnergyCableBlockEntity.Node) {
|
||||||
check(livelyNodes.add(node))
|
for (dir in RelativeSide.entries) {
|
||||||
livelyNodesList.add(node)
|
val pair = node to dir
|
||||||
|
check(livelyNodes.add(pair))
|
||||||
|
livelyNodesList.add(pair)
|
||||||
|
}
|
||||||
|
|
||||||
notifyThroughputsChanged()
|
notifyThroughputsChanged()
|
||||||
}
|
}
|
||||||
@ -622,98 +634,97 @@ class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableG
|
|||||||
var residue = howMuch.coerceAtMost(fromNode.energyThroughput)
|
var residue = howMuch.coerceAtMost(fromNode.energyThroughput)
|
||||||
val snapshot = Reference2ObjectOpenHashMap<Segment, Decimal>()
|
val snapshot = Reference2ObjectOpenHashMap<Segment, Decimal>()
|
||||||
|
|
||||||
for (node in itr) {
|
for (pair in itr) {
|
||||||
var hit = false
|
val (node, relSide) = pair
|
||||||
|
val side = node.sides[relSide]!!
|
||||||
|
|
||||||
for (side in node.sides.values) {
|
if (!side.isEnabled) {
|
||||||
if (!side.isEnabled)
|
itr.remove()
|
||||||
continue
|
check(livelyNodes.remove(pair)) { "Lively nodes Set does not contain $pair" }
|
||||||
else if (fromNode === node && side.side === fromSide) {
|
continue
|
||||||
hit = true
|
} else if (fromNode === node && side.side === fromSide) {
|
||||||
continue
|
continue
|
||||||
}
|
|
||||||
|
|
||||||
val it = side.neighbour.get() ?: continue
|
|
||||||
if (it is EnergyCableBlockEntity.CableSide) continue
|
|
||||||
|
|
||||||
val paths = getPath(fromNode, node, it.receiveEnergy(residue, true), !simulate)
|
|
||||||
hit = true
|
|
||||||
|
|
||||||
if (paths.size == 1) {
|
|
||||||
// Single path, fast scenario
|
|
||||||
val path = paths[0]
|
|
||||||
val pathTransferred = path.transfer(residue, simulate, snapshot)
|
|
||||||
if (pathTransferred <= Decimal.ZERO) continue
|
|
||||||
val thisReceived = it.receiveEnergy(pathTransferred, simulate)
|
|
||||||
|
|
||||||
// If cable transferred more than machine accepted, then "refund" energy
|
|
||||||
// so cables record actual value transferred through them
|
|
||||||
if (thisReceived != pathTransferred) {
|
|
||||||
path.refund(pathTransferred - thisReceived, simulate, snapshot)
|
|
||||||
|
|
||||||
if (!simulate && thisReceived != Decimal.ZERO) {
|
|
||||||
path.triggerBlockstateUpdates()
|
|
||||||
}
|
|
||||||
} else if (!simulate) {
|
|
||||||
path.triggerBlockstateUpdates()
|
|
||||||
}
|
|
||||||
|
|
||||||
received += thisReceived
|
|
||||||
residue -= thisReceived
|
|
||||||
if (!residue.isPositive) return received
|
|
||||||
} else if (paths.size >= 2) {
|
|
||||||
// Multiple paths, a bit more complicated
|
|
||||||
// Determine how much machine is likely to accept
|
|
||||||
val potentiallyAccepted = it.receiveEnergy(residue, true)
|
|
||||||
|
|
||||||
// Won't accept anything
|
|
||||||
if (potentiallyAccepted <= Decimal.ZERO) continue
|
|
||||||
|
|
||||||
// Now determine combined available throughput
|
|
||||||
// Make a copy of snapshot, so we can freely write into it
|
|
||||||
val copy = snapshot.clone()
|
|
||||||
var calcResidue = potentiallyAccepted
|
|
||||||
|
|
||||||
// TODO: Currently, all transfers cause Braess's paradox, because of greedy selection of "fastest" cable
|
|
||||||
// Need to implement heuristics to better distribute load across different paths/segments
|
|
||||||
for (path in paths) {
|
|
||||||
val passed = path.transfer(calcResidue, true, copy)
|
|
||||||
calcResidue -= passed
|
|
||||||
if (calcResidue <= Decimal.ZERO) break
|
|
||||||
}
|
|
||||||
|
|
||||||
if (calcResidue == potentiallyAccepted) {
|
|
||||||
// мда
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var thisReceived = it.receiveEnergy(potentiallyAccepted - calcResidue, simulate)
|
|
||||||
received += thisReceived
|
|
||||||
residue -= thisReceived
|
|
||||||
|
|
||||||
for (path in paths) {
|
|
||||||
val passed = path.transfer(thisReceived, simulate, snapshot)
|
|
||||||
|
|
||||||
if (!simulate)
|
|
||||||
path.triggerBlockstateUpdates()
|
|
||||||
|
|
||||||
thisReceived -= passed
|
|
||||||
if (thisReceived <= Decimal.ZERO) break
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!residue.isPositive) return received
|
|
||||||
//check(thisReceived <= Decimal.ZERO) { "Путом, алло, Путом, какого чёрта Путом? Путом почему ты заблокировал логику, а Путом?" }
|
|
||||||
|
|
||||||
if (thisReceived > Decimal.ZERO) {
|
|
||||||
LOGGER.warn("Cable path from $fromNode to $node doesn't follow common sense, disabling.")
|
|
||||||
paths.forEach { it.shortCircuit = true }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hit) {
|
val it = side.neighbour.get()
|
||||||
|
|
||||||
|
if (it == null || it is EnergyCableBlockEntity.CableSide) {
|
||||||
itr.remove()
|
itr.remove()
|
||||||
check(livelyNodes.remove(node)) { "Lively nodes Set does not contain $node" }
|
check(livelyNodes.remove(pair)) { "Lively nodes Set does not contain $pair" }
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
val paths = getPath(fromNode, node, it.receiveEnergy(residue, true), !simulate)
|
||||||
|
|
||||||
|
if (paths.size == 1) {
|
||||||
|
// Single path, fast scenario
|
||||||
|
val path = paths[0]
|
||||||
|
val pathTransferred = path.transfer(residue, simulate, snapshot)
|
||||||
|
if (pathTransferred <= Decimal.ZERO) continue
|
||||||
|
val thisReceived = it.receiveEnergy(pathTransferred, simulate)
|
||||||
|
|
||||||
|
// If cable transferred more than machine accepted, then "refund" energy
|
||||||
|
// so cables record actual value transferred through them
|
||||||
|
if (thisReceived != pathTransferred) {
|
||||||
|
path.refund(pathTransferred - thisReceived, simulate, snapshot)
|
||||||
|
|
||||||
|
if (!simulate && thisReceived != Decimal.ZERO) {
|
||||||
|
path.triggerBlockstateUpdates()
|
||||||
|
}
|
||||||
|
} else if (!simulate) {
|
||||||
|
path.triggerBlockstateUpdates()
|
||||||
|
}
|
||||||
|
|
||||||
|
received += thisReceived
|
||||||
|
residue -= thisReceived
|
||||||
|
if (!residue.isPositive) return received
|
||||||
|
} else if (paths.size >= 2) {
|
||||||
|
// Multiple paths, a bit more complicated
|
||||||
|
// Determine how much machine is likely to accept
|
||||||
|
val potentiallyAccepted = it.receiveEnergy(residue, true)
|
||||||
|
|
||||||
|
// Won't accept anything
|
||||||
|
if (potentiallyAccepted <= Decimal.ZERO) continue
|
||||||
|
|
||||||
|
// Now determine combined available throughput
|
||||||
|
// Make a copy of snapshot, so we can freely write into it
|
||||||
|
val copy = snapshot.clone()
|
||||||
|
var calcResidue = potentiallyAccepted
|
||||||
|
|
||||||
|
// TODO: Currently, all transfers cause Braess's paradox, because of greedy selection of "fastest" cable
|
||||||
|
// Need to implement heuristics to better distribute load across different paths/segments
|
||||||
|
for (path in paths) {
|
||||||
|
val passed = path.transfer(calcResidue, true, copy)
|
||||||
|
calcResidue -= passed
|
||||||
|
if (calcResidue <= Decimal.ZERO) break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (calcResidue == potentiallyAccepted) {
|
||||||
|
// мда
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var thisReceived = it.receiveEnergy(potentiallyAccepted - calcResidue, simulate)
|
||||||
|
received += thisReceived
|
||||||
|
residue -= thisReceived
|
||||||
|
|
||||||
|
for (path in paths) {
|
||||||
|
val passed = path.transfer(thisReceived, simulate, snapshot)
|
||||||
|
|
||||||
|
if (!simulate)
|
||||||
|
path.triggerBlockstateUpdates()
|
||||||
|
|
||||||
|
thisReceived -= passed
|
||||||
|
if (thisReceived <= Decimal.ZERO) break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!residue.isPositive) return received
|
||||||
|
//check(thisReceived <= Decimal.ZERO) { "Путом, алло, Путом, какого чёрта Путом? Путом почему ты заблокировал логику, а Путом?" }
|
||||||
|
|
||||||
|
if (thisReceived > Decimal.ZERO) {
|
||||||
|
LOGGER.warn("Cable path from $fromNode to $node doesn't follow common sense, disabling.")
|
||||||
|
paths.forEach { it.shortCircuit = true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,8 +331,8 @@ object MNames {
|
|||||||
const val LOADER = "loader"
|
const val LOADER = "loader"
|
||||||
|
|
||||||
const val ANDROID_MELEE = "android_melee"
|
const val ANDROID_MELEE = "android_melee"
|
||||||
const val ANDROID_RANGED = "android_melee"
|
const val ANDROID_RANGED = "android_ranged"
|
||||||
const val ANDROID_OVERSEER = "android_melee"
|
const val ANDROID_OVERSEER = "android_overseer"
|
||||||
|
|
||||||
const val PHANTOM_ATTRACTOR = "phantom_attractor"
|
const val PHANTOM_ATTRACTOR = "phantom_attractor"
|
||||||
const val JUMP_BOOST = "jump_boost"
|
const val JUMP_BOOST = "jump_boost"
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -2,6 +2,7 @@
|
|||||||
"replace": false,
|
"replace": false,
|
||||||
"values": [
|
"values": [
|
||||||
"#c:is_desert",
|
"#c:is_desert",
|
||||||
"minecraft:plains"
|
"minecraft:plains",
|
||||||
|
"minecraft:taiga"
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"processors": [
|
||||||
|
{
|
||||||
|
"processor_type": "minecraft:rule",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"input_predicate": {
|
||||||
|
"block": "overdrive_that_matters:tritanium_block_light_gray",
|
||||||
|
"predicate_type": "minecraft:random_block_match",
|
||||||
|
"probability": 0.2
|
||||||
|
},
|
||||||
|
"location_predicate": {
|
||||||
|
"predicate_type": "minecraft:always_true"
|
||||||
|
},
|
||||||
|
"output_state": {
|
||||||
|
"Name": "overdrive_that_matters:decorative_crate"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input_predicate": {
|
||||||
|
"block": "overdrive_that_matters:metal_mesh",
|
||||||
|
"predicate_type": "minecraft:random_block_match",
|
||||||
|
"probability": 0.1
|
||||||
|
},
|
||||||
|
"location_predicate": {
|
||||||
|
"predicate_type": "minecraft:always_true"
|
||||||
|
},
|
||||||
|
"output_state": {
|
||||||
|
"Name": "minecraft:air"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input_predicate": {
|
||||||
|
"block": "overdrive_that_matters:floor_tiles_stairs_white",
|
||||||
|
"predicate_type": "minecraft:random_block_match",
|
||||||
|
"probability": 0.1
|
||||||
|
},
|
||||||
|
"location_predicate": {
|
||||||
|
"predicate_type": "minecraft:always_true"
|
||||||
|
},
|
||||||
|
"output_state": {
|
||||||
|
"Name": "overdrive_that_matters:floor_tiles_slab_white"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input_predicate": {
|
||||||
|
"block": "overdrive_that_matters:reinforced_redstone_lamp_inverted",
|
||||||
|
"predicate_type": "minecraft:random_block_match",
|
||||||
|
"probability": 0.3
|
||||||
|
},
|
||||||
|
"location_predicate": {
|
||||||
|
"predicate_type": "minecraft:always_true"
|
||||||
|
},
|
||||||
|
"output_state": {
|
||||||
|
"Name": "overdrive_that_matters:reinforced_redstone_lamp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -1,18 +1,24 @@
|
|||||||
{
|
{
|
||||||
"type": "minecraft:jigsaw",
|
"type": "minecraft:jigsaw",
|
||||||
"biomes": "#overdrive_that_matters:laboratory",
|
"biomes": "#overdrive_that_matters:laboratory",
|
||||||
"max_distance_from_center": 100,
|
"max_distance_from_center": 112,
|
||||||
"liquid_settings": "ignore_waterlogging",
|
"liquid_settings": "ignore_waterlogging",
|
||||||
"size": 7,
|
"size": 10,
|
||||||
"start_height": {
|
"start_height": {
|
||||||
"absolute": -13
|
"type": "minecraft:uniform",
|
||||||
|
"max_inclusive": {
|
||||||
|
"absolute": 30
|
||||||
|
},
|
||||||
|
"min_inclusive": {
|
||||||
|
"absolute": -13
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"spawn_overrides": {
|
"spawn_overrides": {
|
||||||
"monster": {
|
"monster": {
|
||||||
"bounding_box": "piece",
|
"bounding_box": "piece",
|
||||||
"spawns": [
|
"spawns": [
|
||||||
{
|
{
|
||||||
"type": "minecraft:pillager",
|
"type": "overdrive_that_matters:android_melee",
|
||||||
"weight": 1,
|
"weight": 1,
|
||||||
"minCount": 1,
|
"minCount": 1,
|
||||||
"maxCount": 2
|
"maxCount": 2
|
||||||
@ -21,7 +27,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"start_jigsaw_name": "overdrive_that_matters:laboratory_anchor",
|
"start_jigsaw_name": "overdrive_that_matters:laboratory_anchor",
|
||||||
"start_pool": "overdrive_that_matters:laboratory/center",
|
"start_pool": "overdrive_that_matters:laboratory/entrance",
|
||||||
"step": "underground_decoration",
|
"step": "underground_decoration",
|
||||||
"terrain_adaption": "encapsulate",
|
"terrain_adaption": "encapsulate",
|
||||||
"use_expansion_hack": false
|
"use_expansion_hack": false
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"type": "minecraft:random_spread",
|
"type": "minecraft:random_spread",
|
||||||
"salt": 20803232,
|
"salt": 20803232,
|
||||||
"separation": 8,
|
"separation": 8,
|
||||||
"spacing": 24
|
"spacing": 12
|
||||||
},
|
},
|
||||||
"structures": [
|
"structures": [
|
||||||
{
|
{
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "overdrive_that_matters:center",
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/center/lab_arena_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/center/lab_arena_1",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"fallback": "minecraft:empty"
|
|
||||||
}
|
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:crossroads",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/crossroads/vertical_a",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "overdrive_that_matters:laboratory/fallback_pool"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:entrance",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/entrance/entrance_a",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -4,7 +4,16 @@
|
|||||||
{
|
{
|
||||||
"element": {
|
"element": {
|
||||||
"element_type": "minecraft:single_pool_element",
|
"element_type": "minecraft:single_pool_element",
|
||||||
"location": "overdrive_that_matters:laboratory/dead_end",
|
"location": "overdrive_that_matters:laboratory/hall_fallback",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/hall_fallback_core",
|
||||||
"processors": "minecraft:empty",
|
"processors": "minecraft:empty",
|
||||||
"projection": "rigid"
|
"projection": "rigid"
|
||||||
},
|
},
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:fluff",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/fluff/chair",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/fluff/office",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/fluff/refinery",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/fluff/server",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/fluff/storage",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:bridges",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/bridges/bridge",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/bridges/bridge_broken",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/bridges/bridge_repair",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/bridges/bridge_wood",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:empty_pool_element"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:center",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/center/center_a",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:bridges",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/decor/camp_a",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/decor/junk_array",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/decor/stockpile",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:hall1",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/hall1/hall_overgrown",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "overdrive_that_matters:laboratory/fallback_pool"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:hall2",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/halls/hall1/hall_overgrown",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "overdrive_that_matters:laboratory/fallback_pool"
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:intersections",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/intersections/stairs_a",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/intersections/stairs_b",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/intersections/turn_a",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/intersections/lava",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "overdrive_that_matters:laboratory/fallback_pool"
|
||||||
|
}
|
@ -1,78 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "overdrive_that_matters:main",
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/corridor_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/corridor_1",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/corridor_turn_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/corrior_t_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/corridor_room_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/corridor_stairs_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/generator_room_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"element": {
|
|
||||||
"element_type": "minecraft:single_pool_element",
|
|
||||||
"location": "overdrive_that_matters:laboratory/main/portal_room_0",
|
|
||||||
"processors": "minecraft:empty",
|
|
||||||
"projection": "rigid"
|
|
||||||
},
|
|
||||||
"weight": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"fallback": "overdrive_that_matters:laboratory/fallback_pool"
|
|
||||||
}
|
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:reward",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/reward/reward",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:reward_ominous_wall",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/reward/reward_ominous_wall",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:reward_wall",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/reward/reward_wall",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:rooms",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/rooms/office_a",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/rooms/office_b",
|
||||||
|
"processors": "overdrive_that_matters:laboratory_weathering",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "overdrive_that_matters:laboratory/fallback_pool"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:s_heavy",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/spawner/s_loader",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "overdrive_that_matters:s_heavy",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"element_type": "minecraft:single_pool_element",
|
||||||
|
"location": "overdrive_that_matters:laboratory/spawner/s_android_melee",
|
||||||
|
"processors": "minecraft:empty",
|
||||||
|
"projection": "rigid"
|
||||||
|
},
|
||||||
|
"weight": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallback": "minecraft:empty"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user