diff --git a/Core/src/main/java/com/songoda/core/utils/BlockUtils.java b/Core/src/main/java/com/songoda/core/utils/BlockUtils.java index 51138daf..625da05e 100644 --- a/Core/src/main/java/com/songoda/core/utils/BlockUtils.java +++ b/Core/src/main/java/com/songoda/core/utils/BlockUtils.java @@ -1,17 +1,11 @@ package com.songoda.core.utils; -import com.songoda.core.compatibility.ClassMapping; import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.core.compatibility.MethodMapping; -import com.songoda.core.compatibility.ServerVersion; import org.bukkit.Effect; -import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.EnumSet; @@ -328,66 +322,6 @@ public class BlockUtils { return null; } - /* Only to be used by #setBlockFast */ - private static Class clazzIBlockData, clazzBlocks, clazzCraftWorld, clazzBlockPosition; - /* Only to be used by #setBlockFast */ - private static Method getHandle, getByCombinedId, setType, getChunkAt, getBlockData; - - /** - * Set a block to a certain type by updating the block directly in the - * NMS chunk. - *

- * The chunk must be loaded and players must relog if they have the - * chunk loaded in order to use this method. - */ - public static void setBlockFast(World world, int x, int y, int z, Material material, byte data) { - try { - // Cache reflection - if (clazzIBlockData == null) { - clazzIBlockData = ClassMapping.I_BLOCK_DATA.getClazz(); - clazzBlockPosition = ClassMapping.BLOCK_POSITION.getClazz(); - clazzCraftWorld = ClassMapping.CRAFT_WORLD.getClazz(); - clazzBlocks = ClassMapping.BLOCKS.getClazz(); - Class clazzBlock = ClassMapping.BLOCK.getClazz(); - Class clazzWorld = ClassMapping.WORLD.getClazz(); - Class clazzChunk = ClassMapping.CHUNK.getClazz(); - - getHandle = clazzCraftWorld.getMethod("getHandle"); - getChunkAt = MethodMapping.WORLD__GET_CHUNK_AT.getMethod(clazzWorld); - - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { - getBlockData = MethodMapping.BLOCK__GET_BLOCK_DATA.getMethod(ClassMapping.BLOCK.getClazz()); - setType = MethodMapping.CHUNK__SET_BLOCK_STATE.getMethod(ClassMapping.CHUNK.getClazz()); - } else { - getByCombinedId = clazzBlock.getMethod("getByCombinedId", int.class); - setType = clazzChunk.getMethod("a", clazzBlockPosition, clazzIBlockData); - } - } - - // invoke and cast objects. - Object craftWorld = clazzCraftWorld.cast(world); - Object nmsWorld = getHandle.invoke(craftWorld); - Object chunk = getChunkAt.invoke(nmsWorld, x >> 4, z >> 4); - Object blockPosition = clazzBlockPosition.getConstructor(int.class, int.class, int.class).newInstance(x & 0xF, y, z & 0xF); - - // Invoke final method. - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { - Object block = clazzBlocks.getField(material.name()).get(null); - Object IBlockData = getBlockData.invoke(block); - setType.invoke(chunk, blockPosition, IBlockData, true); - } else { - Object IBlockData = getByCombinedId.invoke(null, material.getId() + (data << 12)); - setType.invoke(chunk, blockPosition, IBlockData); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - public static void setBlockFast(World world, int x, int y, int z, CompatibleMaterial material, byte data) { - setBlockFast(world, x, y, z, material.getBlockMaterial(), data); - } - /** * Checks if a crop is at its max growth stage * @@ -409,8 +343,7 @@ public class BlockUtils { return false; } - return block.getData() >= (mat == CompatibleMaterial.BEETROOTS - || mat == CompatibleMaterial.NETHER_WART ? 3 : 7); + return block.getData() >= (mat == CompatibleMaterial.BEETROOTS || mat == CompatibleMaterial.NETHER_WART ? 3 : 7); } /** @@ -459,8 +392,7 @@ public class BlockUtils { return -1; } - return (mat == CompatibleMaterial.BEETROOTS - || mat == CompatibleMaterial.NETHER_WART ? 3 : 7); + return (mat == CompatibleMaterial.BEETROOTS || mat == CompatibleMaterial.NETHER_WART ? 3 : 7); } /** diff --git a/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java index cbb03732..6f2dd16b 100644 --- a/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java +++ b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java @@ -1,9 +1,20 @@ package com.songoda.core.nms.world; +import org.bukkit.Material; import org.bukkit.entity.LivingEntity; import java.util.List; public interface SWorld { List getLivingEntities(); + + /** + * Set a block to a certain type by updating the block directly in the NMS chunk. + *
+ * The chunk must be loaded and players must relog if they have the chunk loaded in order to use this method. + * (F3+A is not enough) + */ + // TODO: Check if FabledSkyBlock *really* needs this method and if it can be removed. + // Would make thinks less complicated and I kinda cannot imagine it being *that* much faster to be worth it? + void setBlockFast(int x, int y, int z, Material material); } diff --git a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java index 04f7ea34..1c9667ed 100644 --- a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_10_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_10_R1.Block; +import net.minecraft.server.v1_10_R1.BlockPosition; +import net.minecraft.server.v1_10_R1.Chunk; +import net.minecraft.server.v1_10_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_10_R1.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java index a579c1a1..423469c8 100644 --- a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java index e8d37fd4..2a53dde0 100644 --- a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_11_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_11_R1.Block; +import net.minecraft.server.v1_11_R1.BlockPosition; +import net.minecraft.server.v1_11_R1.Chunk; +import net.minecraft.server.v1_11_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_11_R1.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java index e61cf992..ef02d083 100644 --- a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java index 6015dc65..7ac285dd 100644 --- a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_12_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_12_R1.Block; +import net.minecraft.server.v1_12_R1.BlockPosition; +import net.minecraft.server.v1_12_R1.Chunk; +import net.minecraft.server.v1_12_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java index 3d7bb3af..dded1987 100644 --- a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java index 78312506..45a9920c 100644 --- a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java @@ -1,17 +1,37 @@ package com.songoda.core.nms.v1_13_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_13_R1.BlockPosition; +import net.minecraft.server.v1_13_R1.Chunk; +import net.minecraft.server.v1_13_R1.IBlockData; +import net.minecraft.server.v1_13_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_13_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_13_R1.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); } } diff --git a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java index 6b702dbb..3d644902 100644 --- a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java @@ -44,7 +44,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java index 845b135a..61859a31 100644 --- a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java +++ b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java @@ -1,17 +1,37 @@ package com.songoda.core.nms.v1_13_R2.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_13_R2.BlockPosition; +import net.minecraft.server.v1_13_R2.Chunk; +import net.minecraft.server.v1_13_R2.IBlockData; +import net.minecraft.server.v1_13_R2.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_13_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_13_R2.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); } } diff --git a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java index f8178c66..427b7f8c 100644 --- a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java @@ -44,7 +44,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java index ac14e66a..1ff6c9de 100644 --- a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java @@ -1,17 +1,37 @@ package com.songoda.core.nms.v1_14_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_14_R1.BlockPosition; +import net.minecraft.server.v1_14_R1.Chunk; +import net.minecraft.server.v1_14_R1.IBlockData; +import net.minecraft.server.v1_14_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_14_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); } } diff --git a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java index 01eb81f1..cb8329a2 100644 --- a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java @@ -46,7 +46,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java index 5b569025..c2c4c8b5 100644 --- a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java @@ -1,17 +1,37 @@ package com.songoda.core.nms.v1_15_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_15_R1.BlockPosition; +import net.minecraft.server.v1_15_R1.Chunk; +import net.minecraft.server.v1_15_R1.IBlockData; +import net.minecraft.server.v1_15_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); } } diff --git a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java index 07e3ab2c..685f3bd4 100644 --- a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java @@ -46,7 +46,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java index 1ad6bf55..e28e2e17 100644 --- a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java @@ -1,17 +1,37 @@ package com.songoda.core.nms.v1_16_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_16_R1.BlockPosition; +import net.minecraft.server.v1_16_R1.Chunk; +import net.minecraft.server.v1_16_R1.IBlockData; +import net.minecraft.server.v1_16_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_16_R1.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); } } diff --git a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java index 94163f10..85a76ea7 100644 --- a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java @@ -46,7 +46,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java index b827e04f..9e5f668c 100644 --- a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java +++ b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java @@ -1,17 +1,37 @@ package com.songoda.core.nms.v1_16_R2.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_16_R2.BlockPosition; +import net.minecraft.server.v1_16_R2.Chunk; +import net.minecraft.server.v1_16_R2.IBlockData; +import net.minecraft.server.v1_16_R2.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_16_R2.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); } } diff --git a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java index 72124e2b..a3e1051e 100644 --- a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java @@ -46,7 +46,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java index 0b12fabd..e1a6e589 100644 --- a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java +++ b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java @@ -1,17 +1,37 @@ package com.songoda.core.nms.v1_16_R3.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_16_R3.BlockPosition; +import net.minecraft.server.v1_16_R3.Chunk; +import net.minecraft.server.v1_16_R3.IBlockData; +import net.minecraft.server.v1_16_R3.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_16_R3.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); } } diff --git a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java index c839b054..3d9243b9 100644 --- a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java @@ -46,7 +46,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java index b7c5bd51..162e9f0e 100644 --- a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java @@ -1,12 +1,17 @@ package com.songoda.core.nms.v1_17_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.core.BlockPosition; import net.minecraft.server.level.WorldServer; import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.state.IBlockData; +import net.minecraft.world.level.chunk.Chunk; import net.minecraft.world.level.entity.LevelEntityGetter; import net.minecraft.world.level.entity.PersistentEntitySectionManager; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_17_R1.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.lang.reflect.Field; @@ -37,9 +42,8 @@ public class SWorldImpl implements SWorld { List list = new ArrayList<>(); try { - WorldServer worldServer = ((CraftWorld) world).getHandle(); - LevelEntityGetter entities = - ((PersistentEntitySectionManager) fieldG.get(worldServer)).d(); + WorldServer worldServer = ((CraftWorld) this.world).getHandle(); + LevelEntityGetter entities = ((PersistentEntitySectionManager) fieldG.get(worldServer)).d(); entities.a().forEach((mcEnt) -> { org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity(); @@ -53,4 +57,13 @@ public class SWorldImpl implements SWorld { return list; } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); + } } diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java index 5551f813..df18b4b8 100644 --- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java @@ -1,10 +1,15 @@ package com.songoda.core.nms.v1_18_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.core.BlockPosition; import net.minecraft.server.level.WorldServer; +import net.minecraft.world.level.block.state.IBlockData; +import net.minecraft.world.level.chunk.Chunk; import net.minecraft.world.level.entity.LevelEntityGetter; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_18_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_18_R1.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; @@ -21,7 +26,7 @@ public class SWorldImpl implements SWorld { public List getLivingEntities() { List result = new ArrayList<>(); - WorldServer worldServer = ((CraftWorld) world).getHandle(); + WorldServer worldServer = ((CraftWorld) this.world).getHandle(); LevelEntityGetter entities = worldServer.P.d(); entities.a().forEach((mcEnt) -> { @@ -34,4 +39,13 @@ public class SWorldImpl implements SWorld { return result; } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true); + } } diff --git a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java index a3ac885c..5cf6f6f9 100644 --- a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java +++ b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java @@ -1,11 +1,16 @@ package com.songoda.core.nms.v1_18_R2.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.entity.LevelEntityGetter; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; @@ -22,8 +27,8 @@ public class SWorldImpl implements SWorld { public List getLivingEntities() { List result = new ArrayList<>(); - ServerLevel worldServer = ((CraftWorld) world).getHandle(); - LevelEntityGetter entities = worldServer.entityManager.getEntityGetter(); + ServerLevel serverLevel = ((CraftWorld) this.world).getHandle(); + LevelEntityGetter entities = serverLevel.entityManager.getEntityGetter(); entities.getAll().forEach((mcEnt) -> { org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity(); @@ -35,4 +40,13 @@ public class SWorldImpl implements SWorld { return result; } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + ServerLevel serverLevel = ((CraftWorld) this.world).getHandle(); + LevelChunk levelChunk = serverLevel.getChunk(x >> 4, z >> 4); + BlockState blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true); + } } diff --git a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java index 0706be94..75ca33ab 100644 --- a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java @@ -1,11 +1,16 @@ package com.songoda.core.nms.v1_19_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.entity.LevelEntityGetter; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; @@ -22,7 +27,7 @@ public class SWorldImpl implements SWorld { public List getLivingEntities() { List result = new ArrayList<>(); - ServerLevel worldServer = ((CraftWorld) world).getHandle(); + ServerLevel worldServer = ((CraftWorld) this.world).getHandle(); LevelEntityGetter entities = worldServer.entityManager.getEntityGetter(); entities.getAll().forEach((mcEnt) -> { @@ -35,4 +40,13 @@ public class SWorldImpl implements SWorld { return result; } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + ServerLevel serverLevel = ((CraftWorld) this.world).getHandle(); + LevelChunk levelChunk = serverLevel.getChunk(x >> 4, z >> 4); + BlockState blockState = ((CraftBlockData) material.createBlockData()).getState(); + + levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true); + } } diff --git a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java index 2518d072..99cf9790 100644 --- a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_8_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_8_R1.Block; +import net.minecraft.server.v1_8_R1.BlockPosition; +import net.minecraft.server.v1_8_R1.Chunk; +import net.minecraft.server.v1_8_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_8_R1.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java index 55c35dc1..df5ef295 100644 --- a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java index fa2fc439..f516bfef 100644 --- a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java +++ b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_8_R2.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_8_R2.Block; +import net.minecraft.server.v1_8_R2.BlockPosition; +import net.minecraft.server.v1_8_R2.Chunk; +import net.minecraft.server.v1_8_R2.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_8_R2.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java index 770896ea..9b94f43f 100644 --- a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java index f8430d5c..189fb6b5 100644 --- a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java +++ b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_8_R3.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_8_R3.Block; +import net.minecraft.server.v1_8_R3.BlockPosition; +import net.minecraft.server.v1_8_R3.Chunk; +import net.minecraft.server.v1_8_R3.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java index 144be4dc..58db037c 100644 --- a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java index fdfe63fa..49d6b8b0 100644 --- a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java +++ b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_9_R1.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_9_R1.Block; +import net.minecraft.server.v1_9_R1.BlockPosition; +import net.minecraft.server.v1_9_R1.Chunk; +import net.minecraft.server.v1_9_R1.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_9_R1.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java index 99b48185..6bf93248 100644 --- a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override diff --git a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java index 4e118871..deebc639 100644 --- a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java +++ b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java @@ -1,17 +1,35 @@ package com.songoda.core.nms.v1_9_R2.world; import com.songoda.core.nms.world.SWorld; +import net.minecraft.server.v1_9_R2.Block; +import net.minecraft.server.v1_9_R2.BlockPosition; +import net.minecraft.server.v1_9_R2.Chunk; +import net.minecraft.server.v1_9_R2.WorldServer; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_9_R2.CraftWorld; import org.bukkit.entity.LivingEntity; import java.util.ArrayList; import java.util.List; public class SWorldImpl implements SWorld { - public SWorldImpl() { + private final World world; + + public SWorldImpl(World world) { + this.world = world; } @Override public List getLivingEntities() { - return new ArrayList<>(); + return new ArrayList<>(); // FIXME + } + + @Override + public void setBlockFast(int x, int y, int z, Material material) { + WorldServer serverLevel = ((CraftWorld) this.world).getHandle(); + Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4); + + levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0)); } } diff --git a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java index ad35fe04..008551a5 100644 --- a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java @@ -43,7 +43,7 @@ public class WorldCoreImpl implements WorldCore { @Override public SWorld getWorld(World world) { - return new SWorldImpl(); + return new SWorldImpl(world); } @Override