Advanced-Portals/core/src/main/java/com/sekwah/advancedportals/core/destination/Destination.java

125 lines
4.2 KiB
Java
Raw Normal View History

2023-04-07 01:28:49 +02:00
package com.sekwah.advancedportals.core.destination;
import com.google.gson.annotations.SerializedName;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.registry.TagTarget;
import com.sekwah.advancedportals.core.serializeddata.DataTag;
import com.sekwah.advancedportals.core.serializeddata.PlayerLocation;
2023-04-07 01:28:49 +02:00
import com.sekwah.advancedportals.core.registry.TagRegistry;
import com.sekwah.advancedportals.core.warphandler.ActivationData;
import com.sekwah.advancedportals.core.warphandler.Tag;
2023-04-07 01:28:49 +02:00
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Possibly look at adding the ability to add some tags to destinations such as permissions. Would make it easier
* to add permissions to block access to certain areas and such. Could be a different permission system or just
* it takes the tags on the destination and automatically applies them when a portal wants to warp to there.
* (Of course it would not work cross server unless the data was communicated and checked first however that
* could effect performance and would definitely effect speed)
*
* @author sekwah41
*/
public class Destination implements TagTarget {
2023-04-07 01:28:49 +02:00
@Inject
transient TagRegistry tagRegistry;
2023-04-07 01:28:49 +02:00
@SerializedName("l")
private PlayerLocation loc;
@SerializedName("a")
2023-12-07 04:58:56 +01:00
private HashMap<String, String[]> args = new HashMap<>();
2023-04-07 01:28:49 +02:00
private transient Set<String> argsCol;
public Destination(PlayerLocation loc) {
this.loc = loc;
}
@Override
public String[] getArgValues(String argName) {
2023-04-07 01:28:49 +02:00
return this.args.get(argName);
}
@Override
public void setArgValues(String argName, String[] argValue) {
2023-04-07 01:28:49 +02:00
this.args.put(argName, argValue);
}
@Override
public void addArg(String argName, String argValues) {
}
public void setArgValues(DataTag portalTag) {
this.setArgValues(portalTag.NAME, portalTag.VALUES);
2023-04-07 01:28:49 +02:00
}
public void removeArg(String arg) {
this.args.remove(arg);
}
public boolean activate(PlayerContainer player) {
2024-02-05 03:17:44 +01:00
ActivationData data = new ActivationData(false);
2023-04-07 01:28:49 +02:00
this.portalActivate(player, data);
this.postActivate(player, data);
return true;
}
public boolean portalActivate(PlayerContainer player, ActivationData data) {
DataTag[] destiTags = new DataTag[args.size()];
int i = 0;
for(Map.Entry<String, String[]> entry : args.entrySet()) {
2023-04-07 01:28:49 +02:00
destiTags[i++] = new DataTag(entry.getKey(), entry.getValue());
}
for(DataTag destiTag : destiTags) {
Tag.Activation activationHandler = tagRegistry.getActivationHandler(destiTag.NAME);
2023-04-07 01:28:49 +02:00
if(activationHandler != null) {
activationHandler.preActivated(this, player, data, this.getArgValues(destiTag.NAME));
2023-04-07 01:28:49 +02:00
}
}
for(DataTag destiTag : destiTags) {
Tag.Activation activationHandler = tagRegistry.getActivationHandler(destiTag.NAME);
2023-04-07 01:28:49 +02:00
if(activationHandler != null) {
activationHandler.activated(this, player, data, this.getArgValues(destiTag.NAME));
2023-04-07 01:28:49 +02:00
}
}
return true;
}
public void postActivate(PlayerContainer player, ActivationData data) {
DataTag[] destiTags = new DataTag[args.size()];
int i = 0;
for(Map.Entry<String, String[]> entry : args.entrySet()) {
2023-04-07 01:28:49 +02:00
destiTags[i++] = new DataTag(entry.getKey(), entry.getValue());
}
for(DataTag destiTag : destiTags) {
Tag.Activation activationHandler = tagRegistry.getActivationHandler(destiTag.NAME);
2023-04-07 01:28:49 +02:00
if(activationHandler != null) {
activationHandler.postActivated(this, player, data, this.getArgValues(destiTag.NAME));
2023-04-07 01:28:49 +02:00
}
}
}
public ArrayList<DataTag> getArgs() {
ArrayList<DataTag> tagList = new ArrayList<>();
for(Map.Entry<String, String[]> entry : this.args.entrySet()){
2023-04-07 01:28:49 +02:00
tagList.add(new DataTag(entry.getKey(), entry.getValue()));
}
return tagList;
}
2023-12-12 04:53:37 +01:00
public PlayerLocation getLoc() {
return loc;
}
public void setLoc(PlayerLocation loc) {
this.loc = loc;
}
2023-04-07 01:28:49 +02:00
}