Added new events

This commit is contained in:
RaphiMC 2023-01-29 22:23:14 +01:00
parent 3160959eb5
commit f19bbaca3c
15 changed files with 205 additions and 61 deletions

View File

@ -86,7 +86,7 @@ dependencies {
include "net.lenni0451.classtransform:additionalclassprovider:1.8.3"
include "net.lenni0451:Reflect:1.0.2"
include "net.lenni0451:LambdaEvents:2.0.3"
include "net.raphimc.netminecraft:all:2.3.0"
include "net.raphimc.netminecraft:all:2.3.1"
include("net.raphimc:MinecraftAuth:2.0.1") {
exclude group: "com.google.code.gson", module: "gson"
exclude group: "org.slf4j", module: "slf4j-api"

View File

@ -36,6 +36,8 @@ import net.raphimc.netminecraft.netty.connection.NetServer;
import net.raphimc.viaproxy.cli.ConsoleHandler;
import net.raphimc.viaproxy.cli.options.Options;
import net.raphimc.viaproxy.injection.Java17ToJava8;
import net.raphimc.viaproxy.plugins.PluginManager;
import net.raphimc.viaproxy.plugins.events.Client2ProxyHandlerCreationEvent;
import net.raphimc.viaproxy.proxy.ProxyConnection;
import net.raphimc.viaproxy.proxy.client2proxy.Client2ProxyChannelInitializer;
import net.raphimc.viaproxy.proxy.client2proxy.Client2ProxyHandler;
@ -96,6 +98,8 @@ public class ViaProxy {
setNettyParameters();
MCPipeline.useOptimizedPipeline();
c2pChannels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
PluginManager.loadPlugins();
Thread loaderThread = new Thread(new LoaderTask(), "ViaProtocolHack-Loader");
Thread accountRefreshThread = new Thread(new AccountRefreshTask(saveManager), "AccountRefresh");
Thread updateCheckThread = new Thread(new UpdatedCheckTask(hasUI), "UpdateCheck");
@ -135,7 +139,7 @@ public class ViaProxy {
throw new IllegalStateException("Proxy is already running");
}
try {
currentProxyServer = new NetServer(Client2ProxyHandler::new, Client2ProxyChannelInitializer::new);
currentProxyServer = new NetServer(() -> PluginManager.EVENT_MANAGER.call(new Client2ProxyHandlerCreationEvent(new Client2ProxyHandler())).getHandler(), Client2ProxyChannelInitializer::new);
Logger.LOGGER.info("Binding proxy server to " + Options.BIND_ADDRESS + ":" + Options.BIND_PORT);
currentProxyServer.bind(Options.BIND_ADDRESS, Options.BIND_PORT, false);
} catch (Throwable e) {

View File

@ -18,16 +18,14 @@
package net.raphimc.viaproxy.plugins.events;
import io.netty.channel.Channel;
import net.raphimc.viaproxy.plugins.events.types.ICancellable;
import net.raphimc.viaproxy.plugins.events.types.EventCancellable;
import net.raphimc.viaproxy.plugins.events.types.ITyped;
public class Client2ProxyChannelInitializeEvent implements ICancellable, ITyped {
public class Client2ProxyChannelInitializeEvent extends EventCancellable implements ITyped {
private final Type type;
private final Channel channel;
private boolean cancelled;
public Client2ProxyChannelInitializeEvent(final Type type, final Channel channel) {
this.type = type;
this.channel = channel;
@ -38,16 +36,6 @@ public class Client2ProxyChannelInitializeEvent implements ICancellable, ITyped
}
@Override
public boolean isCancelled() {
return this.cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
@Override
public Type getType() {
return this.type;

View File

@ -0,0 +1,41 @@
/*
* This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
* Copyright (C) 2023 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaproxy.plugins.events;
import io.netty.channel.ChannelHandler;
public class Client2ProxyHandlerCreationEvent {
/**
* The handler which will be used to handle Client<->Proxy packets
*/
private ChannelHandler handler;
public Client2ProxyHandlerCreationEvent(final ChannelHandler handler) {
this.handler = handler;
}
public void setHandler(final ChannelHandler handler) {
this.handler = handler;
}
public ChannelHandler getHandler() {
return this.handler;
}
}

View File

@ -17,13 +17,12 @@
*/
package net.raphimc.viaproxy.plugins.events;
import net.raphimc.viaproxy.plugins.events.types.ICancellable;
import net.raphimc.viaproxy.plugins.events.types.EventCancellable;
public class ConsoleCommandEvent implements ICancellable {
public class ConsoleCommandEvent extends EventCancellable {
private final String command;
private final String[] args;
private boolean cancelled;
public ConsoleCommandEvent(final String command, final String[] args) {
this.command = command;
@ -38,14 +37,4 @@ public class ConsoleCommandEvent implements ICancellable {
return this.args;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
@Override
public boolean isCancelled() {
return this.cancelled;
}
}

View File

@ -20,16 +20,15 @@ package net.raphimc.viaproxy.plugins.events;
import io.netty.channel.Channel;
import net.raphimc.netminecraft.util.ServerAddress;
import net.raphimc.viaprotocolhack.util.VersionEnum;
import net.raphimc.viaproxy.plugins.events.types.ICancellable;
import net.raphimc.viaproxy.plugins.events.types.EventCancellable;
public class PreConnectEvent implements ICancellable {
public class PreConnectEvent extends EventCancellable {
private final ServerAddress serverAddress;
private final VersionEnum serverVersion;
private final VersionEnum clientVersion;
private final Channel clientChannel;
private boolean cancelled;
private String cancelMessage = "§cCould not connect to the backend server! (Server is blacklisted)";
public PreConnectEvent(final ServerAddress serverAddress, final VersionEnum serverVersion, final VersionEnum clientVersion, final Channel clientChannel) {
@ -55,21 +54,12 @@ public class PreConnectEvent implements ICancellable {
return this.clientChannel;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
@Override
public boolean isCancelled() {
return this.cancelled;
}
public String getCancelMessage() {
return this.cancelMessage;
}
public void setCancelMessage(final String cancelMessage) {
this.setCancelled(true);
this.cancelMessage = cancelMessage;
}

View File

@ -0,0 +1,42 @@
/*
* This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
* Copyright (C) 2023 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaproxy.plugins.events;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
public class ProtocolHackInitEvent {
private final List<Supplier<?>> additionalPlatformSuppliers = new ArrayList<>();
public ProtocolHackInitEvent(final Supplier<?>... additionalPlatformSuppliers) {
for (final Supplier<?> platformSupplier : additionalPlatformSuppliers) {
this.registerPlatform(platformSupplier);
}
}
public void registerPlatform(final Supplier<?> platformSupplier) {
this.additionalPlatformSuppliers.add(platformSupplier);
}
public List<Supplier<?>> getPlatformSuppliers() {
return this.additionalPlatformSuppliers;
}
}

View File

@ -18,16 +18,14 @@
package net.raphimc.viaproxy.plugins.events;
import io.netty.channel.Channel;
import net.raphimc.viaproxy.plugins.events.types.ICancellable;
import net.raphimc.viaproxy.plugins.events.types.EventCancellable;
import net.raphimc.viaproxy.plugins.events.types.ITyped;
public class Proxy2ServerChannelInitializeEvent implements ICancellable, ITyped {
public class Proxy2ServerChannelInitializeEvent extends EventCancellable implements ITyped {
private final Type type;
private final Channel channel;
private boolean cancelled;
public Proxy2ServerChannelInitializeEvent(final Type type, final Channel channel) {
this.type = type;
this.channel = channel;
@ -38,16 +36,6 @@ public class Proxy2ServerChannelInitializeEvent implements ICancellable, ITyped
}
@Override
public boolean isCancelled() {
return this.cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
@Override
public Type getType() {
return this.type;

View File

@ -0,0 +1,41 @@
/*
* This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
* Copyright (C) 2023 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaproxy.plugins.events;
import io.netty.channel.ChannelHandler;
public class Proxy2ServerHandlerCreationEvent {
/**
* The handler which will be used to handle Proxy<->Server packets
*/
private ChannelHandler handler;
public Proxy2ServerHandlerCreationEvent(final ChannelHandler handler) {
this.handler = handler;
}
public void setHandler(final ChannelHandler handler) {
this.handler = handler;
}
public ChannelHandler getHandler() {
return this.handler;
}
}

View File

@ -0,0 +1,22 @@
/*
* This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
* Copyright (C) 2023 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaproxy.plugins.events;
public class ViaLoadingEvent {
}

View File

@ -0,0 +1,32 @@
/*
* This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
* Copyright (C) 2023 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaproxy.plugins.events.types;
public abstract class EventCancellable {
private boolean cancelled = false;
public boolean isCancelled() {
return this.cancelled;
}
public void setCancelled(final boolean cancelled) {
this.cancelled = cancelled;
}
}

View File

@ -19,12 +19,17 @@ package net.raphimc.viaproxy.protocolhack;
import net.raphimc.viaprotocolhack.ViaProtocolHack;
import net.raphimc.viaprotocolhack.impl.platform.ViaLegacyPlatformImpl;
import net.raphimc.viaproxy.plugins.PluginManager;
import net.raphimc.viaproxy.plugins.events.ProtocolHackInitEvent;
import net.raphimc.viaproxy.protocolhack.impl.*;
import java.util.function.Supplier;
public class ProtocolHack {
public static void init() {
ViaProtocolHack.init(new ViaProxyViaVersionPlatformImpl(), new ViaProxyVPLoader(), null, null, ViaProxyViaBackwardsPlatformImpl::new, ViaProxyViaRewindPlatformImpl::new, ViaLegacyPlatformImpl::new, ViaAprilFoolsPlatformImpl::new);
final Supplier<?>[] additionalPlatformSuppliers = PluginManager.EVENT_MANAGER.call(new ProtocolHackInitEvent(ViaAprilFoolsPlatformImpl::new)).getPlatformSuppliers().toArray(new Supplier[0]);
ViaProtocolHack.init(new ViaProxyViaVersionPlatformImpl(), new ViaProxyVPLoader(), null, null, ViaProxyViaBackwardsPlatformImpl::new, ViaProxyViaRewindPlatformImpl::new, ViaLegacyPlatformImpl::new, additionalPlatformSuppliers);
}
}

View File

@ -28,6 +28,8 @@ import net.raphimc.vialegacy.protocols.release.protocol1_3_1_2to1_2_4_5.provider
import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.providers.EncryptionProvider;
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.providers.GameProfileFetcher;
import net.raphimc.viaprotocolhack.impl.viaversion.VPLoader;
import net.raphimc.viaproxy.plugins.PluginManager;
import net.raphimc.viaproxy.plugins.events.ViaLoadingEvent;
import net.raphimc.viaproxy.protocolhack.providers.*;
public class ViaProxyVPLoader extends VPLoader {
@ -46,6 +48,8 @@ public class ViaProxyVPLoader extends VPLoader {
Via.getManager().getProviders().use(ClassicWorldHeightProvider.class, new ViaProxyClassicWorldHeightProvider());
Via.getManager().getProviders().use(ClassicCustomCommandProvider.class, new ViaProxyClassicCustomCommandProvider());
Via.getManager().getProviders().use(ClassicMPPassProvider.class, new ViaProxyClassicMPPassProvider());
PluginManager.EVENT_MANAGER.call(new ViaLoadingEvent());
}
}

View File

@ -25,7 +25,6 @@ import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.socket.SocketChannel;
import net.raphimc.netminecraft.constants.ConnectionState;
import net.raphimc.netminecraft.constants.MCPackets;
import net.raphimc.netminecraft.constants.MCPipeline;
@ -42,6 +41,7 @@ import net.raphimc.viaproxy.ViaProxy;
import net.raphimc.viaproxy.cli.options.Options;
import net.raphimc.viaproxy.plugins.PluginManager;
import net.raphimc.viaproxy.plugins.events.PreConnectEvent;
import net.raphimc.viaproxy.plugins.events.Proxy2ServerHandlerCreationEvent;
import net.raphimc.viaproxy.proxy.LoginState;
import net.raphimc.viaproxy.proxy.ProxyConnection;
import net.raphimc.viaproxy.proxy.external_interface.AuthLibServices;
@ -87,7 +87,7 @@ public class Client2ProxyHandler extends SimpleChannelInboundHandler<IPacket> {
super.channelActive(ctx);
RANDOM.nextBytes(this.verifyToken);
this.proxyConnection = new ProxyConnection(Proxy2ServerHandler::new, Proxy2ServerChannelInitializer::new, (SocketChannel) ctx.channel());
this.proxyConnection = new ProxyConnection(() -> PluginManager.EVENT_MANAGER.call(new Proxy2ServerHandlerCreationEvent(new Proxy2ServerHandler())).getHandler(), Proxy2ServerChannelInitializer::new, ctx.channel());
ctx.channel().attr(ProxyConnection.PROXY_CONNECTION_ATTRIBUTE_KEY).set(this.proxyConnection);
ViaProxy.c2pChannels.add(ctx.channel());

View File

@ -17,7 +17,6 @@
*/
package net.raphimc.viaproxy.tasks;
import net.raphimc.viaproxy.plugins.PluginManager;
import net.raphimc.viaproxy.protocolhack.ProtocolHack;
public class LoaderTask implements Runnable {
@ -25,7 +24,6 @@ public class LoaderTask implements Runnable {
@Override
public void run() {
ProtocolHack.init();
PluginManager.loadPlugins();
}
}