From b1aa53c1a9fa75add654409d2fcd19417d338367 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Tue, 2 Mar 2021 17:55:14 +0100 Subject: [PATCH] Adds missing comments to BlockPopulatorThread and make end gateways teleport entities back to itself to prevent strange behavior Because of the teleport change, end gateways work to teleport player, and end gateways work to the end for vehicles, but vehicles cannot teleport back from the end --- .../stargate/thread/BlockPopulatorThread.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/thread/BlockPopulatorThread.java b/src/main/java/net/knarcraft/stargate/thread/BlockPopulatorThread.java index a37547b..61be215 100644 --- a/src/main/java/net/knarcraft/stargate/thread/BlockPopulatorThread.java +++ b/src/main/java/net/knarcraft/stargate/thread/BlockPopulatorThread.java @@ -8,27 +8,42 @@ import org.bukkit.block.Block; import org.bukkit.block.EndGateway; import org.bukkit.block.data.Orientable; +/** + * This thread changes gate blocks to display a gate as open or closed + * + *

This thread fetches some entries from blockPopulatorQueue each time it's called.

+ */ public class BlockPopulatorThread implements Runnable { + + @Override public void run() { long sTime = System.nanoTime(); + //Repeat for at most 0.025 seconds while (System.nanoTime() - sTime < 25000000) { + //Abort if there's no work to be done BloxPopulator bloxPopulator = Stargate.blockPopulatorQueue.poll(); if (bloxPopulator == null) { return; } + + //Change the material of the pulled block Block block = bloxPopulator.getBlockLocation().getBlock(); block.setType(bloxPopulator.getMaterial(), false); - if (bloxPopulator.getMaterial() == Material.END_GATEWAY && block.getWorld().getEnvironment() == World.Environment.THE_END) { - // force a location to prevent exit gateway generation + + if (bloxPopulator.getMaterial() == Material.END_GATEWAY && + block.getWorld().getEnvironment() == World.Environment.THE_END) { + //Force a specific location to prevent exit gateway generation EndGateway gateway = (EndGateway) block.getState(); - gateway.setExitLocation(block.getWorld().getSpawnLocation()); + gateway.setExitLocation(block.getLocation()); gateway.setExactTeleport(true); gateway.update(false, false); } else if (bloxPopulator.getAxis() != null) { + //If orientation is relevant, adjust the block's orientation Orientable orientable = (Orientable) block.getBlockData(); orientable.setAxis(bloxPopulator.getAxis()); block.setBlockData(orientable); } } } + }