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;
|
package com.hypherionmc.craterlib.api.event.server;
|
||||||
|
|
||||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
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 {
|
public class CraterPlayerEvent extends CraterEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final ServerPlayer player;
|
||||||
|
|
||||||
public CraterPlayerEvent(Player player) {
|
public CraterPlayerEvent(ServerPlayer player) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public ServerPlayer getPlayer() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ public class CraterPlayerEvent extends CraterEvent {
|
|||||||
|
|
||||||
public static class PlayerLoggedIn extends CraterPlayerEvent {
|
public static class PlayerLoggedIn extends CraterPlayerEvent {
|
||||||
|
|
||||||
public PlayerLoggedIn(Player player) {
|
public PlayerLoggedIn(ServerPlayer player) {
|
||||||
super(player);
|
super(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ public class CraterPlayerEvent extends CraterEvent {
|
|||||||
|
|
||||||
public static class PlayerLoggedOut extends CraterPlayerEvent {
|
public static class PlayerLoggedOut extends CraterPlayerEvent {
|
||||||
|
|
||||||
public PlayerLoggedOut(Player player) {
|
public PlayerLoggedOut(ServerPlayer player) {
|
||||||
super(player);
|
super(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,4 +16,5 @@ public interface ILoaderHelper {
|
|||||||
Environment getEnvironment();
|
Environment getEnvironment();
|
||||||
boolean isModLoaded(String modid);
|
boolean isModLoaded(String modid);
|
||||||
boolean isDevEnv();
|
boolean isDevEnv();
|
||||||
|
int getModCount();
|
||||||
}
|
}
|
||||||
|
@@ -18,7 +18,7 @@ public class CommandMixin {
|
|||||||
at = @At(value = "INVOKE",
|
at = @At(value = "INVOKE",
|
||||||
target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/ParseResults;)I",
|
target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/ParseResults;)I",
|
||||||
shift = At.Shift.BEFORE
|
shift = At.Shift.BEFORE
|
||||||
), cancellable = true
|
), cancellable = true, remap = false
|
||||||
)
|
)
|
||||||
private void injectCommandEvent(ParseResults<CommandSourceStack> stackParseResults, String command, CallbackInfoReturnable<Integer> cir) {
|
private void injectCommandEvent(ParseResults<CommandSourceStack> stackParseResults, String command, CallbackInfoReturnable<Integer> cir) {
|
||||||
CraterCommandEvent commandEvent = new CraterCommandEvent(stackParseResults, command);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -8,7 +8,11 @@
|
|||||||
"client": [
|
"client": [
|
||||||
"colors.BlockColorsMixin",
|
"colors.BlockColorsMixin",
|
||||||
"colors.ItemColorsMixin",
|
"colors.ItemColorsMixin",
|
||||||
"events.PlayerMixin"
|
"events.PlayerMixin",
|
||||||
|
"events.client.ClientLevelMixin",
|
||||||
|
"events.client.MinecraftMixin",
|
||||||
|
"events.client.RealmsMainScreenMixin",
|
||||||
|
"events.client.TutorialMixin"
|
||||||
],
|
],
|
||||||
"server": [
|
"server": [
|
||||||
"events.CommandMixin",
|
"events.CommandMixin",
|
||||||
|
@@ -1,6 +1,9 @@
|
|||||||
package com.hypherionmc.craterlib.client;
|
package com.hypherionmc.craterlib.client;
|
||||||
|
|
||||||
|
import com.hypherionmc.craterlib.api.event.client.CraterClientTickEvent;
|
||||||
|
import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||||
import net.fabricmc.api.ClientModInitializer;
|
import net.fabricmc.api.ClientModInitializer;
|
||||||
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||||
|
|
||||||
public class CraterLibClientInitializer implements ClientModInitializer {
|
public class CraterLibClientInitializer implements ClientModInitializer {
|
||||||
@@ -8,5 +11,10 @@ public class CraterLibClientInitializer implements ClientModInitializer {
|
|||||||
@Override
|
@Override
|
||||||
public void onInitializeClient() {
|
public void onInitializeClient() {
|
||||||
ItemGroupEvents.MODIFY_ENTRIES_ALL.register(FabricClientHelper::registerCreativeItems);
|
ItemGroupEvents.MODIFY_ENTRIES_ALL.register(FabricClientHelper::registerCreativeItems);
|
||||||
|
|
||||||
|
ClientTickEvents.START_CLIENT_TICK.register((listener) -> {
|
||||||
|
CraterClientTickEvent event = new CraterClientTickEvent(listener.level);
|
||||||
|
CraterEventBus.INSTANCE.postEvent(event);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -61,4 +61,9 @@ public class FabricLoaderHelper implements ILoaderHelper {
|
|||||||
public boolean isDevEnv() {
|
public boolean isDevEnv() {
|
||||||
return FabricLoader.getInstance().isDevelopmentEnvironment();
|
return FabricLoader.getInstance().isDevelopmentEnvironment();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getModCount() {
|
||||||
|
return FabricLoader.getInstance().getAllMods().size();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user