Skip to content

Commit

Permalink
Fixed errors caused by schematics going out of bounds in the world (#906
Browse files Browse the repository at this point in the history
)
  • Loading branch information
OmerBenGera committed Feb 4, 2022
1 parent 9493a3d commit 92dbfeb
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 4 deletions.
Expand Up @@ -120,6 +120,9 @@ public static void sendPacketToRelevantPlayers(WorldServer worldServer, int chun
}

public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combinedId, CompoundTag tileEntity) {
if (!isValidPosition(chunk.world, blockPosition))
return;

IBlockData blockData = Block.getByCombinedId(combinedId);

if (blockData.getMaterial().isLiquid() && plugin.getSettings().isLiquidUpdate()) {
Expand Down Expand Up @@ -167,4 +170,10 @@ public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combin
}
}

private static boolean isValidPosition(World world, BlockPosition blockPosition) {
return blockPosition.getX() >= -30000000 && blockPosition.getZ() >= -30000000 &&
blockPosition.getX() < 30000000 && blockPosition.getZ() < 30000000 &&
blockPosition.getY() >= 0 && blockPosition.getY() < world.getHeight();
}

}
Expand Up @@ -159,6 +159,9 @@ public static void sendPacketToRelevantPlayers(WorldServer worldServer, int chun
}

public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combinedId, CompoundTag statesTag, CompoundTag tileEntity) {
if (!isValidPosition(chunk.world, blockPosition))
return;

IBlockData blockData = Block.getByCombinedId(combinedId);

if (statesTag != null) {
Expand Down Expand Up @@ -229,4 +232,10 @@ public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combin
}
}

private static boolean isValidPosition(World world, BlockPosition blockPosition) {
return blockPosition.getX() >= -30000000 && blockPosition.getZ() >= -30000000 &&
blockPosition.getX() < 30000000 && blockPosition.getZ() < 30000000 &&
blockPosition.getY() >= 0 && blockPosition.getY() < world.getHeight();
}

}
Expand Up @@ -160,6 +160,9 @@ public static void sendPacketToRelevantPlayers(WorldServer worldServer, int chun

public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combinedId, CompoundTag statesTag,
CompoundTag tileEntity) {
if (!isValidPosition(chunk.getWorld(), blockPosition))
return;

IBlockData blockData = Block.getByCombinedId(combinedId);

if (statesTag != null) {
Expand Down Expand Up @@ -242,4 +245,10 @@ public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combin
}
}

