use of org.bukkit.craftbukkit.v1_18_R2.CraftChunk in project Denizen-For-Bukkit by DenizenScript.
the class BlockHelperImpl method doRandomTick.
@Override
public void doRandomTick(Location location) {
BlockPos pos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ());
LevelChunk nmsChunk = ((CraftChunk) location.getChunk()).getHandle();
net.minecraft.world.level.block.state.BlockState nmsBlock = nmsChunk.getBlockState(pos);
ServerLevel nmsWorld = ((CraftWorld) location.getWorld()).getHandle();
if (nmsBlock.isRandomlyTicking()) {
nmsBlock.randomTick(nmsWorld, pos, nmsWorld.random);
}
try {
// FluidState fluid = nmsBlock.getFluidState();
// if (fluid.isRandomlyTicking()) {
// fluid.animateTick(nmsWorld, pos, nmsWorld.random);
// }
Object fluid = BLOCKSTATEBASE_GETFLUIDSTATE.invoke(nmsBlock);
if ((boolean) FLUIDSTATE_ISRANDOMLYTICKING.invoke(fluid)) {
FLUIDSTATE_ANIMATETICK.invoke(fluid, nmsWorld, pos, nmsWorld.random);
}
} catch (Throwable ex) {
Debug.echoError(ex);
}
}
use of org.bukkit.craftbukkit.v1_18_R2.CraftChunk in project Denizen-For-Bukkit by DenizenScript.
the class BlockHelperImpl method doRandomTick.
@Override
public void doRandomTick(Location location) {
BlockPosition pos = new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ());
Chunk nmsChunk = ((CraftChunk) location.getChunk()).getHandle();
IBlockData nmsBlock = nmsChunk.getType(pos);
WorldServer nmsWorld = ((CraftWorld) location.getWorld()).getHandle();
if (nmsBlock.isTicking()) {
nmsBlock.b(nmsWorld, pos, nmsWorld.random);
}
Fluid fluid = nmsBlock.getFluid();
if (fluid.f()) {
fluid.b(nmsWorld, pos, nmsWorld.random);
}
}
use of org.bukkit.craftbukkit.v1_18_R2.CraftChunk in project VanillaSource by TheHollowPlanetMC.
the class PacketManager method sendClearChunkMultiBlockChangePacketAtPrimaryThread.
public static void sendClearChunkMultiBlockChangePacketAtPrimaryThread(Player player, ParallelChunk parallelChunk, NMSHandler nmsHandler) {
if (!Bukkit.isPrimaryThread())
throw new IllegalStateException("DO NOT CALL FROM ASYNC THREAD!");
org.bukkit.World world = Bukkit.getWorld(parallelChunk.getWorld().getName());
if (world == null)
return;
if (player.getWorld() != world)
return;
List<Short> coordList = new ArrayList<>();
boolean has = false;
for (int sectionIndex = 0; sectionIndex < 16; sectionIndex++) {
SectionTypeArray sectionTypeArray = parallelChunk.getSectionTypeArray(sectionIndex);
if (sectionTypeArray == null)
continue;
int finalSectionIndex = sectionIndex;
boolean notEmpty = sectionTypeArray.threadsafeIteration((x, y, z, iBlockData) -> {
short loc = (short) (x << 12 | z << 8 | (y + (finalSectionIndex << 4)));
coordList.add(loc);
});
if (notEmpty)
has = true;
}
if (!has)
return;
if (coordList.size() == 0)
return;
org.bukkit.Chunk chunk = world.getChunkAt(parallelChunk.getChunkX(), parallelChunk.getChunkZ());
net.minecraft.server.v1_15_R1.Chunk nmsChunk = ((CraftChunk) chunk).getHandle();
short[] array = new short[coordList.size()];
for (int i = 0; i < coordList.size(); i++) {
array[i] = coordList.get(i);
}
PacketPlayOutMultiBlockChange packet = new PacketPlayOutMultiBlockChange(coordList.size(), array, nmsChunk);
nmsHandler.sendPacket(player, packet);
}
use of org.bukkit.craftbukkit.v1_18_R2.CraftChunk in project NotQuests by AlessioGr.
the class PacketInjector method spawnBeaconBeam.
public void spawnBeaconBeam(Player player, Location location) {
// Prepare Data
Connection connection = getConnection(getServerPlayer(player).connection);
location = location.clone();
BlockPos blockPos = new BlockPos(location.getX(), location.getY(), location.getZ());
Chunk chunk = location.getChunk();
CraftChunk craftChunk = (CraftChunk) chunk;
LevelChunk levelChunk = craftChunk.getHandle();
World world = location.getWorld();
CraftWorld craftWorld = (CraftWorld) world;
ServerLevel serverLevel = craftWorld.getHandle();
//
BlockState blockState = location.getBlock().getState();
blockState.setType(Material.BEACON);
SectionPos sectionPos = SectionPos.of((int) location.getX(), (int) location.getY(), (int) location.getZ());
ShortSet positions = ShortSet.of((short) 0);
// PalettedContainer<BlockState> pcB = new PalettedContainer<>();
// net.minecraft.world.level.block.state.BlockState[] presetBlockStates = serverLevel.chunkPacketBlockController.getPresetBlockStates(world, chunkPos, b0 << 4);
// PalettedContainer<BlockState> datapaletteblock = new PalettedContainer<>(net.minecraft.world.level.block.Block.BLOCK_STATE_REGISTRY, Blocks.AIR.defaultBlockState(), PalettedContainer.Strategy.SECTION_STATES, presetBlockStates);
LevelChunkSection section = levelChunk.getHighestSection();
ClientboundSectionBlocksUpdatePacket clientboundSectionBlocksUpdatePacket = new ClientboundSectionBlocksUpdatePacket(sectionPos, positions, section, true);
main.sendMessage(player, "<main>Sending packet...");
connection.send(clientboundSectionBlocksUpdatePacket);
main.sendMessage(player, "<success>Packet sent!");
// ClientboundBlockUpdatePacket clientboundBlockUpdatePacket = new ClientboundBlockUpdatePacket(blockPos, BlockState.);
}
use of org.bukkit.craftbukkit.v1_18_R2.CraftChunk in project MagicPlugin by elBukkit.
the class CompatibilityUtils method setBlockFast.
@Override
public boolean setBlockFast(Chunk chunk, int x, int y, int z, Material material, int data) {
LevelChunk nmsChunk = ((CraftChunk) chunk).getHandle();
net.minecraft.world.level.block.Block block = CraftMagicNumbers.getBlock(material);
BlockPos blockLocation = new BlockPos(x, y, z);
nmsChunk.setBlockState(blockLocation, block.defaultBlockState(), false);
return true;
}
Aggregations