112 lines
3.8 KiB
Java
112 lines
3.8 KiB
Java
package com.sekwah.advancedportals.core.tags.activation;
|
|
|
|
import com.google.inject.Inject;
|
|
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
|
|
import com.sekwah.advancedportals.core.destination.Destination;
|
|
import com.sekwah.advancedportals.core.effect.WarpEffect;
|
|
import com.sekwah.advancedportals.core.portal.AdvancedPortal;
|
|
import com.sekwah.advancedportals.core.registry.TagTarget;
|
|
import com.sekwah.advancedportals.core.repository.ConfigRepository;
|
|
import com.sekwah.advancedportals.core.services.PlayerDataServices;
|
|
import com.sekwah.advancedportals.core.util.InfoLogger;
|
|
import com.sekwah.advancedportals.core.util.Lang;
|
|
import com.sekwah.advancedportals.core.util.PlayerUtils;
|
|
import com.sekwah.advancedportals.core.warphandler.ActivationData;
|
|
import com.sekwah.advancedportals.core.warphandler.Tag;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
public class CooldownTag implements Tag.Activation, Tag.Creation {
|
|
|
|
@Inject
|
|
transient PlayerDataServices playerDataServices;
|
|
|
|
@Inject
|
|
transient ConfigRepository configRepository;
|
|
|
|
|
|
@Inject
|
|
private InfoLogger infoLogger;
|
|
|
|
public static String TAG_NAME = "cooldown";
|
|
|
|
private final TagType[] tagTypes = new TagType[]{ TagType.PORTAL };
|
|
|
|
@Override
|
|
public TagType[] getTagTypes() {
|
|
return tagTypes;
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return TAG_NAME;
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public String[] getAliases() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public String description() {
|
|
return Lang.translate("tag.cooldown.description");
|
|
}
|
|
|
|
@Override
|
|
public boolean preActivated(TagTarget target, PlayerContainer player, ActivationData activationData, String[] argData) {
|
|
var playerData = playerDataServices.getPlayerData(player);
|
|
if(target instanceof AdvancedPortal portal) {
|
|
var portalName = portal.getName();
|
|
if(playerData.hasPortalCooldown(portalName)) {
|
|
var cooldown = (int) Math.ceil(playerData.getPortalCooldownLeft(portalName) / 1000D);
|
|
player.sendMessage(Lang.translateInsertVariables("portal.cooldown.individual", cooldown,
|
|
Lang.translate(cooldown == 1 ? "time.second" : "time.seconds")));
|
|
if(configRepository.playFailSound()) {
|
|
player.playSound("block.portal.travel", 0.05f, new Random().nextFloat() * 0.4F + 0.8F);
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void postActivated(TagTarget target, PlayerContainer player, ActivationData activationData, String[] argData) {
|
|
if(activationData.hasActivated()) {
|
|
if(target instanceof AdvancedPortal portal) {
|
|
var playerData = playerDataServices.getPlayerData(player);
|
|
try {
|
|
playerData.setPortalCooldown(portal.getName(), Integer.parseInt(argData[0]) * 1000);
|
|
} catch (NumberFormatException e) {
|
|
infoLogger.warning("Cooldown tag failed to set cooldown for portal: " + portal.getName() + " with value: " + argData[0]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean activated(TagTarget target, PlayerContainer player, ActivationData activationData, String[] argData) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean created(TagTarget target, PlayerContainer player, String[] argData) {
|
|
try {
|
|
Integer.parseInt(argData[0]);
|
|
} catch (NumberFormatException e) {
|
|
player.sendMessage(Lang.translate("messageprefix.negative") + Lang.translate("tag.cooldown.fail"));
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void destroyed(TagTarget target, PlayerContainer player, String[] argData) {
|
|
|
|
}
|
|
}
|