mirror of
https://github.com/lax1dude/origin-blacklist-1.8.git
synced 2024-12-21 23:04:14 -08:00
added velocity support, needs testing
This commit is contained in:
parent
c072df950f
commit
50c400c806
|
@ -0,0 +1,29 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.command.CommandManager;
|
||||||
|
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.command.EaglerCommand;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CommandRegisterHelper {
|
||||||
|
|
||||||
|
public static void register(OriginBlacklistPluginVelocity plugin, EaglerCommand cmd) {
|
||||||
|
CommandManager cmdManager = OriginBlacklistPluginVelocity.proxy().getCommandManager();
|
||||||
|
cmdManager.register(cmdManager.metaBuilder(cmd.name).aliases(cmd.alias).plugin(plugin).build(), cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,128 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.EaglerXVelocityVersion;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.config.bungee.Configuration;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.config.bungee.ConfigurationProvider;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.config.bungee.YamlConfiguration;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklistConfigAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OriginBlacklistConfigVelocity implements OriginBlacklistConfigAdapter {
|
||||||
|
|
||||||
|
private static final String NO_INLINE_USER_AGENT;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
// workaround for compilers inlining the "ID" and "VERSION" fields
|
||||||
|
// (due to them being defined as static and final)
|
||||||
|
StringBuilder uaBuilder = new StringBuilder();
|
||||||
|
uaBuilder.append("Mozilla/5.0 ");
|
||||||
|
uaBuilder.append(EaglerXVelocityVersion.class.getDeclaredField("ID").get(null));
|
||||||
|
uaBuilder.append("/");
|
||||||
|
uaBuilder.append(EaglerXVelocityVersion.class.getDeclaredField("VERSION").get(null));
|
||||||
|
NO_INLINE_USER_AGENT = uaBuilder.toString();
|
||||||
|
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static OriginBlacklistConfigVelocity loadConfig(File dataDir) throws IOException {
|
||||||
|
if(!dataDir.isDirectory() && !dataDir.mkdirs()) {
|
||||||
|
throw new IOException("Could not create directory: " + dataDir.getAbsolutePath());
|
||||||
|
}
|
||||||
|
File configFile = new File(dataDir, "config.yml");
|
||||||
|
if(!configFile.exists()) {
|
||||||
|
try(InputStream defaultConf = OriginBlacklistConfigVelocity.class.getResourceAsStream("/net/lax1dude/eaglercraft/v1_8/plugin/origin_blacklist/default_config.yml")) {
|
||||||
|
try(OutputStream os = new FileOutputStream(configFile)) {
|
||||||
|
byte[] copyBuffer = new byte[1024];
|
||||||
|
int i;
|
||||||
|
while((i = defaultConf.read(copyBuffer)) != -1) {
|
||||||
|
os.write(copyBuffer, 0, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Configuration conf = ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
|
||||||
|
return new OriginBlacklistConfigVelocity(dataDir, conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final File dataDir;
|
||||||
|
private final Configuration conf;
|
||||||
|
|
||||||
|
private OriginBlacklistConfigVelocity(File dataDir, Configuration conf) {
|
||||||
|
this.dataDir = dataDir;
|
||||||
|
this.conf = conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getLocalBlacklistFile() {
|
||||||
|
return new File(dataDir, "origin_blacklist.txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKickMessage() {
|
||||||
|
return conf.getString("origin_blacklist_kick_message", "End of stream");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getBlockClientsWithNoOriginHeader() {
|
||||||
|
return conf.getBoolean("origin_blacklist_block_missing_origin_header", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSubscriptionDownloadUserAgent() {
|
||||||
|
return NO_INLINE_USER_AGENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> getBlacklistURLs() {
|
||||||
|
boolean enableSubscribe = conf.getBoolean("enable_web_origin_blacklist", false);
|
||||||
|
if(!enableSubscribe) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (Collection<String>)conf.getList("origin_blacklist_subscriptions", new ArrayList<String>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldBlacklistOfflineDownload() {
|
||||||
|
return conf.getBoolean("origin_blacklist_block_offline_download", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldBlacklistReplits() {
|
||||||
|
return conf.getBoolean("origin_blacklist_block_replit_clients", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSimpleWhitelistEnabled() {
|
||||||
|
return conf.getBoolean("origin_blacklist_use_simple_whitelist", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> getBlacklistSimpleWhitelist() {
|
||||||
|
return (Collection<String>)conf.getList("origin_blacklist_simple_whitelist", new ArrayList<String>());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.event.PostOrder;
|
||||||
|
import com.velocitypowered.api.event.ResultedEvent.ComponentResult;
|
||||||
|
import com.velocitypowered.api.event.Subscribe;
|
||||||
|
import com.velocitypowered.api.event.connection.LoginEvent;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.api.EaglerXVelocityAPIHelper;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.server.EaglerPlayerData;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklist;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OriginBlacklistListenerVelocity {
|
||||||
|
|
||||||
|
private final OriginBlacklistPluginVelocity plugin;
|
||||||
|
|
||||||
|
public OriginBlacklistListenerVelocity(OriginBlacklistPluginVelocity plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe(order = PostOrder.FIRST)
|
||||||
|
public void handleLoginEvent(LoginEvent evt) {
|
||||||
|
EaglerPlayerData eaglerCon = EaglerXVelocityAPIHelper.getEaglerHandle(evt.getPlayer());
|
||||||
|
if(eaglerCon != null) {
|
||||||
|
String origin = eaglerCon.getOrigin();
|
||||||
|
OriginBlacklist blacklist = plugin.list;
|
||||||
|
boolean shouldKick = true;
|
||||||
|
try {
|
||||||
|
shouldKick = origin == null ? blacklist.getBlockClientsWithNoOriginHeader() : blacklist.test(OriginBlacklist.removeProtocolFromOrigin(origin));
|
||||||
|
}catch(Throwable t) {
|
||||||
|
plugin.getLogger().error("Failed to check origin blacklist for: " + origin, t);
|
||||||
|
}
|
||||||
|
if(shouldKick) {
|
||||||
|
plugin.getLogger().info("Disconnecting a player who joined from blacklisted origin: " + origin);
|
||||||
|
String msg = blacklist.getKickMessage();
|
||||||
|
if(msg != null) {
|
||||||
|
evt.setResult(ComponentResult.denied(Component.text(msg)));
|
||||||
|
}else {
|
||||||
|
evt.setResult(ComponentResult.denied(Component.translatable("disconnect.endOfStream")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,154 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.velocitypowered.api.event.Subscribe;
|
||||||
|
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
|
||||||
|
import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
|
||||||
|
import com.velocitypowered.api.plugin.Dependency;
|
||||||
|
import com.velocitypowered.api.plugin.Plugin;
|
||||||
|
import com.velocitypowered.api.plugin.annotation.DataDirectory;
|
||||||
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
|
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.EaglerXVelocityVersion;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklist;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklistConfigAdapter;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklistLoggerAdapter;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.command.CommandDomainBlock;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.command.CommandDomainBlockDomain;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.command.CommandDomainUnblock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Plugin(
|
||||||
|
id = OriginBlacklistPluginVersion.ID,
|
||||||
|
name = OriginBlacklistPluginVersion.NAME,
|
||||||
|
description = OriginBlacklistPluginVersion.DESCRIPTION,
|
||||||
|
version = OriginBlacklistPluginVersion.VERSION,
|
||||||
|
authors = {
|
||||||
|
OriginBlacklistPluginVersion.AUTHOR
|
||||||
|
},
|
||||||
|
dependencies = {
|
||||||
|
@Dependency(
|
||||||
|
id = EaglerXVelocityVersion.PLUGIN_ID,
|
||||||
|
optional = false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public class OriginBlacklistPluginVelocity {
|
||||||
|
|
||||||
|
private static OriginBlacklistPluginVelocity instance = null;
|
||||||
|
private final ProxyServer proxy;
|
||||||
|
private final Logger logger;
|
||||||
|
private final Path dataDirAsPath;
|
||||||
|
private final File dataDir;
|
||||||
|
|
||||||
|
public final OriginBlacklist list;
|
||||||
|
|
||||||
|
private Timer updateOriginBlacklistTimer = null;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public OriginBlacklistPluginVelocity(ProxyServer proxyIn, Logger loggerIn, @DataDirectory Path dataDirIn) {
|
||||||
|
instance = this;
|
||||||
|
proxy = proxyIn;
|
||||||
|
logger = loggerIn;
|
||||||
|
dataDirAsPath = dataDirIn;
|
||||||
|
dataDir = dataDirIn.toFile();
|
||||||
|
list = new OriginBlacklist(new OriginBlacklistLoggerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void warn(String msg) {
|
||||||
|
OriginBlacklistPluginVelocity.this.logger.warn(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void info(String msg) {
|
||||||
|
OriginBlacklistPluginVelocity.this.logger.info(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void error(String msg) {
|
||||||
|
OriginBlacklistPluginVelocity.this.logger.error(msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reloadConfig() {
|
||||||
|
OriginBlacklistConfigAdapter cfg;
|
||||||
|
try {
|
||||||
|
cfg = OriginBlacklistConfigVelocity.loadConfig(dataDir);
|
||||||
|
}catch(IOException ex) {
|
||||||
|
throw new RuntimeException("Could not load origin blacklist config file!", ex);
|
||||||
|
}
|
||||||
|
list.init(cfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onProxyInit(ProxyInitializeEvent e) {
|
||||||
|
reloadConfig();
|
||||||
|
if(updateOriginBlacklistTimer == null) {
|
||||||
|
updateOriginBlacklistTimer = new Timer("EaglerXBungee: Origin Blacklist Updater");
|
||||||
|
updateOriginBlacklistTimer.scheduleAtFixedRate(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
list.update();
|
||||||
|
}catch(Throwable t) {
|
||||||
|
OriginBlacklistPluginVelocity.this.logger.error("Could not update origin blacklist!", t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0, 6000l);
|
||||||
|
}
|
||||||
|
proxy.getEventManager().register(this, new OriginBlacklistListenerVelocity(this));
|
||||||
|
CommandRegisterHelper.register(this, new CommandDomainBlock());
|
||||||
|
CommandRegisterHelper.register(this, new CommandDomainBlockDomain());
|
||||||
|
CommandRegisterHelper.register(this, new CommandDomainUnblock());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onProxyShutdown(ProxyShutdownEvent e) {
|
||||||
|
if(updateOriginBlacklistTimer != null) {
|
||||||
|
updateOriginBlacklistTimer.cancel();
|
||||||
|
updateOriginBlacklistTimer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProxyServer getProxy() {
|
||||||
|
return proxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Logger getLogger() {
|
||||||
|
return logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static OriginBlacklistPluginVelocity getPlugin() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProxyServer proxy() {
|
||||||
|
return instance.proxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Logger logger() {
|
||||||
|
return instance.logger;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OriginBlacklistPluginVersion {
|
||||||
|
|
||||||
|
public static final String ID = "originblacklist";
|
||||||
|
public static final String NAME = "OriginBlacklist";
|
||||||
|
public static final String DESCRIPTION = "Plugin for EaglercraftXVelocity servers to add the \"origin blacklist\" feature from 1.5.2";
|
||||||
|
public static final String VERSION = "1.0.0";
|
||||||
|
public static final String AUTHOR = "lax1dude";
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.command;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.api.EaglerXVelocityAPIHelper;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.command.EaglerCommand;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.server.EaglerPlayerData;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklist;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.OriginBlacklistPluginVelocity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CommandDomainBlock extends EaglerCommand {
|
||||||
|
|
||||||
|
public CommandDomainBlock() {
|
||||||
|
super("block-domain", "eaglercraft.command.blockdomain");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSource p0, String[] p1) {
|
||||||
|
if (p1.length < 1) {
|
||||||
|
p0.sendMessage(Component.text("Please follow this command by a username", NamedTextColor.RED));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Player user = OriginBlacklistPluginVelocity.proxy().getPlayer(p1[0]).orElse(null);
|
||||||
|
if (user == null) {
|
||||||
|
p0.sendMessage(Component.text("That user is not online", NamedTextColor.RED));
|
||||||
|
}else {
|
||||||
|
EaglerPlayerData eagPlayer = EaglerXVelocityAPIHelper.getEaglerHandle(user);
|
||||||
|
if(eagPlayer != null) {
|
||||||
|
String o = OriginBlacklist.removeProtocolFromOrigin(eagPlayer.getOrigin());
|
||||||
|
if(o != null) {
|
||||||
|
if("null".equals(o)) {
|
||||||
|
p0.sendMessage(Component.text("That user is on an offline download", NamedTextColor.RED));
|
||||||
|
}else {
|
||||||
|
OriginBlacklist bl = OriginBlacklistPluginVelocity.getPlugin().list;
|
||||||
|
bl.addLocal(o);
|
||||||
|
for(Player p : OriginBlacklistPluginVelocity.proxy().getAllPlayers()) {
|
||||||
|
eagPlayer = EaglerXVelocityAPIHelper.getEaglerHandle(p);
|
||||||
|
if(eagPlayer != null) {
|
||||||
|
String oo = OriginBlacklist.removeProtocolFromOrigin(eagPlayer.getOrigin());
|
||||||
|
if(oo != null) {
|
||||||
|
if(bl.test(oo)) {
|
||||||
|
String msg = bl.getKickMessage();
|
||||||
|
if(msg != null) {
|
||||||
|
p.disconnect(Component.text(msg));
|
||||||
|
}else {
|
||||||
|
p.disconnect(Component.translatable("disconnect.endOfStream"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p0.sendMessage(Component.text("Domain of ", NamedTextColor.RED)
|
||||||
|
.append(Component.text(p1[0], NamedTextColor.WHITE))
|
||||||
|
.append(Component.text(" is ", NamedTextColor.RED))
|
||||||
|
.append(Component.text(o, NamedTextColor.WHITE)));
|
||||||
|
p0.sendMessage(Component.text("It was added to the local block list.", NamedTextColor.RED));
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
p0.sendMessage(Component.text("Domain of " + p1[0] + " is unknown (desktop runtime?)", NamedTextColor.RED));
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
p0.sendMessage(Component.text("That user is not using an Eaglercraft client", NamedTextColor.RED));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.command;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.api.EaglerXVelocityAPIHelper;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.command.EaglerCommand;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.server.EaglerPlayerData;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklist;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.OriginBlacklistPluginVelocity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CommandDomainBlockDomain extends EaglerCommand {
|
||||||
|
|
||||||
|
public CommandDomainBlockDomain() {
|
||||||
|
super("block-domain-name", "eaglercraft.command.blockdomainname");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSource p0, String[] p1) {
|
||||||
|
if (p1.length < 1) {
|
||||||
|
p0.sendMessage(Component.text("Please follow this command by a domain", NamedTextColor.RED));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
OriginBlacklist bl = OriginBlacklistPluginVelocity.getPlugin().list;
|
||||||
|
bl.addLocal(p1[0]);
|
||||||
|
for(Player p : OriginBlacklistPluginVelocity.proxy().getAllPlayers()) {
|
||||||
|
EaglerPlayerData eagPlayer = EaglerXVelocityAPIHelper.getEaglerHandle(p);
|
||||||
|
if(eagPlayer != null) {
|
||||||
|
String o = OriginBlacklist.removeProtocolFromOrigin(eagPlayer.getOrigin());
|
||||||
|
if(o != null) {
|
||||||
|
if(bl.test(o)) {
|
||||||
|
String msg = bl.getKickMessage();
|
||||||
|
if(msg != null) {
|
||||||
|
p.disconnect(Component.text(msg));
|
||||||
|
}else {
|
||||||
|
p.disconnect(Component.translatable("disconnect.endOfStream"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p0.sendMessage(Component.text("The domain '", NamedTextColor.GREEN)
|
||||||
|
.append(Component.text(p1[0], NamedTextColor.WHITE))
|
||||||
|
.append(Component.text("' was added to the block list", NamedTextColor.GREEN)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.command;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.command.EaglerCommand;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.OriginBlacklist;
|
||||||
|
import net.lax1dude.eaglercraft.v1_8.plugin.origin_blacklist.velocity.OriginBlacklistPluginVelocity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CommandDomainUnblock extends EaglerCommand {
|
||||||
|
|
||||||
|
public CommandDomainUnblock() {
|
||||||
|
super("unblock-domain", "eaglercraft.command.unblockdomain", "unblock-domain-name");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSource p0, String[] p1) {
|
||||||
|
if (p1.length < 1) {
|
||||||
|
p0.sendMessage(Component.text("Please follow this command by a domain", NamedTextColor.RED));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
OriginBlacklist bl = OriginBlacklistPluginVelocity.getPlugin().list;
|
||||||
|
if(bl.removeLocal(p1[0])) {
|
||||||
|
p0.sendMessage(Component.text("The domain '" + p1[0] + "' was removed from the local block list", NamedTextColor.GREEN));
|
||||||
|
}else {
|
||||||
|
p0.sendMessage(Component.text("The domain was not removed, is it on the block list? Check '" + bl.getLocalBlacklist().getName() + "' in your plugin directory", NamedTextColor.RED));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user