hytale-server/com/hypixel/hytale/builtin/blockspawner/BlockSpawnerEntry.java

69 lines
2.6 KiB
Java

package com.hypixel.hytale.builtin.blockspawner;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.codecs.EnumCodec;
import com.hypixel.hytale.codec.store.StoredCodec;
import com.hypixel.hytale.common.map.IWeightedElement;
import com.hypixel.hytale.component.Holder;
import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
import com.hypixel.hytale.server.core.prefab.config.SelectionPrefabSerializer;
import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
import javax.annotation.Nonnull;
public class BlockSpawnerEntry implements IWeightedElement {
@Nonnull
public static BuilderCodec<BlockSpawnerEntry> CODEC = BuilderCodec.builder(BlockSpawnerEntry.class, BlockSpawnerEntry::new)
.append(new KeyedCodec<>("Name", Codec.STRING), (entry, key) -> entry.blockName = key, entry -> entry.blockName)
.addValidatorLate(() -> BlockType.VALIDATOR_CACHE.getValidator().late())
.add()
.append(new KeyedCodec<>("RotationMode", BlockSpawnerEntry.RotationMode.CODEC), (entry, b) -> entry.rotationMode = b, entry -> entry.rotationMode)
.add()
.append(new KeyedCodec<>("Weight", Codec.DOUBLE), (entry, d) -> entry.weight = d, entry -> entry.weight)
.add()
.append(
new KeyedCodec<>("State", Codec.BSON_DOCUMENT),
(entry, wrapper, extraInfo) -> entry.blockComponents = SelectionPrefabSerializer.legacyStateDecode(wrapper),
(entry, extraInfo) -> null
)
.add()
.append(
new KeyedCodec<>("Components", new StoredCodec<>(ChunkStore.HOLDER_CODEC_KEY)),
(entry, holder) -> entry.blockComponents = holder,
entry -> entry.blockComponents
)
.add()
.build();
public static final BlockSpawnerEntry[] EMPTY_ARRAY = new BlockSpawnerEntry[0];
private String blockName;
private Holder<ChunkStore> blockComponents;
private double weight;
private BlockSpawnerEntry.RotationMode rotationMode = BlockSpawnerEntry.RotationMode.INHERIT;
public String getBlockName() {
return this.blockName;
}
public Holder<ChunkStore> getBlockComponents() {
return this.blockComponents;
}
public BlockSpawnerEntry.RotationMode getRotationMode() {
return this.rotationMode;
}
@Override
public double getWeight() {
return this.weight;
}
public static enum RotationMode {
NONE,
RANDOM,
INHERIT;
public static final Codec<BlockSpawnerEntry.RotationMode> CODEC = new EnumCodec<>(BlockSpawnerEntry.RotationMode.class);
}
}