Merge branch 'dev' of https://git.knarcraft.net/EpicKnarvik97/Stargate into dev
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				EpicKnarvik97/Stargate/pipeline/head There was a failure building this commit
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	EpicKnarvik97/Stargate/pipeline/head There was a failure building this commit
				
			Conflicts: README.md pom.xml src/main/resources/plugin.yml
This commit is contained in:
		@@ -45,18 +45,14 @@ import java.util.logging.Logger;
 | 
				
			|||||||
@SuppressWarnings("unused")
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
public class Stargate extends JavaPlugin {
 | 
					public class Stargate extends JavaPlugin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Used for changing gate open/closed material.
 | 
					 | 
				
			||||||
    private static final Queue<BlockChangeRequest> blockChangeRequestQueue = new LinkedList<>();
 | 
					    private static final Queue<BlockChangeRequest> blockChangeRequestQueue = new LinkedList<>();
 | 
				
			||||||
    private static final Queue<ChunkUnloadRequest> chunkUnloadQueue = new PriorityQueue<>();
 | 
					    private static final Queue<ChunkUnloadRequest> chunkUnloadQueue = new PriorityQueue<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static Logger logger;
 | 
					    private static Logger logger;
 | 
				
			||||||
    private static Stargate stargate;
 | 
					    private static Stargate stargate;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    private static String pluginVersion;
 | 
					    private static String pluginVersion;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    private static PluginManager pluginManager;
 | 
					    private static PluginManager pluginManager;
 | 
				
