Fixed random crashes and load ViaVersion async

This commit is contained in:
FlorianMichael 2023-11-26 21:48:11 +01:00
parent 67285d4f4a
commit cf93a0453a
No known key found for this signature in database
GPG Key ID: C2FB87E71C425126
5 changed files with 25 additions and 1396 deletions

View File

@ -30,6 +30,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.io.File; import java.io.File;
import java.util.concurrent.CompletableFuture;
/* /*
* TODO | General * TODO | General
@ -66,17 +67,22 @@ public class ViaFabricPlus {
private SettingsManager settingsManager; private SettingsManager settingsManager;
private SaveManager saveManager; private SaveManager saveManager;
private CompletableFuture<Void> loadingFuture;
@SuppressWarnings("ResultOfMethodCallIgnored") @SuppressWarnings("ResultOfMethodCallIgnored")
public void bootstrap() { public void bootstrap() {
directory.mkdir(); directory.mkdir();
ClassLoaderPriorityUtil.loadOverridingJars(directory); // Load overriding jars first so other code can access the new classes ClassLoaderPriorityUtil.loadOverridingJars(directory); // Load overriding jars first so other code can access the new classes
ClientsideFixes.init(); // Init clientside related fixes ClientsideFixes.init(); // Init clientside related fixes
ProtocolHack.init(directory); // Init ViaVersion protocol translator platform loadingFuture = ProtocolHack.init(directory); // Init ViaVersion protocol translator platform
settingsManager = new SettingsManager(); settingsManager = new SettingsManager();
saveManager = new SaveManager(settingsManager); saveManager = new SaveManager(settingsManager);
PostGameLoadCallback.EVENT.register(saveManager::init); // Has to wait for Minecraft because of the translation system usages PostGameLoadCallback.EVENT.register(() -> {
saveManager.init();
loadingFuture.join();
}); // Has to wait for Minecraft because of the translation system usages
} }
public static ViaFabricPlus global() { public static ViaFabricPlus global() {

View File

@ -1369,5 +1369,4 @@ public class ItemRegistryDiff {
return !ITEM_DIFF.containsKey(item) || ITEM_DIFF.get(item).contains(ProtocolHack.getTargetVersion() /*ProtocolHack.getTargetVersion().isNewerThanOrEqualTo(ITEM_DIFF.get(item)*/); return !ITEM_DIFF.containsKey(item) || ITEM_DIFF.get(item).contains(ProtocolHack.getTargetVersion() /*ProtocolHack.getTargetVersion().isNewerThanOrEqualTo(ITEM_DIFF.get(item)*/);
} }
} }

View File

@ -55,6 +55,7 @@ import org.cloudburstmc.netty.channel.raknet.config.RakChannelOption;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
/** /**
@ -172,19 +173,7 @@ public class ProtocolHack {
throw new IllegalStateException("The player is not connected to a server"); throw new IllegalStateException("The player is not connected to a server");
} }
public static void init(final File directory) { public static CompletableFuture<Void> init(final File directory) {
// Load ViaVersion and register all platforms and their components
ViaLoader.init(
new ViaVersionPlatformImpl(directory),
new ViaFabricPlusVLLoader(),
new ViaFabricPlusVLInjector(),
new ViaFabricPlusVLCommandHandler(),
ViaBackwardsPlatformImpl::new,
ViaFabricPlusViaLegacyPlatformImpl::new,
ViaAprilFoolsPlatformImpl::new,
ViaBedrockPlatformImpl::new
);
// Register command callback for /viaversion and /viafabricplus // Register command callback for /viaversion and /viafabricplus
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> {
final var commandHandler = (ViaFabricPlusVLCommandHandler) Via.getManager().getCommandHandler(); final var commandHandler = (ViaFabricPlusVLCommandHandler) Via.getManager().getCommandHandler();
@ -195,6 +184,19 @@ public class ProtocolHack {
dispatcher.register(LiteralArgumentBuilder.<FabricClientCommandSource>literal("viafabricplus").then(executor).executes(commandHandler::execute)); dispatcher.register(LiteralArgumentBuilder.<FabricClientCommandSource>literal("viafabricplus").then(executor).executes(commandHandler::execute));
}); });
PostViaVersionLoadCallback.EVENT.invoker().onPostViaVersionLoad(); return CompletableFuture.runAsync(() -> {
// Load ViaVersion and register all platforms and their components
ViaLoader.init(
new ViaVersionPlatformImpl(directory),
new ViaFabricPlusVLLoader(),
new ViaFabricPlusVLInjector(),
new ViaFabricPlusVLCommandHandler(),
ViaBackwardsPlatformImpl::new,
ViaFabricPlusViaLegacyPlatformImpl::new,
ViaAprilFoolsPlatformImpl::new,
ViaBedrockPlatformImpl::new
);
PostViaVersionLoadCallback.EVENT.invoker().onPostViaVersionLoad();
});
} }
} }

View File

@ -52,7 +52,7 @@ public class ItemTranslator {
buf.writeShort(0); // slot buf.writeShort(0); // slot
buf.writeItemStack(stack); // item buf.writeItemStack(stack); // item
final var wrapper = PacketWrapper.create(CREATIVE_INVENTORY_ACTION_ID, null, user); final var wrapper = PacketWrapper.create(CREATIVE_INVENTORY_ACTION_ID, buf, user);
user.getProtocolInfo().getPipeline().transform(Direction.SERVERBOUND, State.PLAY, wrapper); user.getProtocolInfo().getPipeline().transform(Direction.SERVERBOUND, State.PLAY, wrapper);
wrapper.read(Type.SHORT); // slot wrapper.read(Type.SHORT); // slot