mirror of
https://github.com/sekwah41/Advanced-Portals.git
synced 2024-11-18 00:25:33 +01:00
feat: add destination and portal services
This commit is contained in:
parent
4f78ef1578
commit
423aa6879d
@ -74,7 +74,7 @@ public class AdvancedPortalsCore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerPortalCommand(CommandRegister commandRegister) {
|
private void registerPortalCommand(CommandRegister commandRegister) {
|
||||||
this.portalCommand = new CommandWithSubCommands();
|
this.portalCommand = new CommandWithSubCommands(this);
|
||||||
|
|
||||||
// TODO remove once annotations are done
|
// TODO remove once annotations are done
|
||||||
this.portalCommand.registerSubCommand("version", new VersionSubCommand());
|
this.portalCommand.registerSubCommand("version", new VersionSubCommand());
|
||||||
@ -91,7 +91,7 @@ public class AdvancedPortalsCore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerDestinationCommand(CommandRegister commandRegister) {
|
private void registerDestinationCommand(CommandRegister commandRegister) {
|
||||||
this.destiCommand = new CommandWithSubCommands();
|
this.destiCommand = new CommandWithSubCommands(this);
|
||||||
|
|
||||||
// TODO remove once annotations are done
|
// TODO remove once annotations are done
|
||||||
this.destiCommand.registerSubCommand("create", new CreateDestiSubCommand());
|
this.destiCommand.registerSubCommand("create", new CreateDestiSubCommand());
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.sekwah.advancedportals.core.commands;
|
package com.sekwah.advancedportals.core.commands;
|
||||||
|
|
||||||
|
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
|
||||||
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
|
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
|
||||||
import com.sekwah.advancedportals.core.registry.SubCommandRegistry;
|
import com.sekwah.advancedportals.core.registry.SubCommandRegistry;
|
||||||
import com.sekwah.advancedportals.core.util.Lang;
|
import com.sekwah.advancedportals.core.util.Lang;
|
||||||
@ -13,12 +14,15 @@ public class CommandWithSubCommands implements CommandTemplate {
|
|||||||
private final SubCommandRegistry subCommandRegistry;
|
private final SubCommandRegistry subCommandRegistry;
|
||||||
|
|
||||||
private final int subCommandsPerPage = 7;
|
private final int subCommandsPerPage = 7;
|
||||||
|
private final AdvancedPortalsCore pluginCore;
|
||||||
|
|
||||||
public CommandWithSubCommands() {
|
public CommandWithSubCommands(AdvancedPortalsCore advancedPortalsCore) {
|
||||||
this.subCommandRegistry = new SubCommandRegistry();
|
this.subCommandRegistry = new SubCommandRegistry();
|
||||||
|
this.pluginCore = advancedPortalsCore;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean registerSubCommand(String arg, SubCommand subCommand, String... aliasArgs) {
|
public boolean registerSubCommand(String arg, SubCommand subCommand, String... aliasArgs) {
|
||||||
|
pluginCore.getModule().getInjector().injectMembers(subCommand);
|
||||||
boolean hasRegistered = false;
|
boolean hasRegistered = false;
|
||||||
for(String additionalArg : aliasArgs) {
|
for(String additionalArg : aliasArgs) {
|
||||||
hasRegistered = hasRegistered || this.subCommandRegistry.registerSubCommand(additionalArg,subCommand);
|
hasRegistered = hasRegistered || this.subCommandRegistry.registerSubCommand(additionalArg,subCommand);
|
||||||
|
@ -6,7 +6,7 @@ import com.sekwah.advancedportals.core.config.Config;
|
|||||||
import com.sekwah.advancedportals.core.config.ConfigProvider;
|
import com.sekwah.advancedportals.core.config.ConfigProvider;
|
||||||
import com.sekwah.advancedportals.core.data.DataStorage;
|
import com.sekwah.advancedportals.core.data.DataStorage;
|
||||||
import com.sekwah.advancedportals.core.repository.ConfigRepository;
|
import com.sekwah.advancedportals.core.repository.ConfigRepository;
|
||||||
import com.sekwah.advancedportals.core.repository.ConfigRepositoryImpl;
|
import com.sekwah.advancedportals.core.repository.impl.ConfigRepositoryImpl;
|
||||||
import com.sekwah.advancedportals.core.util.InfoLogger;
|
import com.sekwah.advancedportals.core.util.InfoLogger;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
package com.sekwah.advancedportals.core.repository;
|
package com.sekwah.advancedportals.core.repository;
|
||||||
|
|
||||||
public interface IDestinationRepository<T> extends IJsonRepository<T> {
|
import com.sekwah.advancedportals.core.destination.Destination;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public interface IDestinationRepository extends IJsonRepository<Destination> {
|
||||||
|
void addDestination(String name, Destination desti) throws IOException;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.sekwah.advancedportals.core.repository;
|
package com.sekwah.advancedportals.core.repository;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
public interface IJsonRepository<T> {
|
public interface IJsonRepository<T> {
|
||||||
@ -11,4 +12,8 @@ public interface IJsonRepository<T> {
|
|||||||
boolean delete(String name);
|
boolean delete(String name);
|
||||||
|
|
||||||
boolean update(String name, T t);
|
boolean update(String name, T t);
|
||||||
|
|
||||||
|
T get(String name);
|
||||||
|
|
||||||
|
ImmutableMap<String, T> getAll();
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package com.sekwah.advancedportals.core.repository;
|
package com.sekwah.advancedportals.core.repository.impl;
|
||||||
|
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.sekwah.advancedportals.core.config.Config;
|
import com.sekwah.advancedportals.core.config.Config;
|
||||||
import com.sekwah.advancedportals.core.data.DataStorage;
|
import com.sekwah.advancedportals.core.data.DataStorage;
|
||||||
|
import com.sekwah.advancedportals.core.repository.ConfigRepository;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
package com.sekwah.advancedportals.core.repository;
|
package com.sekwah.advancedportals.core.repository.impl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.sekwah.advancedportals.core.destination.Destination;
|
import com.sekwah.advancedportals.core.destination.Destination;
|
||||||
|
import com.sekwah.advancedportals.core.repository.IDestinationRepository;
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
@ -12,21 +13,16 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DestinationRepository implements IDestinationRepository<Destination> {
|
public class DestinationRepositoryImpl implements IDestinationRepository {
|
||||||
private final String fileLocation = "";
|
private final String fileLocation = "";
|
||||||
|
|
||||||
|
|
||||||
private Map<String, Destination> destinationCache = new HashMap<String, Destination>();
|
private Map<String, Destination> destinationCache = new HashMap<String, Destination>();
|
||||||
|
|
||||||
/*Is there any reason to load it into the array if it's not been used or connected? Q for Sekwah*/
|
public void addDestination(String name, Destination destination) throws IOException {
|
||||||
public void AddDestination(String name, Destination destination) throws IOException {
|
|
||||||
gson.toJson(destination, new FileWriter(fileLocation + name + ".json"));
|
gson.toJson(destination, new FileWriter(fileLocation + name + ".json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void test() {
|
|
||||||
destinationCache.get("");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean save(String name, Destination destination) {
|
public boolean save(String name, Destination destination) {
|
||||||
return false;
|
return false;
|
||||||
@ -51,7 +47,11 @@ public class DestinationRepository implements IDestinationRepository<Destination
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImmutableMap<String, Destination> get(String s) {
|
public Destination get(String s) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImmutableMap<String, Destination> getAll() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,12 +1,14 @@
|
|||||||
package com.sekwah.advancedportals.core.repository;
|
package com.sekwah.advancedportals.core.repository.impl;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.sekwah.advancedportals.core.data.WorldLocation;
|
import com.sekwah.advancedportals.core.data.WorldLocation;
|
||||||
|
import com.sekwah.advancedportals.core.repository.IPortalRepository;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PortalRepository implements IPortalRepository {
|
public class PortalRepositoryImpl implements IPortalRepository {
|
||||||
|
|
||||||
public String getSelectedPortal(UUID uuid) {
|
public String getSelectedPortal(UUID uuid) {
|
||||||
return null;
|
return null;
|
||||||
@ -31,4 +33,14 @@ public class PortalRepository implements IPortalRepository {
|
|||||||
public boolean update(String name, WorldLocation portalLocation) {
|
public boolean update(String name, WorldLocation portalLocation) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorldLocation get(String name) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutableMap<String, WorldLocation> getAll() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,107 @@
|
|||||||
|
package com.sekwah.advancedportals.core.services;
|
||||||
|
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
|
||||||
|
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
|
||||||
|
import com.sekwah.advancedportals.core.data.DataTag;
|
||||||
|
import com.sekwah.advancedportals.core.data.PlayerLocation;
|
||||||
|
import com.sekwah.advancedportals.core.destination.Destination;
|
||||||
|
import com.sekwah.advancedportals.core.repository.IDestinationRepository;
|
||||||
|
import com.sekwah.advancedportals.core.util.Lang;
|
||||||
|
import com.sekwah.advancedportals.core.warphandler.TagHandler;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles logic for all destination, this is a transient layer so it should
|
||||||
|
* not store any information.
|
||||||
|
*/
|
||||||
|
public class DestinationServices {
|
||||||
|
|
||||||
|
|
||||||
|
private final IDestinationRepository destinationRepository;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private DestinationServices(IDestinationRepository destinationRepository) {
|
||||||
|
this.destinationRepository = destinationRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Response.Creation create(String name, Destination destination) {
|
||||||
|
if (!destinationRepository.containsKey(name)) {
|
||||||
|
destinationRepository.save(name, destination);
|
||||||
|
return Response.Creation.SUCCESS;
|
||||||
|
}
|
||||||
|
return Response.Creation.NAME_IN_USE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean delete(String name) {
|
||||||
|
if (!destinationRepository.containsKey(name)) {
|
||||||
|
destinationRepository.delete(name);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImmutableMap<String, Destination> getDestination() {
|
||||||
|
return destinationRepository.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImmutableMap<String, Destination> getDestinations() {
|
||||||
|
return ImmutableMap.copyOf(destinationRepository.getAll());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public Destination createDesti(String name, PlayerContainer player, PlayerLocation playerLocation, ArrayList<DataTag> tags) {
|
||||||
|
// TODO change to write messages
|
||||||
|
if(name == null || name.equals("")) {
|
||||||
|
player.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translate("desti.error.noname"));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else if(this.destinationRepository.containsKey(name)) {
|
||||||
|
player.sendMessage(Lang.translateColor("messageprefix.positive") + Lang.translate("desti.error.takenname"));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Destination desti = new Destination(playerLocation);
|
||||||
|
for(DataTag portalTag : tags) {
|
||||||
|
desti.setArg(portalTag);
|
||||||
|
}
|
||||||
|
for(DataTag destiTag : tags) {
|
||||||
|
// TODO sort tag handle registry
|
||||||
|
/*TagHandler.Creation<Destination> creation = AdvancedPortalsCore.getDestinationTagRegistry().getCreationHandler(destiTag.NAME);
|
||||||
|
if(creation != null) {
|
||||||
|
creation.created(desti, player, destiTag.VALUE);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.destinationRepository.addDestination(name, desti);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
this.saveDestinations();
|
||||||
|
return desti;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO Change to repository
|
||||||
|
|
||||||
|
public void loadDestinations() {
|
||||||
|
Type type = new TypeToken<HashMap<String, Destination>>() {
|
||||||
|
}.getType();
|
||||||
|
//this.destiHashMap = this.portalsCore.getDataStorage().loadJson(type, "destinations.json");
|
||||||
|
this.saveDestinations();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveDestinations() {
|
||||||
|
/*if (this.destiHashMap == null) {
|
||||||
|
this.destiHashMap = new HashMap<>();
|
||||||
|
}
|
||||||
|
this.portalsCore.getDataStorage().storeJson(this.destiHashMap, "destinations.json");*/
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.sekwah.advancedportals.core.services;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
|
||||||
|
import com.sekwah.advancedportals.core.data.BlockLocation;
|
||||||
|
import com.sekwah.advancedportals.core.data.PlayerLocation;
|
||||||
|
import com.sekwah.advancedportals.core.repository.IPortalRepository;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class PortalServices {
|
||||||
|
|
||||||
|
private final IPortalRepository portalRepository;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public PortalServices(IPortalRepository portalRepository) {
|
||||||
|
this.portalRepository = portalRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSelectedPortal(UUID selectedPlayer, String portal) {
|
||||||
|
//portalRepository.save(selectedPlayer, portal);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeSelectedPortal(UUID uuid) {
|
||||||
|
//selectedPortal.invalidate(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSelectedPosition(UUID uuid, boolean isPos1, BlockLocation portalLocation) {
|
||||||
|
//selectedPositions.put(uuid, isPos1, portalLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeSelectedPosition(UUID uuid, boolean isPos1) {
|
||||||
|
//selectedPositions.remove(uuid, isPos1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeAllSelectedHand(UUID uuid) {
|
||||||
|
//selectedPositions.remove(uuid, true);
|
||||||
|
//selectedPositions.remove(uuid, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void activateCooldown(PlayerContainer player) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void playerLeave(PlayerContainer player) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean inPortalRegion(PlayerLocation loc) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.sekwah.advancedportals.core.services;
|
||||||
|
|
||||||
|
public class Response {
|
||||||
|
|
||||||
|
public enum Creation {
|
||||||
|
SUCCESS,
|
||||||
|
NAME_IN_USE,
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user