			||||||
    private static StargateConfig stargateConfig;
 | 
					    private static StargateConfig stargateConfig;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    private static String updateAvailable = null;
 | 
					    private static String updateAvailable = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -430,4 +426,5 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
    public static StargateConfig getStargateConfig() {
 | 
					    public static StargateConfig getStargateConfig() {
 | 
				
			||||||
        return stargateConfig;
 | 
					        return stargateConfig;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,4 +35,5 @@ public class CommandStarGate implements CommandExecutor {
 | 
				
			|||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -217,22 +217,10 @@ public class ConfigTabCompleter implements TabCompleter {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private List<ChatColor> getChatColors() {
 | 
					    private List<ChatColor> getChatColors() {
 | 
				
			||||||
        List<ChatColor> chatColors = new ArrayList<>();
 | 
					        List<ChatColor> chatColors = new ArrayList<>();
 | 
				
			||||||
        chatColors.add(ChatColor.WHITE);
 | 
					        char[] colors = new char[]{'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
 | 
				
			||||||
        chatColors.add(ChatColor.BLUE);
 | 
					        for (char color : colors) {
 | 
				
			||||||
        chatColors.add(ChatColor.DARK_BLUE);
 | 
					            chatColors.add(ChatColor.getByChar(color));
 | 
				
			||||||
        chatColors.add(ChatColor.DARK_PURPLE);
 | 
					        }
 | 
				
			||||||
        chatColors.add(ChatColor.LIGHT_PURPLE);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.GOLD);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.GREEN);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.BLACK);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.DARK_GREEN);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.DARK_RED);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.RED);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.AQUA);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.DARK_AQUA);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.DARK_GRAY);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.GRAY);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.YELLOW);
 | 
					 | 
				
			||||||
        chatColors.add(ChatColor.of("#ed76d9"));
 | 
					        chatColors.add(ChatColor.of("#ed76d9"));
 | 
				
			||||||
        chatColors.add(ChatColor.of("#ffecb7"));
 | 
					        chatColors.add(ChatColor.of("#ffecb7"));
 | 
				
			||||||
        return chatColors;
 | 
					        return chatColors;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,7 +117,7 @@ public enum ConfigOption {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    WAIT_FOR_PLAYER_AFTER_TELEPORT_DELAY("advanced.waitForPlayerAfterTeleportDelay",
 | 
					    WAIT_FOR_PLAYER_AFTER_TELEPORT_DELAY("advanced.waitForPlayerAfterTeleportDelay",
 | 
				
			||||||
            "The amount of ticks to wait before adding a player as passenger of a vehicle. On slow servers, " +
 | 
					            "The amount of ticks to wait before adding a player as passenger of a vehicle. On slow servers, " +
 | 
				
			||||||
                    "a value of 6 is required to avoid client glitches after teleporting on a vehicle.", 1),
 | 
					                    "a value of 6 is required to avoid client glitches after teleporting on a vehicle.", 6),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Whether to enable economy support for taking payment from players creating/destroying/using stargates
 | 
					     * Whether to enable economy support for taking payment from players creating/destroying/using stargates
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -520,4 +520,5 @@ public final class StargateConfig {
 | 
				
			|||||||
    public LanguageLoader getLanguageLoader() {
 | 
					    public LanguageLoader getLanguageLoader() {
 | 
				
			||||||
        return languageLoader;
 | 
					        return languageLoader;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ import java.util.Map;
 | 
				
			|||||||
 * The Stargate gate config keeps track of all global config values related to gates
 | 
					 * The Stargate gate config keeps track of all global config values related to gates
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public final class StargateGateConfig {
 | 
					public final class StargateGateConfig {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final int activeTime = 10;
 | 
					    private static final int activeTime = 10;
 | 
				
			||||||
    private static final int openTime = 10;
 | 
					    private static final int openTime = 10;
 | 
				
			||||||
    private final Map<ConfigOption, Object> configOptions;
 | 
					    private final Map<ConfigOption, Object> configOptions;
 | 
				
			||||||
@@ -142,6 +143,9 @@ public final class StargateGateConfig {
 | 
				
			|||||||
     * @return <p>The delay to use before adding a player as passenger of a teleported vehicle</p>
 | 
					     * @return <p>The delay to use before adding a player as passenger of a teleported vehicle</p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public int waitForPlayerAfterTeleportDelay() {
 | 
					    public int waitForPlayerAfterTeleportDelay() {
 | 
				
			||||||
 | 
					        if ((int) configOptions.get(ConfigOption.WAIT_FOR_PLAYER_AFTER_TELEPORT_DELAY) < 2) {
 | 
				
			||||||
 | 
					            configOptions.put(ConfigOption.WAIT_FOR_PLAYER_AFTER_TELEPORT_DELAY, 6);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return (int) configOptions.get(ConfigOption.WAIT_FOR_PLAYER_AFTER_TELEPORT_DELAY);
 | 
					        return (int) configOptions.get(ConfigOption.WAIT_FOR_PLAYER_AFTER_TELEPORT_DELAY);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -320,4 +324,5 @@ public final class StargateGateConfig {
 | 
				
			|||||||
            PortalSignDrawer.setHighlightColor(ChatColor.WHITE);
 | 
					            PortalSignDrawer.setHighlightColor(ChatColor.WHITE);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,16 +58,11 @@ public class RelativeBlockVector {
 | 
				
			|||||||
     * @return <p>A new relative block vector with the property altered</p>
 | 
					     * @return <p>A new relative block vector with the property altered</p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public RelativeBlockVector addToVector(Property propertyToAddTo, int valueToAdd) {
 | 
					    public RelativeBlockVector addToVector(Property propertyToAddTo, int valueToAdd) {
 | 
				
			||||||
        switch (propertyToAddTo) {
 | 
					        return switch (propertyToAddTo) {
 | 
				
			||||||
            case RIGHT:
 | 
					            case RIGHT -> new RelativeBlockVector(this.right + valueToAdd, this.down, this.out);
 | 
				
			||||||
                return new RelativeBlockVector(this.right + valueToAdd, this.down, this.out);
 | 
					            case DOWN -> new RelativeBlockVector(this.right, this.down + valueToAdd, this.out);
 | 
				
			||||||
            case DOWN:
 | 
					            case OUT -> new RelativeBlockVector(this.right, this.down, this.out + valueToAdd);
 | 
				
			||||||
                return new RelativeBlockVector(this.right, this.down + valueToAdd, this.out);
 | 
					        };
 | 
				
			||||||
            case OUT:
 | 
					 | 
				
			||||||
                return new RelativeBlockVector(this.right, this.down, this.out + valueToAdd);
 | 
					 | 
				
			||||||
            default:
 | 
					 | 
				
			||||||
                throw new IllegalArgumentException("Invalid relative block vector property given");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
 | 
				
			|||||||
import org.bukkit.event.player.PlayerMoveEvent;
 | 
					import org.bukkit.event.player.PlayerMoveEvent;
 | 
				
			||||||
import org.bukkit.inventory.EquipmentSlot;
 | 
					import org.bukkit.inventory.EquipmentSlot;
 | 
				
			||||||
import org.bukkit.inventory.ItemStack;
 | 
					import org.bukkit.inventory.ItemStack;
 | 
				
			||||||
 | 
					import org.bukkit.util.Vector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
@@ -131,6 +132,7 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
                horse.setOwner(player);
 | 
					                horse.setOwner(player);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            //Teleport the player's vehicle
 | 
					            //Teleport the player's vehicle
 | 
				
			||||||
 | 
					            player.setVelocity(new Vector());
 | 
				
			||||||
            new VehicleTeleporter(destination, (Vehicle) playerVehicle).teleportEntity(entrancePortal);
 | 
					            new VehicleTeleporter(destination, (Vehicle) playerVehicle).teleportEntity(entrancePortal);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            //Just teleport the player like normal
 | 
					            //Just teleport the player like normal
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,4 +49,5 @@ public class PluginEventListener implements Listener {
 | 
				
			|||||||
            Stargate.logInfo("Vault plugin lost.");
 | 
					            Stargate.logInfo("Vault plugin lost.");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,4 +46,5 @@ public class WorldEventListener implements Listener {
 | 
				
			|||||||
            PortalRegistry.clearPortals(world);
 | 
					            PortalRegistry.clearPortals(world);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -345,4 +345,5 @@ public class Portal {
 | 
				
			|||||||
            return cleanNetwork.equalsIgnoreCase(other.cleanNetwork);
 | 
					            return cleanNetwork.equalsIgnoreCase(other.cleanNetwork);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -448,4 +448,5 @@ public class PortalHandler {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return input.replaceAll("[|:#]", "").trim();
 | 
					        return input.replaceAll("[|:#]", "").trim();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,6 +49,10 @@ public class PlayerTeleporter extends Teleporter {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Calculate the exit velocity of the player
 | 
				
			||||||
 | 
					        Vector newVelocityDirection = DirectionHelper.getDirectionVectorFromYaw(portal.getYaw());
 | 
				
			||||||
 | 
					        Vector newVelocity = newVelocityDirection.multiply(velocity * Stargate.getGateConfig().getExitVelocity());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Load chunks to make sure not to teleport to the void
 | 
					        //Load chunks to make sure not to teleport to the void
 | 
				
			||||||
        loadChunks();
 | 
					        loadChunks();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,7 +60,7 @@ public class PlayerTeleporter extends Teleporter {
 | 
				
			|||||||
        TeleportHelper.teleportLeashedCreatures(player, origin, portal);
 | 
					        TeleportHelper.teleportLeashedCreatures(player, origin, portal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (player.eject()) {
 | 
					        if (player.eject()) {
 | 
				
			||||||
            TeleportHelper.handleEntityPassengers(passengers, player, origin, portal, exit.getDirection());
 | 
					            TeleportHelper.handleEntityPassengers(passengers, player, origin, portal, exit.getDirection(), newVelocity);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //If no event is passed in, assume it's a teleport, and act as such
 | 
					        //If no event is passed in, assume it's a teleport, and act as such
 | 
				
			||||||
@@ -68,11 +72,7 @@ public class PlayerTeleporter extends Teleporter {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Set the velocity of the teleported player after the teleportation is finished
 | 
					        //Set the velocity of the teleported player after the teleportation is finished
 | 
				
			||||||
        Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
 | 
					        Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> player.setVelocity(newVelocity), 1);
 | 
				
			||||||
            Vector newVelocityDirection = DirectionHelper.getDirectionVectorFromYaw(portal.getYaw());
 | 
					 | 
				
			||||||
            Vector newVelocity = newVelocityDirection.multiply(velocity * Stargate.getGateConfig().getExitVelocity());
 | 
					 | 
				
			||||||
            player.setVelocity(newVelocity);
 | 
					 | 
				
			||||||
        }, 1);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ import org.bukkit.entity.AbstractHorse;
 | 
				
			|||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.event.Event;
 | 
					import org.bukkit.event.Event;
 | 
				
			||||||
import org.bukkit.scheduler.BukkitScheduler;
 | 
					import org.bukkit.scheduler.BukkitScheduler;
 | 
				
			||||||
 | 
					import org.bukkit.util.Vector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@@ -83,7 +84,8 @@ public abstract class Teleporter {
 | 
				
			|||||||
        loadChunks();
 | 
					        loadChunks();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (teleportedEntity.eject()) {
 | 
					        if (teleportedEntity.eject()) {
 | 
				
			||||||
            TeleportHelper.handleEntityPassengers(passengers, teleportedEntity, origin, portal, exit.getDirection());
 | 
					            TeleportHelper.handleEntityPassengers(passengers, teleportedEntity, origin, portal, exit.getDirection(),
 | 
				
			||||||
 | 
					                    new Vector());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        teleportedEntity.teleport(exit);
 | 
					        teleportedEntity.teleport(exit);
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ import org.bukkit.entity.Boat;
 | 
				
			|||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.LivingEntity;
 | 
					import org.bukkit.entity.LivingEntity;
 | 
				
			||||||
import org.bukkit.entity.Vehicle;
 | 
					import org.bukkit.entity.Vehicle;
 | 
				
			||||||
 | 
					import org.bukkit.event.player.PlayerTeleportEvent;
 | 
				
			||||||
import org.bukkit.util.Vector;
 | 
					import org.bukkit.util.Vector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@@ -57,7 +58,10 @@ public class VehicleTeleporter extends EntityTeleporter {
 | 
				
			|||||||
        Vector newVelocity = newVelocityDirection.multiply(velocity);
 | 
					        Vector newVelocity = newVelocityDirection.multiply(velocity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Call the StargateEntityPortalEvent to allow plugins to change destination
 | 
					        //Call the StargateEntityPortalEvent to allow plugins to change destination
 | 
				
			||||||
        triggerPortalEvent(origin, new StargateEntityPortalEvent(teleportingVehicle, origin, portal, exit));
 | 
					        exit = triggerPortalEvent(origin, new StargateEntityPortalEvent(teleportingVehicle, origin, portal, exit));
 | 
				
			||||||
 | 
					        if (exit == null) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Teleport the vehicle
 | 
					        //Teleport the vehicle
 | 
				
			||||||
        return teleportVehicle(exit, newVelocity, origin);
 | 
					        return teleportVehicle(exit, newVelocity, origin);
 | 
				
			||||||
@@ -129,11 +133,18 @@ public class VehicleTeleporter extends EntityTeleporter {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private void teleportVehicle(List<Entity> passengers, Location exit, Vector newVelocity, Portal origin) {
 | 
					    private void teleportVehicle(List<Entity> passengers, Location exit, Vector newVelocity, Portal origin) {
 | 
				
			||||||
        if (teleportingVehicle.eject()) {
 | 
					        if (teleportingVehicle.eject()) {
 | 
				
			||||||
            TeleportHelper.handleEntityPassengers(passengers, teleportingVehicle, origin, portal, exit.getDirection());
 | 
					            TeleportHelper.handleEntityPassengers(passengers, teleportingVehicle, origin, portal, exit.getDirection(),
 | 
				
			||||||
 | 
					                    newVelocity);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        teleportingVehicle.teleport(exit);
 | 
					        Stargate.debug("VehicleTeleporter::teleportVehicle", "Teleporting " + teleportingVehicle +
 | 
				
			||||||
 | 
					                " to final location " + exit + " with direction " + exit.getDirection());
 | 
				
			||||||
 | 
					        teleportingVehicle.teleport(exit, PlayerTeleportEvent.TeleportCause.PLUGIN);
 | 
				
			||||||
        scheduler.scheduleSyncDelayedTask(Stargate.getInstance(),
 | 
					        scheduler.scheduleSyncDelayedTask(Stargate.getInstance(),
 | 
				
			||||||
                () -> teleportingVehicle.setVelocity(newVelocity), 1);
 | 
					                () -> {
 | 
				
			||||||
 | 
					                    Stargate.debug("VehicleTeleporter::teleportVehicle", "Setting velocity " + newVelocity +
 | 
				
			||||||
 | 
					                            " for vehicle " + teleportingVehicle);
 | 
				
			||||||
 | 
					                    teleportingVehicle.setVelocity(newVelocity);
 | 
				
			||||||
 | 
					                }, 1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -162,7 +173,8 @@ public class VehicleTeleporter extends EntityTeleporter {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        //Remove the old vehicle
 | 
					        //Remove the old vehicle
 | 
				
			||||||
        if (teleportingVehicle.eject()) {
 | 
					        if (teleportingVehicle.eject()) {
 | 
				
			||||||
            TeleportHelper.handleEntityPassengers(passengers, newVehicle, origin, portal, exit.getDirection());
 | 
					            TeleportHelper.handleEntityPassengers(passengers, newVehicle, origin, portal, exit.getDirection(),
 | 
				
			||||||
 | 
					                    newVelocity);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        teleportingVehicle.remove();
 | 
					        teleportingVehicle.remove();
 | 
				
			||||||
        scheduler.scheduleSyncDelayedTask(Stargate.getInstance(), () -> newVehicle.setVelocity(newVelocity), 1);
 | 
					        scheduler.scheduleSyncDelayedTask(Stargate.getInstance(), () -> newVehicle.setVelocity(newVelocity), 1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import net.knarcraft.stargate.Stargate;
 | 
				
			|||||||
import net.knarcraft.stargate.portal.Portal;
 | 
					import net.knarcraft.stargate.portal.Portal;
 | 
				
			||||||
import net.knarcraft.stargate.portal.teleporter.EntityTeleporter;
 | 
					import net.knarcraft.stargate.portal.teleporter.EntityTeleporter;
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.entity.Creature;
 | 
					import org.bukkit.entity.Creature;
 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
@@ -78,14 +79,28 @@ public final class TeleportHelper {
 | 
				
			|||||||
     * @param targetVehicle <p>The entity to add the passenger to</p>
 | 
					     * @param targetVehicle <p>The entity to add the passenger to</p>
 | 
				
			||||||
     * @param passenger     <p>The passenger to teleport and add</p>
 | 
					     * @param passenger     <p>The passenger to teleport and add</p>
 | 
				
			||||||
     * @param exitDirection <p>The direction of any passengers exiting the stargate</p>
 | 
					     * @param exitDirection <p>The direction of any passengers exiting the stargate</p>
 | 
				
			||||||
 | 
					     * @param newVelocity   <p>The new velocity of the teleported passenger</p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static void teleportAndAddPassenger(Entity targetVehicle, Entity passenger, Vector exitDirection) {
 | 
					    public static void teleportAndAddPassenger(Entity targetVehicle, Entity passenger, Vector exitDirection,
 | 
				
			||||||
        if (!passenger.teleport(targetVehicle.getLocation().clone().setDirection(exitDirection))) {
 | 
					                                               Vector newVelocity) {
 | 
				
			||||||
            Stargate.debug("handleVehiclePassengers", "Failed to teleport passenger" + passenger);
 | 
					        Location passengerExit = targetVehicle.getLocation().clone().setDirection(exitDirection);
 | 
				
			||||||
 | 
					        if (!passenger.teleport(passengerExit)) {
 | 
				
			||||||
 | 
					            Stargate.debug("TeleportHelper::handleVehiclePassengers", "Failed to teleport passenger" +
 | 
				
			||||||
 | 
					                    passenger);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            Stargate.debug("TeleportHelper::handleVehiclePassengers", "Teleported " + passenger +
 | 
				
			||||||
 | 
					                    " to " + passengerExit);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!targetVehicle.addPassenger(passenger)) {
 | 
					        if (!targetVehicle.addPassenger(passenger)) {
 | 
				
			||||||
            Stargate.debug("handleVehiclePassengers", "Failed to add passenger" + passenger);
 | 
					            Stargate.debug("TeleportHelper::handleVehiclePassengers", "Failed to add passenger" +
 | 
				
			||||||
 | 
					                    passenger);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            Stargate.debug("TeleportHelper::handleVehiclePassengers", "Added passenger " + passenger +
 | 
				
			||||||
 | 
					                    " to " + targetVehicle);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        Stargate.debug("VehicleTeleporter::teleportVehicle", "Setting velocity " + newVelocity +
 | 
				
			||||||
 | 
					                " for passenger " + passenger);
 | 
				
			||||||
 | 
					        passenger.setVelocity(newVelocity);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -96,9 +111,10 @@ public final class TeleportHelper {
 | 
				
			|||||||
     * @param origin       <p>The portal the entity teleported from</p>
 | 
					     * @param origin       <p>The portal the entity teleported from</p>
 | 
				
			||||||
     * @param target       <p>The portal the entity is teleporting to</p>
 | 
					     * @param target       <p>The portal the entity is teleporting to</p>
 | 
				
			||||||
     * @param exitRotation <p>The rotation of any passengers exiting the stargate</p>
 | 
					     * @param exitRotation <p>The rotation of any passengers exiting the stargate</p>
 | 
				
			||||||
 | 
					     * @param newVelocity  <p>The new velocity of the teleported passengers</p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static void handleEntityPassengers(List<Entity> passengers, Entity entity, Portal origin, Portal target,
 | 
					    public static void handleEntityPassengers(List<Entity> passengers, Entity entity, Portal origin, Portal target,
 | 
				
			||||||
                                              Vector exitRotation) {
 | 
					                                              Vector exitRotation, Vector newVelocity) {
 | 
				
			||||||
        for (Entity passenger : passengers) {
 | 
					        for (Entity passenger : passengers) {
 | 
				
			||||||
            List<Entity> passengerPassengers = passenger.getPassengers();
 | 
					            List<Entity> passengerPassengers = passenger.getPassengers();
 | 
				
			||||||
            if (!passengerPassengers.isEmpty()) {
 | 
					            if (!passengerPassengers.isEmpty()) {
 | 
				
			||||||
@@ -107,14 +123,14 @@ public final class TeleportHelper {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            if (passenger.eject()) {
 | 
					            if (passenger.eject()) {
 | 
				
			||||||
                //Teleport any passengers of the passenger
 | 
					                //Teleport any passengers of the passenger
 | 
				
			||||||
                handleEntityPassengers(passengerPassengers, passenger, origin, target, exitRotation);
 | 
					                handleEntityPassengers(passengerPassengers, passenger, origin, target, exitRotation, newVelocity);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
 | 
					            Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
 | 
				
			||||||
                if (passenger instanceof Player player) {
 | 
					                if (passenger instanceof Player player) {
 | 
				
			||||||
                    //Teleport any creatures leashed by the player in a 15-block range
 | 
					                    //Teleport any creatures leashed by the player in a 15-block range
 | 
				
			||||||
                    teleportLeashedCreatures(player, origin, target);
 | 
					                    teleportLeashedCreatures(player, origin, target);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                TeleportHelper.teleportAndAddPassenger(entity, passenger, exitRotation);
 | 
					                teleportAndAddPassenger(entity, passenger, exitRotation, newVelocity);
 | 
				
			||||||
            }, passenger instanceof Player ? Stargate.getGateConfig().waitForPlayerAfterTeleportDelay() : 0);
 | 
					            }, passenger instanceof Player ? Stargate.getGateConfig().waitForPlayerAfterTeleportDelay() : 0);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user