Implement events and helpers needed by Simple RPC
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package com.hypherionmc.craterlib.api.event.client;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
|
||||
public class CraterClientTickEvent extends CraterEvent {
|
||||
|
||||
private final ClientLevel level;
|
||||
|
||||
public CraterClientTickEvent(ClientLevel level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public ClientLevel getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCancel() {
|
||||
return false;
|
||||
}
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
package com.hypherionmc.craterlib.api.event.client;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import com.mojang.realmsclient.dto.RealmsServer;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
||||
public class CraterSinglePlayerEvent extends CraterEvent {
|
||||
|
||||
private final Player player;
|
||||
|
||||
public CraterSinglePlayerEvent(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCancel() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static class PlayerLogin extends CraterSinglePlayerEvent {
|
||||
|
||||
public PlayerLogin(Player player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
package com.hypherionmc.craterlib.api.event.client;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.Options;
|
||||
|
||||
public class EarlyInitEvent extends CraterEvent {
|
||||
|
||||
private final Minecraft minecraft;
|
||||
private final Options options;
|
||||
|
||||
public EarlyInitEvent(Minecraft minecraft, Options options) {
|
||||
this.minecraft = minecraft;
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
public Minecraft getMinecraft() {
|
||||
return minecraft;
|
||||
}
|
||||
|
||||
public Options getOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCancel() {
|
||||
return false;
|
||||
}
|
||||
}
|
@@ -0,0 +1,22 @@
|
||||
package com.hypherionmc.craterlib.api.event.client;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import com.mojang.realmsclient.dto.RealmsServer;
|
||||
|
||||
public class PlayerJoinRealmEvent extends CraterEvent {
|
||||
|
||||
private final RealmsServer server;
|
||||
|
||||
public PlayerJoinRealmEvent(RealmsServer server) {
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public RealmsServer getServer() {
|
||||
return server;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCancel() {
|
||||
return false;
|
||||
}
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
package com.hypherionmc.craterlib.api.event.client;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class ScreenEvent extends CraterEvent {
|
||||
|
||||
private final Screen screen;
|
||||
|
||||
protected ScreenEvent(Screen screen) {
|
||||
this.screen = Objects.requireNonNull(screen);
|
||||
}
|
||||
|
||||
public Screen getScreen() {
|
||||
return screen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCancel() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static class Opening extends ScreenEvent {
|
||||
|
||||
private final Screen currentScreen;
|
||||
private Screen newScreen;
|
||||
|
||||
public Opening(Screen currentScreen, Screen newScreen) {
|
||||
super(newScreen);
|
||||
this.currentScreen = currentScreen;
|
||||
this.newScreen = newScreen;
|
||||
}
|
||||
|
||||
public Screen getCurrentScreen() {
|
||||
return currentScreen;
|
||||
}
|
||||
|
||||
public Screen getNewScreen() {
|
||||
return newScreen;
|
||||
}
|
||||
|
||||
public void setNewScreen(Screen newScreen) {
|
||||
this.newScreen = newScreen;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -1,17 +1,17 @@
|
||||
package com.hypherionmc.craterlib.api.event.server;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
||||
public class CraterPlayerEvent extends CraterEvent {
|
||||
|
||||
private final Player player;
|
||||
private final ServerPlayer player;
|
||||
|
||||
public CraterPlayerEvent(Player player) {
|
||||
public CraterPlayerEvent(ServerPlayer player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
public ServerPlayer getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public class CraterPlayerEvent extends CraterEvent {
|
||||
|
||||
public static class PlayerLoggedIn extends CraterPlayerEvent {
|
||||
|
||||
public PlayerLoggedIn(Player player) {
|
||||
public PlayerLoggedIn(ServerPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class CraterPlayerEvent extends CraterEvent {
|
||||
|
||||
public static class PlayerLoggedOut extends CraterPlayerEvent {
|
||||
|
||||
public PlayerLoggedOut(Player player) {
|
||||
public PlayerLoggedOut(ServerPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
|
@@ -16,4 +16,5 @@ public interface ILoaderHelper {
|
||||
Environment getEnvironment();
|
||||
boolean isModLoaded(String modid);
|
||||
boolean isDevEnv();
|
||||
int getModCount();
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@ public class CommandMixin {
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/ParseResults;)I",
|
||||
shift = At.Shift.BEFORE
|
||||
), cancellable = true
|
||||
), cancellable = true, remap = false
|
||||
)
|
||||
private void injectCommandEvent(ParseResults<CommandSourceStack> stackParseResults, String command, CallbackInfoReturnable<Integer> cir) {
|
||||
CraterCommandEvent commandEvent = new CraterCommandEvent(stackParseResults, command);
|
||||
|
@@ -0,0 +1,21 @@
|
||||
package com.hypherionmc.craterlib.mixin.events.client;
|
||||
|
||||
import com.hypherionmc.craterlib.api.event.client.CraterSinglePlayerEvent;
|
||||
import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.client.player.AbstractClientPlayer;
|
||||
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;
|
||||
|
||||
@Mixin(ClientLevel.class)
|
||||
public class ClientLevelMixin {
|
||||
|
||||
@Inject(method = "addPlayer", at = @At("HEAD"))
|
||||
private void injectSinglePlayerJoinEvent(int $$0, AbstractClientPlayer player, CallbackInfo ci) {
|
||||
CraterSinglePlayerEvent.PlayerLogin playerLogin = new CraterSinglePlayerEvent.PlayerLogin(player);
|
||||
CraterEventBus.INSTANCE.postEvent(playerLogin);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
package com.hypherionmc.craterlib.mixin.events.client;
|
||||
|
||||
import com.hypherionmc.craterlib.api.event.client.ScreenEvent;
|
||||
import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@Mixin(Minecraft.class)
|
||||
public class MinecraftMixin {
|
||||
|
||||
@Shadow @Nullable public Screen screen;
|
||||
|
||||
@Inject(method = "setScreen", at = @At(value = "TAIL"))
|
||||
private void injectScreenOpeningEvent(Screen screen, CallbackInfo ci) {
|
||||
Screen old = this.screen;
|
||||
if (screen != null) {
|
||||
ScreenEvent.Opening opening = new ScreenEvent.Opening(old, screen);
|
||||
CraterEventBus.INSTANCE.postEvent(opening);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,22 @@
|
||||
package com.hypherionmc.craterlib.mixin.events.client;
|
||||
|
||||
import com.hypherionmc.craterlib.api.event.client.PlayerJoinRealmEvent;
|
||||
import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||
import com.mojang.realmsclient.RealmsMainScreen;
|
||||
import com.mojang.realmsclient.dto.RealmsServer;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
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;
|
||||
|
||||
@Mixin(RealmsMainScreen.class)
|
||||
public class RealmsMainScreenMixin {
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "play")
|
||||
private void play(RealmsServer serverData, Screen parent, CallbackInfo ci) {
|
||||
PlayerJoinRealmEvent playerJoinRealm = new PlayerJoinRealmEvent(serverData);
|
||||
CraterEventBus.INSTANCE.postEvent(playerJoinRealm);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,22 @@
|
||||
package com.hypherionmc.craterlib.mixin.events.client;
|
||||
|
||||
import com.hypherionmc.craterlib.api.event.client.EarlyInitEvent;
|
||||
import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.Options;
|
||||
import net.minecraft.client.tutorial.Tutorial;
|
||||
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;
|
||||
|
||||
@Mixin(Tutorial.class)
|
||||
public class TutorialMixin {
|
||||
|
||||
@Inject(method = "<init>", at = @At("RETURN"))
|
||||
private void injectEarlyInitEvent(Minecraft minecraft, Options options, CallbackInfo ci) {
|
||||
EarlyInitEvent event = new EarlyInitEvent(minecraft, options);
|
||||
CraterEventBus.INSTANCE.postEvent(event);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user