private static boolean isValidPosition(World world, BlockPosition blockPosition) {
return blockPosition.getX() >= -30000000 && blockPosition.getZ() >= -30000000 &&
blockPosition.getX() < 30000000 && blockPosition.getZ() < 30000000 &&
blockPosition.getY() >= 0 && blockPosition.getY() < world.getHeight();
}

}
Expand Up @@ -20,6 +20,7 @@
import net.minecraft.server.level.PlayerChunkMap;
import net.minecraft.server.level.WorldServer;
import net.minecraft.world.level.ChunkCoordIntPair;
import net.minecraft.world.level.World;
import net.minecraft.world.level.block.BlockBed;
import net.minecraft.world.level.block.entity.TileEntity;
import net.minecraft.world.level.block.state.IBlockData;
Expand Down Expand Up @@ -157,6 +158,9 @@ public static void sendPacketToRelevantPlayers(WorldServer worldServer, int chun

public static void setBlock(net.minecraft.world.level.chunk.Chunk chunk, BlockPosition blockPosition,
int combinedId, CompoundTag statesTag, CompoundTag tileEntity) {
if (!isValidPosition(chunk.getWorld(), blockPosition))
return;

IBlockData blockData = net.minecraft.world.level.block.Block.getByCombinedId(combinedId);

if (statesTag != null) {
Expand Down Expand Up @@ -242,4 +246,10 @@ public static void setBlock(net.minecraft.world.level.chunk.Chunk chunk, BlockPo
}
}

private static boolean isValidPosition(World world, BlockPosition blockPosition) {
return blockPosition.getX() >= -30000000 && blockPosition.getZ() >= -30000000 &&
blockPosition.getX() < 30000000 && blockPosition.getZ() < 30000000 &&
blockPosition.getY() >= world.getMinBuildHeight() && blockPosition.getY() < world.getMaxBuildHeight();
}

}
Expand Up @@ -178,6 +178,9 @@ public static void sendPacketToRelevantPlayers(WorldServer worldServer, int chun

public static void setBlock(ChunkAccess chunk, BlockPosition blockPosition,
int combinedId, CompoundTag statesTag, CompoundTag tileEntity) {
if (!isValidPosition(chunk.getWorld(), blockPosition))
return;

BlockData blockData = Block.getByCombinedId(combinedId);

if (statesTag != null) {
Expand Down Expand Up @@ -292,4 +295,10 @@ public ChunkCoordIntPair getChunkCoords() {

}

private static boolean isValidPosition(WorldServer world, BlockPosition blockPosition) {
return blockPosition.getX() >= -30000000 && blockPosition.getZ() >= -30000000 &&
blockPosition.getX() < 30000000 && blockPosition.getZ() < 30000000 &&
blockPosition.getY() >= world.getWorld().getMinHeight() && blockPosition.getY() < world.getWorld().getMaxHeight();
}

}
@@ -1,5 +1,6 @@
package com.bgsoftware.superiorskyblock.nms.v1_18_R1.mapping;

import com.bgsoftware.superiorskyblock.nms.v1_18_R1.mapping.level.WorldServer;
import com.google.common.collect.AbstractIterator;
import net.minecraft.core.EnumDirection;
import net.minecraft.world.phys.Vec3D;
Expand Down Expand Up @@ -66,6 +67,10 @@ public boolean closerThan(Vec3D position, double maxDistance) {
return handle.a(position, maxDistance);
}

public boolean isValidLocation(WorldServer worldServer) {
return handle.isInsideBuildHeightAndWorldBoundsHorizontal(worldServer.getHandle());
}

public static Iterable<BlockPosition> allBlocksBetween(int minX, int minY, int minZ, int maxX, int maxY, int maxZ) {
Iterator<net.minecraft.core.BlockPosition> iterable = net.minecraft.core.BlockPosition.b(minX, minY, minZ, maxX, maxY, maxZ).iterator();
return () -> {
Expand All @@ -74,13 +79,12 @@ public static Iterable<BlockPosition> allBlocksBetween(int minX, int minY, int m

@Override
protected BlockPosition computeNext() {
if(!iterable.hasNext())
if (!iterable.hasNext())
return this.endOfData();

if(iterablePosition == null) {
if (iterablePosition == null) {
iterablePosition = new BlockPosition(iterable.next());
}
else {
} else {
iterablePosition.setHandle(iterable.next());
}

Expand Down
Expand Up @@ -19,6 +19,7 @@
import net.minecraft.server.v1_8_R3.Packet;
import net.minecraft.server.v1_8_R3.PlayerChunkMap;
import net.minecraft.server.v1_8_R3.TileEntity;
import net.minecraft.server.v1_8_R3.World;
import net.minecraft.server.v1_8_R3.WorldServer;

import java.util.ArrayList;
Expand Down Expand Up @@ -113,6 +114,9 @@ public static void sendPacketToRelevantPlayers(WorldServer worldServer, int chun
}

public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combinedId, CompoundTag tileEntity) {
if (!isValidPosition(chunk.world, blockPosition))
return;

IBlockData blockData = Block.getByCombinedId(combinedId);

if (blockData.getBlock().getMaterial().isLiquid() && plugin.getSettings().isLiquidUpdate()) {
Expand Down Expand Up @@ -156,4 +160,10 @@ public static void setBlock(Chunk chunk, BlockPosition blockPosition, int combin
}
}

private static boolean isValidPosition(World world, BlockPosition blockPosition) {
return blockPosition.getX() >= -30000000 && blockPosition.getZ() >= -30000000 &&
blockPosition.getX() < 30000000 && blockPosition.getZ() < 30000000 &&
blockPosition.getY() >= 0 && blockPosition.getY() < world.getHeight();
}

}

0 comments on commit 92dbfeb

Please sign in to comment.