Skip to content

Commit

Permalink
Add two more config options
Browse files Browse the repository at this point in the history
  • Loading branch information
Moulberry committed Oct 14, 2023
1 parent fa3f904 commit 5c8e845
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 32 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {
}

group = "com.moulberry.axiom"
version = "1.5.1"
version = "1.5.2"
description = "Serverside component for Axiom on Paper"

java {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,39 +93,43 @@ public void onPluginMessageReceived(@NotNull String channel, @NotNull Player buk
int playerSectionZ = player.getBlockZ() >> 4;

Long2ObjectMap<PalettedContainer<BlockState>> sections = new Long2ObjectOpenHashMap<>();
count = friendlyByteBuf.readVarInt();
for (int i = 0; i < count; i++) {
long pos = friendlyByteBuf.readLong();

int sx = BlockPos.getX(pos);
int sy = BlockPos.getY(pos);
int sz = BlockPos.getZ(pos);
int maxChunkLoadDistance = this.plugin.configuration.getInt("max-chunk-load-distance");
if (maxChunkLoadDistance > 0) {
count = friendlyByteBuf.readVarInt();
for (int i = 0; i < count; i++) {
long pos = friendlyByteBuf.readLong();

int distance = Math.abs(playerSectionX - sx) + Math.abs(playerSectionZ - sz);
if (distance > 128) continue;
int sx = BlockPos.getX(pos);
int sy = BlockPos.getY(pos);
int sz = BlockPos.getZ(pos);

LevelChunk chunk = level.getChunk(sx, sz);
int sectionIndex = chunk.getSectionIndexFromSectionY(sy);
if (sectionIndex < 0 || sectionIndex >= chunk.getSectionsCount()) continue;
LevelChunkSection section = chunk.getSection(sectionIndex);
int distance = Math.abs(playerSectionX - sx) + Math.abs(playerSectionZ - sz);
if (distance > maxChunkLoadDistance) continue;

if (section.hasOnlyAir()) {
sections.put(pos, null);
} else {
PalettedContainer<BlockState> container = section.getStates();
sections.put(pos, container);

if (sendBlockEntitiesInChunks && section.maybeHas(BlockState::hasBlockEntity)) {
for (int x = 0; x < 16; x++) {
for (int y = 0; y < 16; y++) {
for (int z = 0; z < 16; z++) {
BlockState blockState = container.get(x, y, z);
if (blockState.hasBlockEntity()) {
mutableBlockPos.set(sx*16 + x, sy*16 + y, sz*16 + z);
BlockEntity blockEntity = chunk.getBlockEntity(mutableBlockPos, LevelChunk.EntityCreationType.CHECK);
if (blockEntity != null) {
CompoundTag tag = blockEntity.saveWithoutMetadata();
blockEntityMap.put(mutableBlockPos.asLong(), CompressedBlockEntity.compress(tag, baos));
LevelChunk chunk = level.getChunk(sx, sz);
int sectionIndex = chunk.getSectionIndexFromSectionY(sy);
if (sectionIndex < 0 || sectionIndex >= chunk.getSectionsCount()) continue;
LevelChunkSection section = chunk.getSection(sectionIndex);

if (section.hasOnlyAir()) {
sections.put(pos, null);
} else {
PalettedContainer<BlockState> container = section.getStates();
sections.put(pos, container);

if (sendBlockEntitiesInChunks && section.maybeHas(BlockState::hasBlockEntity)) {
for (int x = 0; x < 16; x++) {
for (int y = 0; y < 16; y++) {
for (int z = 0; z < 16; z++) {
BlockState blockState = container.get(x, y, z);
if (blockState.hasBlockEntity()) {
mutableBlockPos.set(sx*16 + x, sy*16 + y, sz*16 + z);
BlockEntity blockEntity = chunk.getBlockEntity(mutableBlockPos, LevelChunk.EntityCreationType.CHECK);
if (blockEntity != null) {
CompoundTag tag = blockEntity.saveWithoutMetadata();
blockEntityMap.put(mutableBlockPos.asLong(), CompressedBlockEntity.compress(tag, baos));
}
}
}
}
Expand All @@ -135,7 +139,6 @@ public void onPluginMessageReceived(@NotNull String channel, @NotNull Player buk
}
}


// Send response packet

boolean firstPart = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.logging.Level;

public class SetBlockPacketListener implements PluginMessageListener {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ public void onPluginMessageReceived(@NotNull String channel, @NotNull Player pla
World world = Bukkit.getWorld(namespacedKey);
if (world == null) return;

// Prevent teleport based on config value
boolean allowTeleportBetweenWorlds = this.plugin.configuration.getBoolean("allow-teleport-between-worlds");
if (!allowTeleportBetweenWorlds && world != player.getWorld()) {
return;
}

// Call event
AxiomTeleportEvent teleportEvent = new AxiomTeleportEvent(player, new Location(world, x, y, z, yRot, xRot));
Bukkit.getPluginManager().callEvent(teleportEvent);
Expand Down

0 comments on commit 5c8e845

Please sign in to comment.