Implemented teleporting
This commit is contained in:
		
							parent
							
								
									51e22f2f9e
								
							
						
					
					
						commit
						f03a80cf99
					
				@ -1,9 +1,11 @@
 | 
				
			|||||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters;
 | 
					package eu.ruekov.ruakij.LinkedBeaconTeleporters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent.CustomPlayerMoveEventHandler;
 | 
				
			||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterManager;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterManager;
 | 
				
			||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockBreak;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockBreak;
 | 
				
			||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockPlace;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockPlace;
 | 
				
			||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnCraftItemEvent;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnCraftItemEvent;
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnCustomPlayerMove;
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.configuration.file.FileConfiguration;
 | 
					import org.bukkit.configuration.file.FileConfiguration;
 | 
				
			||||||
import org.bukkit.configuration.file.YamlConfiguration;
 | 
					import org.bukkit.configuration.file.YamlConfiguration;
 | 
				
			||||||
@ -35,6 +37,9 @@ public class Main extends JavaPlugin {
 | 
				
			|||||||
        pluginManager.registerEvents(new OnBlockPlace(), this);
 | 
					        pluginManager.registerEvents(new OnBlockPlace(), this);
 | 
				
			||||||
        pluginManager.registerEvents(new OnCraftItemEvent(), this);
 | 
					        pluginManager.registerEvents(new OnCraftItemEvent(), this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        CustomPlayerMoveEventHandler cpmHandler = new CustomPlayerMoveEventHandler(this, true);
 | 
				
			||||||
 | 
					        cpmHandler.registerListener(new OnCustomPlayerMove());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        loadConfigs();
 | 
					        loadConfigs();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        lbtManager = new LinkedBeaconTeleporterManager();
 | 
					        lbtManager = new LinkedBeaconTeleporterManager();
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					package eu.ruekov.ruakij.LinkedBeaconTeleporters.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent.CustomPlayerMoveEvent;
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent.CustomPlayerMoveEventListener;
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterBlock;
 | 
				
			||||||
 | 
					import org.bukkit.Material;
 | 
				
			||||||
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					import org.bukkit.util.Vector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class OnCustomPlayerMove implements CustomPlayerMoveEventListener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static HashMap<UUID, LinkedBeaconTeleporterBlock> playerBeaconLocation = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void tick(CustomPlayerMoveEvent e) {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void locationChange(CustomPlayerMoveEvent e) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Player p = e.player();
 | 
				
			||||||
 | 
					        UUID uuid = p.getUniqueId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // If player found in ignoreList, remove
 | 
				
			||||||
 | 
					        if(playerBeaconLocation.containsKey(uuid))
 | 
				
			||||||
 | 
					            playerBeaconLocation.remove(uuid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if player is on-top of a beacon
 | 
				
			||||||
 | 
					        Block block = Function.searchForMaterial(
 | 
				
			||||||
 | 
					                p.getLocation().add(0, -1, 0),
 | 
				
			||||||
 | 
					                new Vector(0, -1, 0),
 | 
				
			||||||
 | 
					                Material.BEACON,
 | 
				
			||||||
 | 
					                Function.transparentMaterials
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Skip if not found
 | 
				
			||||||
 | 
					        if(block == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: Check if beacon is active
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if beacon is a LinkedBeaconTeleporter
 | 
				
			||||||
 | 
					        LinkedBeaconTeleporterBlock lbtBlock = Main.lbtManager.getLbtBlockFromLocation(block.getLocation());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Ignore if not found
 | 
				
			||||||
 | 
					        if(lbtBlock == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if player should be ignored on this LinkedBeaconTeleporter
 | 
				
			||||||
 | 
					        if(playerBeaconLocation.get(uuid) != null && playerBeaconLocation.get(uuid) == lbtBlock) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Find partnering Beacon
 | 
				
			||||||
 | 
					        List<LinkedBeaconTeleporterBlock> lbtBlocks = Main.lbtManager.getLbtBlocksFromTeleportId(lbtBlock.teleporterId());
 | 
				
			||||||
 | 
					        if(lbtBlocks == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Get first partner thats not our current-block
 | 
				
			||||||
 | 
					        LinkedBeaconTeleporterBlock lbtBlockPartner = null;
 | 
				
			||||||
 | 
					        for(LinkedBeaconTeleporterBlock lbtBlockTmp: lbtBlocks){
 | 
				
			||||||
 | 
					            if(lbtBlockTmp != lbtBlocks){
 | 
				
			||||||
 | 
					                lbtBlockPartner = lbtBlockTmp;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(lbtBlockPartner == null){
 | 
				
			||||||
 | 
					            // No other partner
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else{
 | 
				
			||||||
 | 
					            // Set player as ignored on target-LinkedBeaconTeleporter (so he wont trigger the teleport again)
 | 
				
			||||||
 | 
					            playerBeaconLocation.put(uuid, lbtBlockPartner);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Teleport
 | 
				
			||||||
 | 
					            e.player().teleport(
 | 
				
			||||||
 | 
					                    lbtBlockPartner.block().getLocation().add(0, 1, 0)
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user