Implemented conversion between ItemStack and LinkedBeaconTeleporterItem
This commit is contained in:
		
							parent
							
								
									48f961fc9c
								
							
						
					
					
						commit
						59e8768ddb
					
				@ -1,8 +1,16 @@
 | 
			
		||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
 | 
			
		||||
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.meta.ItemMeta;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.regex.Matcher;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
public class LinkedBeaconTeleporterItem extends LinkedBeaconTeleporter {
 | 
			
		||||
    // INFO: Save to store as its always cloned by bukkit
 | 
			
		||||
    ItemStack item;
 | 
			
		||||
 | 
			
		||||
    public LinkedBeaconTeleporterItem(String teleporterId, ItemStack item) {
 | 
			
		||||
@ -14,4 +22,13 @@ public class LinkedBeaconTeleporterItem extends LinkedBeaconTeleporter {
 | 
			
		||||
    public ItemStack item(){
 | 
			
		||||
        return item;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Conversion methods
 | 
			
		||||
    public ItemStack toItemStack(){
 | 
			
		||||
        return Main.lbtManager.getItemStackFromLbtItem(this);
 | 
			
		||||
    }
 | 
			
		||||
    public static LinkedBeaconTeleporter getFromItemStack(ItemStack itemStack){
 | 
			
		||||
        return Main.lbtManager.getLbtItemFromItemStack(itemStack);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -19,9 +19,18 @@ public class LinkedBeaconTeleporterManager {
 | 
			
		||||
    HashMap<String, List<LinkedBeaconTeleporterBlock>> linkedBeaconTeleporterById = new HashMap();
 | 
			
		||||
    HashMap<String, LinkedBeaconTeleporterBlock> linkedBeaconTeleporterByLoc = new HashMap();
 | 
			
		||||
 | 
			
		||||
    // Regex to match item-name&lore and extract id (group 1)
 | 
			
		||||
    String regex;
 | 
			
		||||
 | 
			
		||||
    public LinkedBeaconTeleporterManager(){
 | 
			
		||||
        Main.log.info("Loading LinkedBeaconTeleporter from config..");
 | 
			
		||||
 | 
			
		||||
        // Construct search item-regex
 | 
			
		||||
        regex = constructRegex(
 | 
			
		||||
                Main.config.getString("item.name"),
 | 
			
		||||
                Main.config.getStringList("item.lore")
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Load teleporters
 | 
			
		||||
        for(String teleporterId : Main.data.getKeys(false)){
 | 
			
		||||
            ConfigurationSection teleportersData = Main.data.getConfigurationSection(teleporterId);
 | 
			
		||||
@ -66,4 +75,71 @@ public class LinkedBeaconTeleporterManager {
 | 
			
		||||
 | 
			
		||||
        Main.log.info("All done!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Conversion-methods
 | 
			
		||||
    public ItemStack getItemStackFromLbtItem(LinkedBeaconTeleporterItem lbtItem){
 | 
			
		||||
        ItemStack item = new ItemStack(Material.BEACON);
 | 
			
		||||
        ItemMeta itemMeta = item.getItemMeta();
 | 
			
		||||
 | 
			
		||||
        // Get config-values
 | 
			
		||||
        String name = Main.config.getString("item.name");
 | 
			
		||||
        List<String> lore = Main.config.getStringList("item.lore");
 | 
			
		||||
 | 
			
		||||
        // Replace parameters
 | 
			
		||||
        name = name.replace("%id%", lbtItem.teleporterId);
 | 
			
		||||
        for(int i=0; i<lore.size(); i++){
 | 
			
		||||
            lore.set(i,
 | 
			
		||||
                    lore.get(i).replace("%id%", lbtItem.teleporterId)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Set meta
 | 
			
		||||
        itemMeta.setDisplayName(name);
 | 
			
		||||
        itemMeta.setLore(lore);
 | 
			
		||||
 | 
			
		||||
        return item;
 | 
			
		||||
    }
 | 
			
		||||
    public LinkedBeaconTeleporterItem getLbtItemFromItemStack(ItemStack itemStack){
 | 
			
		||||
        // Serialize
 | 
			
		||||
        String nameAndLore = serialiseBeaconItem(
 | 
			
		||||
                itemStack.getI18NDisplayName(),
 | 
			
		||||
                itemStack.getLore()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Regex match
 | 
			
		||||
        Pattern pattern = Pattern.compile(regex);
 | 
			
		||||
        Matcher matcher = pattern.matcher(nameAndLore);
 | 
			
		||||
        if(!matcher.find())
 | 
			
		||||
            // No data
 | 
			
		||||
            return null;
 | 
			
		||||
 | 
			
		||||
        LinkedBeaconTeleporterItem lbtItem = new LinkedBeaconTeleporterItem(
 | 
			
		||||
                matcher.group(1),
 | 
			
		||||
                itemStack
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        return lbtItem;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    String constructRegex(String name, List<String> lore){
 | 
			
		||||
        // Serialize
 | 
			
		||||
        String regex = serialiseBeaconItem(name, lore);
 | 
			
		||||
 | 
			
		||||
        // Wrap in regex-quotes
 | 
			
		||||
        regex = "\\Q"+ regex +"\\E";
 | 
			
		||||
        // Exclude id from regex-quotes and create group
 | 
			
		||||
        regex = regex.replace("%id%", "\\E(.*)\\Q");
 | 
			
		||||
 | 
			
		||||
        return regex;
 | 
			
		||||
    }
 | 
			
		||||
    String serialiseBeaconItem(String name, List<String> lore){
 | 
			
		||||
        // get name and remove control-chars
 | 
			
		||||
        String str = name.replace("\\", "\\\\");
 | 
			
		||||
        for (String loreLine : lore) {
 | 
			
		||||
            // get lore-lines and remove control-chars
 | 
			
		||||
            str += "\n"+ loreLine.replace("\\", "\\\\");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return str;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user