Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ jobs:
8
17
21
25

- name: Run BuildTools
run: |
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/buildtools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,4 @@ checkVersion "1.21.5" "21"
checkVersion "1.21.8" "21"
checkVersion "1.21.10" "21"
checkVersion "1.21.11" "21"
checkVersion "26.1" "25"
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ jobs:
8
17
21
25
- name: Run BuildTools
run: |
bash ./.github/workflows/buildtools.sh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public class ChunkSection {
private final ChunkVersionFlags versionFlags;

private int blockCount;
private int fluidCount;
private int bitsPerBlock = -1;

private Palette palette;
Expand Down Expand Up @@ -78,10 +79,18 @@ public void setBlockState(int index, int blockId) {

if (!registryAccessor.isAir(prevBlockId)) {
--this.blockCount;

if (registryAccessor.isFluid(prevBlockId)) {
--this.fluidCount;
}
}

if (!registryAccessor.isAir(blockId)) {
++this.blockCount;

if (registryAccessor.isFluid(blockId)) {
++this.fluidCount;
}
}

int paletteIndex = this.palette.idFor(blockId);
Expand All @@ -103,6 +112,10 @@ public boolean isEmpty() {
public void write(ByteBuf buffer) {
buffer.writeShort(this.blockCount);

if (this.versionFlags.hasFluidCount()) {
buffer.writeShort(this.fluidCount);
}

buffer.writeByte(this.bitsPerBlock);
this.palette.write(buffer);

Expand All @@ -120,6 +133,10 @@ public void write(ByteBuf buffer) {
public int[] read(ByteBuf buffer) {
this.blockCount = buffer.readShort();

if (this.versionFlags.hasFluidCount()) {
this.fluidCount = buffer.readShort();
}

this.setBitsPerBlock(buffer.readUnsignedByte(), false);

this.palette.read(buffer);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
package dev.imprex.orebfuscator.chunk;

import dev.imprex.orebfuscator.interop.ServerAccessor;
import dev.imprex.orebfuscator.logging.OfcLogger;

public final class ChunkVersionFlags {

// hasFluidCount >= 26.1.0
// hasLongArrayLengthField < 1.21.5
// hasBiomePalettedContainer >= 1.18
// hasSingleValuePalette >= 1.18

private final boolean hasFluidCount;
private final boolean hasLongArrayLengthField;
private final boolean hasBiomePalettedContainer;
private final boolean hasSingleValuePalette;

public ChunkVersionFlags(ServerAccessor serverAccessor) {
var version = serverAccessor.minecraftVersion();
hasFluidCount = version.isAtOrAbove("26.1.0");
hasLongArrayLengthField = version.isBelow("1.21.5");
hasBiomePalettedContainer = version.isAtOrAbove("1.18");
hasSingleValuePalette = version.isAtOrAbove("1.18");

OfcLogger.debug("MinecraftVersion: " + version);
OfcLogger.debug("ChunkVersionFlags - hasFluidCount: " + hasFluidCount);
OfcLogger.debug("ChunkVersionFlags - hasLongArrayLengthField: " + hasLongArrayLengthField);
OfcLogger.debug("ChunkVersionFlags - hasBiomePalettedContainer: " + hasBiomePalettedContainer);
OfcLogger.debug("ChunkVersionFlags - hasSingleValuePalette: " + hasSingleValuePalette);
}

public boolean hasFluidCount() {
return hasFluidCount;
}

public boolean hasLongArrayLengthField() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public interface RegistryAccessor {

boolean isAir(int blockId);

boolean isFluid(int blockId);

boolean isLava(int blockId);

boolean isOccluding(int blockId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public static Builder builder(int id) {
private final int id;

private final boolean isAir;
private final boolean isFluid;
private final boolean isLava;
private final boolean isOccluding;
private final boolean isBlockEntity;
Expand All @@ -20,6 +21,7 @@ public static Builder builder(int id) {
private BlockStateProperties(Builder builder) {
this.id = builder.id;
this.isAir = builder.isAir;
this.isFluid = builder.isFluid;
this.isLava = builder.isLava;
this.isOccluding = builder.isOccluding;
this.isBlockEntity = builder.isBlockEntity;
Expand All @@ -34,6 +36,10 @@ public boolean isAir() {
return isAir;
}

public boolean isFluid() {
return isFluid;
}

public boolean isLava() {
return isLava;
}
Expand Down Expand Up @@ -77,6 +83,7 @@ public static class Builder {
private final int id;

private boolean isAir;
private boolean isFluid;
private boolean isLava;
private boolean isOccluding;
private boolean isBlockEntity;
Expand All @@ -91,6 +98,11 @@ public Builder withIsAir(boolean isAir) {
return this;
}

public Builder withIsFluid(boolean isFluid) {
this.isFluid = isFluid;
return this;
}

public Builder withIsLava(boolean isLava) {
this.isLava = isLava;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public static void initialize() {
}

String nmsVersion = MinecraftVersion.nmsVersion();
if (ServerVersion.isMojangMapped()) {
if (ServerVersion.isMojangMapped() && MinecraftVersion.isBelow("26.0.0")) {
nmsVersion += "_mojang";
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public AbstractNmsManager(int uniqueBlockStateCount) {
protected final void registerBlockProperties(BlockProperties block) {
this.blocks.put(block.getKey(), block);

// TODO: add BitSet for each flag for (faster) cache friendly lookup
for (BlockStateProperties blockState : block.getBlockStates()) {
this.blockStates[blockState.getId()] = blockState;
}
Expand Down Expand Up @@ -91,22 +92,27 @@ public final int getMaxBitsPerBlockState() {
}

@Override
public final boolean isAir(int id) {
return this.blockStates[id].isAir();
public final boolean isAir(int blockId) {
return this.blockStates[blockId].isAir();
}

@Override
public final boolean isLava(int id) {
return this.blockStates[id].isLava();
public final boolean isFluid(int blockId) {
return this.blockStates[blockId].isFluid();
}

@Override
public final boolean isOccluding(int id) {
return this.blockStates[id].isOccluding();
public final boolean isLava(int blockId) {
return this.blockStates[blockId].isLava();
}

@Override
public final boolean isBlockEntity(int id) {
return this.blockStates[id].isBlockEntity();
public final boolean isOccluding(int blockId) {
return this.blockStates[blockId].isOccluding();
}

@Override
public final boolean isBlockEntity(int blockId) {
return this.blockStates[blockId].isBlockEntity();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ private record NmsMapping(Version version, String nmsVersion) {
private static final List<NmsMapping> MAPPINGS = new ArrayList<>();

static {
MAPPINGS.add(new NmsMapping("26.1.0", "v26_1"));
MAPPINGS.add(new NmsMapping("1.21.11", "v1_21_R7"));
MAPPINGS.add(new NmsMapping("1.21.9", "v1_21_R6"));
MAPPINGS.add(new NmsMapping("1.21.6", "v1_21_R5"));
Expand Down Expand Up @@ -48,11 +49,15 @@ private NmsMapping(String version, String nmsVersion) {
}

private static final Pattern PACKAGE_PATTERN = Pattern.compile("org\\.bukkit\\.craftbukkit\\.(v\\d+_\\d+_R\\d+)");
private static final Version CURRENT_VERSION = Version.parse(Bukkit.getBukkitVersion());

private static final Version CURRENT_VERSION;
private static final String NMS_VERSION;

static {
// remove SNAPSHOT suffix of bukkit
var version = Version.parse(Bukkit.getBukkitVersion());
CURRENT_VERSION = new Version(version.major(), version.minor(), version.patch(), null);

String craftBukkitPackage = Bukkit.getServer().getClass().getPackage().getName();
Matcher matcher = PACKAGE_PATTERN.matcher(craftBukkitPackage);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (IBlockData blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getCombinedId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluid().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.i(BlockAccessAir.INSTANCE, BlockPosition.ZERO)/*isSolidRender*/)
.withIsBlockEntity(block.isTileEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender())
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender())
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender())
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender())
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public NmsManager() {
for (BlockState blockState : possibleBlockStates) {
BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState))
.withIsAir(blockState.isAir())
.withIsFluid(!blockState.getFluidState().isEmpty())
.withIsLava(block == Blocks.LAVA)
.withIsOccluding(blockState.isSolidRender())
.withIsBlockEntity(blockState.hasBlockEntity())
Expand Down
Loading
Loading