Implemented partner-list saved on LinkedBeaconTeleporter
This commit is contained in:
		
							parent
							
								
									f03a80cf99
								
							
						
					
					
						commit
						3d602c526d
					
				@ -3,6 +3,9 @@ package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
 | 
				
			|||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Describes a placed-beacon-teleporter in the world
 | 
					 * Describes a placed-beacon-teleporter in the world
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -11,6 +14,9 @@ public abstract class LinkedBeaconTeleporter {
 | 
				
			|||||||
    // Persistent id for linked-beacons
 | 
					    // Persistent id for linked-beacons
 | 
				
			||||||
    public String teleporterId;
 | 
					    public String teleporterId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // List of all linkedBeaconTeleporters with same teleporterId (real Type is usually ..Block, because linked Items are temporary constructs are useless)
 | 
				
			||||||
 | 
					    protected List<LinkedBeaconTeleporter> linkedBeaconTeleporters = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LinkedBeaconTeleporter(){
 | 
					    LinkedBeaconTeleporter(){
 | 
				
			||||||
        this.teleporterId = Function.randomString("abcdefghijklmnopqrstuvwxyz0123456789", 10);
 | 
					        this.teleporterId = Function.randomString("abcdefghijklmnopqrstuvwxyz0123456789", 10);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -21,4 +27,8 @@ public abstract class LinkedBeaconTeleporter {
 | 
				
			|||||||
    public String teleporterId(){
 | 
					    public String teleporterId(){
 | 
				
			||||||
        return teleporterId;
 | 
					        return teleporterId;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<LinkedBeaconTeleporter> linkedBeaconTeleporters(){
 | 
				
			||||||
 | 
					        return linkedBeaconTeleporters;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@ import java.util.regex.Pattern;
 | 
				
			|||||||
public class LinkedBeaconTeleporterManager {
 | 
					public class LinkedBeaconTeleporterManager {
 | 
				
			||||||
    // Stores all placed Beacon-Teleporters for fast access
 | 
					    // Stores all placed Beacon-Teleporters for fast access
 | 
				
			||||||
    // TODO: Evaluate necessity of 2 HashMaps with main reason of performance
 | 
					    // TODO: Evaluate necessity of 2 HashMaps with main reason of performance
 | 
				
			||||||
    HashMap<String, List<LinkedBeaconTeleporterBlock>> linkedBeaconTeleporterById = new HashMap();
 | 
					    HashMap<String, List<LinkedBeaconTeleporter>> linkedBeaconTeleporterById = new HashMap();
 | 
				
			||||||
    HashMap<String, LinkedBeaconTeleporterBlock> linkedBeaconTeleporterByLoc = new HashMap();
 | 
					    HashMap<String, LinkedBeaconTeleporterBlock> linkedBeaconTeleporterByLoc = new HashMap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Regex to match item-name&lore and extract id (group 1)
 | 
					    // Regex to match item-name&lore and extract id (group 1)
 | 
				
			||||||
@ -42,7 +42,7 @@ public class LinkedBeaconTeleporterManager {
 | 
				
			|||||||
            ConfigurationSection teleportersData = Main.data.getConfigurationSection(teleporterId);
 | 
					            ConfigurationSection teleportersData = Main.data.getConfigurationSection(teleporterId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // New list for this id
 | 
					            // New list for this id
 | 
				
			||||||
            ArrayList<LinkedBeaconTeleporterBlock> lbtBlocks = new ArrayList();
 | 
					            List<LinkedBeaconTeleporter> linkedBeaconTeleporters = new ArrayList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for(String blockId : teleportersData.getKeys(false)) {
 | 
					            for(String blockId : teleportersData.getKeys(false)) {
 | 
				
			||||||
                ConfigurationSection teleporterData = teleportersData.getConfigurationSection(blockId);
 | 
					                ConfigurationSection teleporterData = teleportersData.getConfigurationSection(blockId);
 | 
				
			||||||
@ -67,16 +67,15 @@ public class LinkedBeaconTeleporterManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                // Construct block
 | 
					                // Construct block
 | 
				
			||||||
                LinkedBeaconTeleporterBlock lbtBlock = new LinkedBeaconTeleporterBlock(teleporterId, block);
 | 
					                LinkedBeaconTeleporterBlock lbtBlock = new LinkedBeaconTeleporterBlock(teleporterId, block);
 | 
				
			||||||
 | 
					                // Write reference of list
 | 
				
			||||||
                // Add block to id-list
 | 
					                lbtBlock.linkedBeaconTeleporters = linkedBeaconTeleporters;
 | 
				
			||||||
                lbtBlocks.add(lbtBlock);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Save to loc-list
 | 
					                // Save to loc-list
 | 
				
			||||||
                linkedBeaconTeleporterByLoc.put(serializedLoc, lbtBlock);
 | 
					                linkedBeaconTeleporterByLoc.put(serializedLoc, lbtBlock);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Save list to id-list
 | 
					            // Save list to id-list
 | 
				
			||||||
            linkedBeaconTeleporterById.put(teleporterId, lbtBlocks);
 | 
					            linkedBeaconTeleporterById.put(teleporterId, linkedBeaconTeleporters);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Main.log.info("All done!");
 | 
					        Main.log.info("All done!");
 | 
				
			||||||
@ -84,7 +83,7 @@ public class LinkedBeaconTeleporterManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public LinkedBeaconTeleporterBlock placeLbtItem(LinkedBeaconTeleporterItem lbtItem, Block block){
 | 
					    public LinkedBeaconTeleporterBlock placeLbtItem(LinkedBeaconTeleporterItem lbtItem, Block block){
 | 
				
			||||||
        // Check if id already exists
 | 
					        // Check if id already exists
 | 
				
			||||||
        List<LinkedBeaconTeleporterBlock> lbtBlocks = linkedBeaconTeleporterById.get(lbtItem.teleporterId());
 | 
					        List<LinkedBeaconTeleporter> lbtBlocks = linkedBeaconTeleporterById.get(lbtItem.teleporterId());
 | 
				
			||||||
        if(lbtBlocks == null){
 | 
					        if(lbtBlocks == null){
 | 
				
			||||||
            // Create empty if not found
 | 
					            // Create empty if not found
 | 
				
			||||||
            lbtBlocks = new ArrayList<>();
 | 
					            lbtBlocks = new ArrayList<>();
 | 
				
			||||||
@ -107,7 +106,7 @@ public class LinkedBeaconTeleporterManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public LinkedBeaconTeleporterItem breakLbtBlock(LinkedBeaconTeleporterBlock lbtBlock){
 | 
					    public LinkedBeaconTeleporterItem breakLbtBlock(LinkedBeaconTeleporterBlock lbtBlock){
 | 
				
			||||||
        // Get list by id
 | 
					        // Get list by id
 | 
				
			||||||
        List<LinkedBeaconTeleporterBlock> lbtBlocks = linkedBeaconTeleporterById.get(lbtBlock.teleporterId());
 | 
					        List<LinkedBeaconTeleporter> lbtBlocks = linkedBeaconTeleporterById.get(lbtBlock.teleporterId());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Remove from list
 | 
					        // Remove from list
 | 
				
			||||||
        lbtBlocks.remove(lbtBlock);
 | 
					        lbtBlocks.remove(lbtBlock);
 | 
				
			||||||
@ -198,7 +197,7 @@ public class LinkedBeaconTeleporterManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return linkedBeaconTeleporterByLoc.get(serializedLoc);
 | 
					        return linkedBeaconTeleporterByLoc.get(serializedLoc);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    public List<LinkedBeaconTeleporterBlock> getLbtBlocksFromTeleportId(String teleportId){
 | 
					    public List<LinkedBeaconTeleporter> getLbtBlocksFromTeleportId(String teleportId){
 | 
				
			||||||
        return linkedBeaconTeleporterById.get(teleportId);
 | 
					        return linkedBeaconTeleporterById.get(teleportId);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
 | 
				
			|||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
 | 
				
			||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent.CustomPlayerMoveEvent;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent.CustomPlayerMoveEvent;
 | 
				
			||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent.CustomPlayerMoveEventListener;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent.CustomPlayerMoveEventListener;
 | 
				
			||||||
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporter;
 | 
				
			||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterBlock;
 | 
					import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterBlock;
 | 
				
			||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
@ -52,17 +53,15 @@ public class OnCustomPlayerMove implements CustomPlayerMoveEventListener {
 | 
				
			|||||||
        if(lbtBlock == null) return;
 | 
					        if(lbtBlock == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Check if player should be ignored on this LinkedBeaconTeleporter
 | 
					        // Check if player should be ignored on this LinkedBeaconTeleporter
 | 
				
			||||||
 | 
					        // FIXME: Will remove player from list, even though he should be ignored :/
 | 
				
			||||||
        if(playerBeaconLocation.get(uuid) != null && playerBeaconLocation.get(uuid) == lbtBlock) return;
 | 
					        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
 | 
					        // Get first partner thats not our current-block
 | 
				
			||||||
        LinkedBeaconTeleporterBlock lbtBlockPartner = null;
 | 
					        LinkedBeaconTeleporterBlock lbtBlockPartner = null;
 | 
				
			||||||
        for(LinkedBeaconTeleporterBlock lbtBlockTmp: lbtBlocks){
 | 
					        for(LinkedBeaconTeleporter lbtBlockTmp: lbtBlock.linkedBeaconTeleporters()){
 | 
				
			||||||
            if(lbtBlockTmp != lbtBlocks){
 | 
					            // Upcast as linked-Teleporters are only blocks anyways
 | 
				
			||||||
                lbtBlockPartner = lbtBlockTmp;
 | 
					            if((LinkedBeaconTeleporterBlock)lbtBlockTmp != lbtBlock){
 | 
				
			||||||
 | 
					                lbtBlockPartner = (LinkedBeaconTeleporterBlock)lbtBlockTmp;
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -75,7 +74,7 @@ public class OnCustomPlayerMove implements CustomPlayerMoveEventListener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // Teleport
 | 
					            // Teleport
 | 
				
			||||||
            e.player().teleport(
 | 
					            e.player().teleport(
 | 
				
			||||||
                    lbtBlockPartner.block().getLocation().add(0, 1, 0)
 | 
					                    lbtBlockPartner.block().getLocation().add(0.5, 1, 0.5)
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user