Migrated logic to objects
This commit is contained in:
parent
b593a22568
commit
cf061f9d75
@ -1,6 +1,7 @@
|
|||||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
|
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
|
||||||
|
|
||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
|
||||||
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -19,9 +20,18 @@ public abstract class LinkedBeaconTeleporter {
|
|||||||
|
|
||||||
LinkedBeaconTeleporter(){
|
LinkedBeaconTeleporter(){
|
||||||
this.teleporterId = Function.randomString("abcdefghijklmnopqrstuvwxyz0123456789", 10);
|
this.teleporterId = Function.randomString("abcdefghijklmnopqrstuvwxyz0123456789", 10);
|
||||||
|
|
||||||
|
linkedBeaconTeleporters = new ArrayList<>();
|
||||||
}
|
}
|
||||||
public LinkedBeaconTeleporter(String teleporterId){
|
public LinkedBeaconTeleporter(String teleporterId){
|
||||||
this.teleporterId = teleporterId;
|
this.teleporterId = teleporterId;
|
||||||
|
|
||||||
|
// Check if id exists
|
||||||
|
linkedBeaconTeleporters = Main.lbtManager.placedLBTsById.get(this.teleporterId());
|
||||||
|
if(linkedBeaconTeleporters == null){
|
||||||
|
// Create empty if not found
|
||||||
|
linkedBeaconTeleporters = new ArrayList<>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String teleporterId(){
|
public String teleporterId(){
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
|
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
|
||||||
|
|
||||||
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
|
||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -24,13 +25,23 @@ public class LinkedBeaconTeleporterBlock extends LinkedBeaconTeleporter {
|
|||||||
|
|
||||||
|
|
||||||
public LinkedBeaconTeleporterItem break_(BlockBreakEvent e){
|
public LinkedBeaconTeleporterItem break_(BlockBreakEvent e){
|
||||||
|
Location loc = this.block().getLocation();
|
||||||
|
|
||||||
// Dont drop anything
|
// Dont drop anything
|
||||||
e.setDropItems(false);
|
e.setDropItems(false);
|
||||||
e.setExpToDrop(0);
|
e.setExpToDrop(0);
|
||||||
|
|
||||||
LinkedBeaconTeleporterItem lbtItem = Main.lbtManager.breakLbtBlock(this);
|
// Remove from list
|
||||||
|
this.linkedBeaconTeleporters.remove(this);
|
||||||
|
// TODO: Remove from placedLBTsById when empty?
|
||||||
|
|
||||||
Location loc = this.block().getLocation();
|
// Remove from loc
|
||||||
|
Main.lbtManager.placedLBTByLoc.remove(
|
||||||
|
Function.serialiseBlockLocation(loc)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Item from block
|
||||||
|
LinkedBeaconTeleporterItem lbtItem = new LinkedBeaconTeleporterItem(this.teleporterId());
|
||||||
|
|
||||||
// Drop custom-item
|
// Drop custom-item
|
||||||
if(e.getPlayer().getGameMode() != GameMode.CREATIVE)
|
if(e.getPlayer().getGameMode() != GameMode.CREATIVE)
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
|
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
|
||||||
|
|
||||||
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
|
||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@ -39,7 +43,24 @@ public class LinkedBeaconTeleporterItem extends LinkedBeaconTeleporter {
|
|||||||
|
|
||||||
|
|
||||||
public LinkedBeaconTeleporterBlock place(BlockPlaceEvent e){
|
public LinkedBeaconTeleporterBlock place(BlockPlaceEvent e){
|
||||||
LinkedBeaconTeleporterBlock lbtBlock = Main.lbtManager.placeLbtItem(this, e.getBlock());
|
Block block = e.getBlock();
|
||||||
|
Location loc = block.getLocation();
|
||||||
|
|
||||||
|
// Block from item
|
||||||
|
LinkedBeaconTeleporterBlock lbtBlock = new LinkedBeaconTeleporterBlock(this.teleporterId(), block);
|
||||||
|
// Add to list
|
||||||
|
this.linkedBeaconTeleporters.add(lbtBlock);
|
||||||
|
|
||||||
|
// Add to id if not exists
|
||||||
|
if(!Main.lbtManager.placedLBTsById.containsKey(this.teleporterId))
|
||||||
|
Main.lbtManager.placedLBTsById.put(this.teleporterId, this.linkedBeaconTeleporters);
|
||||||
|
|
||||||
|
// Add to location
|
||||||
|
Main.lbtManager.placedLBTByLoc.put(
|
||||||
|
Function.serialiseBlockLocation(loc),
|
||||||
|
lbtBlock
|
||||||
|
);
|
||||||
|
|
||||||
return lbtBlock;
|
return lbtBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,8 +19,8 @@ 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<LinkedBeaconTeleporter>> linkedBeaconTeleporterById = new HashMap();
|
public HashMap<String, List<LinkedBeaconTeleporter>> placedLBTsById = new HashMap();
|
||||||
HashMap<String, LinkedBeaconTeleporterBlock> linkedBeaconTeleporterByLoc = new HashMap();
|
public HashMap<String, LinkedBeaconTeleporterBlock> placedLBTByLoc = new HashMap();
|
||||||
|
|
||||||
// Regex to match item-name&lore and extract id (group 1)
|
// Regex to match item-name&lore and extract id (group 1)
|
||||||
String regex;
|
String regex;
|
||||||
@ -71,56 +71,16 @@ public class LinkedBeaconTeleporterManager {
|
|||||||
lbtBlock.linkedBeaconTeleporters = linkedBeaconTeleporters;
|
lbtBlock.linkedBeaconTeleporters = linkedBeaconTeleporters;
|
||||||
|
|
||||||
// Save to loc-list
|
// Save to loc-list
|
||||||
linkedBeaconTeleporterByLoc.put(serializedLoc, lbtBlock);
|
placedLBTByLoc.put(serializedLoc, lbtBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save list to id-list
|
// Save list to id-list
|
||||||
linkedBeaconTeleporterById.put(teleporterId, linkedBeaconTeleporters);
|
placedLBTsById.put(teleporterId, linkedBeaconTeleporters);
|
||||||
}
|
}
|
||||||
|
|
||||||
Main.log.info("All done!");
|
Main.log.info("All done!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public LinkedBeaconTeleporterBlock placeLbtItem(LinkedBeaconTeleporterItem lbtItem, Block block){
|
|
||||||
// Check if id already exists
|
|
||||||
List<LinkedBeaconTeleporter> lbtBlocks = linkedBeaconTeleporterById.get(lbtItem.teleporterId());
|
|
||||||
if(lbtBlocks == null){
|
|
||||||
// Create empty if not found
|
|
||||||
lbtBlocks = new ArrayList<>();
|
|
||||||
linkedBeaconTeleporterById.put(lbtItem.teleporterId(), lbtBlocks);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Block from item
|
|
||||||
LinkedBeaconTeleporterBlock lbtBlock = new LinkedBeaconTeleporterBlock(lbtItem.teleporterId(), block);
|
|
||||||
|
|
||||||
// Add to list
|
|
||||||
lbtBlocks.add(lbtBlock);
|
|
||||||
// Add to location
|
|
||||||
linkedBeaconTeleporterByLoc.put(
|
|
||||||
Function.serialiseBlockLocation(block.getLocation()),
|
|
||||||
lbtBlock
|
|
||||||
);
|
|
||||||
|
|
||||||
return lbtBlock;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LinkedBeaconTeleporterItem breakLbtBlock(LinkedBeaconTeleporterBlock lbtBlock){
|
|
||||||
// Get list by id
|
|
||||||
List<LinkedBeaconTeleporter> lbtBlocks = linkedBeaconTeleporterById.get(lbtBlock.teleporterId());
|
|
||||||
|
|
||||||
// Remove from list
|
|
||||||
lbtBlocks.remove(lbtBlock);
|
|
||||||
// Remove from location
|
|
||||||
linkedBeaconTeleporterByLoc.remove(
|
|
||||||
Function.serialiseBlockLocation(lbtBlock.block().getLocation())
|
|
||||||
);
|
|
||||||
|
|
||||||
// Item from block
|
|
||||||
LinkedBeaconTeleporterItem lbtItem = new LinkedBeaconTeleporterItem(lbtBlock.teleporterId());
|
|
||||||
|
|
||||||
return lbtItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
void constructAndAddRecipes(){
|
void constructAndAddRecipes(){
|
||||||
// Create result-item
|
// Create result-item
|
||||||
ItemStack item = getItemStackFromData("-");
|
ItemStack item = getItemStackFromData("-");
|
||||||
@ -195,10 +155,10 @@ public class LinkedBeaconTeleporterManager {
|
|||||||
// Serialize
|
// Serialize
|
||||||
String serializedLoc = Function.serialiseBlockLocation(loc);
|
String serializedLoc = Function.serialiseBlockLocation(loc);
|
||||||
|
|
||||||
return linkedBeaconTeleporterByLoc.get(serializedLoc);
|
return placedLBTByLoc.get(serializedLoc);
|
||||||
}
|
}
|
||||||
public List<LinkedBeaconTeleporter> getLbtBlocksFromTeleportId(String teleportId){
|
public List<LinkedBeaconTeleporter> getLbtBlocksFromTeleportId(String teleportId){
|
||||||
return linkedBeaconTeleporterById.get(teleportId);
|
return placedLBTsById.get(teleportId);
|
||||||
}
|
}
|
||||||
|
|
||||||
String constructRegex(String name, List<String> lore){
|
String constructRegex(String name, List<String> lore){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user