Implement ClientLifecycleEvent on Forge (+ testmod)

Bump version to 1.29

Signed-off-by: Max <maxh2709@gmail.com>
This commit is contained in:
Max
2022-01-31 23:20:50 +08:00
committed by shedaniel
parent c8470cc109
commit 8ff46417b1
5 changed files with 50 additions and 5 deletions

View File

@@ -30,14 +30,14 @@ import net.minecraft.client.multiplayer.ClientLevel;
@Environment(EnvType.CLIENT)
public interface ClientLifecycleEvent {
/**
* Invoked when client has been initialised, not available in forge.
* Invoked when client has been initialised.
* Equivalent to Fabric's {@code ClientLifecycleEvents.CLIENT_STARTING}.
*/
@Deprecated
Event<ClientState> CLIENT_STARTED = EventFactory.createLoop();
/**
* Invoked when client is stopping, not available in forge.
* Invoked when client is stopping.
* Equivalent to Fabric's {@code ClientLifecycleEvents.CLIENT_STOPPING}.
*/
@Deprecated
Event<ClientState> CLIENT_STOPPING = EventFactory.createLoop();
/**
* Invoked after a world is loaded only on the client-side.

View File

@@ -0,0 +1,41 @@
/*
* This file is part of architectury.
* Copyright (C) 2020, 2021, 2022 architectury
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package me.shedaniel.architectury.mixin.forge;
import me.shedaniel.architectury.event.events.client.ClientLifecycleEvent;
import net.minecraft.client.Minecraft;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
// adopted from fabric
@Mixin(Minecraft.class)
public abstract class MixinMinecraft {
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;gameThread:Ljava/lang/Thread;", shift = At.Shift.AFTER, ordinal = 0), method = "run")
private void onStart(CallbackInfo ci) {
ClientLifecycleEvent.CLIENT_STARTED.invoker().stateChanged((Minecraft) (Object) this);
}
@Inject(at = @At(value = "INVOKE", target = "Lorg/apache/logging/log4j/Logger;info(Ljava/lang/String;)V", shift = At.Shift.AFTER, remap = false), method = "destroy")
private void onStopping(CallbackInfo ci) {
ClientLifecycleEvent.CLIENT_STOPPING.invoker().stateChanged((Minecraft) (Object) this);
}
}

View File

@@ -6,6 +6,7 @@
"minVersion": "0.8",
"client": [
"MixinClientLevel",
"MixinMinecraft",
"ParticleEngineAccessor",
"ParticleEngineAccessor$MutableSpriteSetAccessor"
],

View File

@@ -6,7 +6,7 @@ supported_version=1.16.4/5
archives_base_name=architectury
archives_base_name_snapshot=architectury-snapshot
base_version=1.28
base_version=1.29
maven_group=me.shedaniel
fabric_loader_version=0.12.12

View File

@@ -19,6 +19,7 @@
package me.shedaniel.architectury.test;
import me.shedaniel.architectury.event.events.client.ClientLifecycleEvent;
import me.shedaniel.architectury.registry.entity.EntityRenderers;
import me.shedaniel.architectury.test.debug.ConsoleMessageSink;
import me.shedaniel.architectury.test.debug.MessageSink;
@@ -59,6 +60,8 @@ public class TestMod {
public static class Client {
@Environment(EnvType.CLIENT)
public static void initializeClient() {
ClientLifecycleEvent.CLIENT_STARTED.register((client) -> SINK.accept("Client started!"));
ClientLifecycleEvent.CLIENT_STOPPING.register((client) -> SINK.accept("Client stopping!"));
TestKeybinds.initialize();
TestModNet.initializeClient();
EntityRenderers.register(TestEntity.TYPE, MinecartRenderer<TestEntity>::new);