- [FEAT] New APIs for Maintenance Mode and rewrite commands system

- [FEAT] Improved config system to fix old loading bugs and support JSON
- [FEAT] LuckPerms support for commands
This commit is contained in:
2024-08-10 14:13:51 +02:00
parent 2c13d507c3
commit 0dbf07de46
39 changed files with 729 additions and 237 deletions

View File

@@ -27,8 +27,8 @@ public class ServerGamePacketListenerImplMixin {
cancellable = true
)
private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) {
Component finalArg = component == null ? arg.decoratedContent() : component;
CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), finalArg.getString(), ChatUtils.mojangToAdventure(finalArg));
Component finalcomp = component == null ? arg.decoratedContent() : component;
CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), finalcomp.getString(), ChatUtils.mojangToAdventure(finalcomp));
CraterEventBus.INSTANCE.postEvent(event);
if (event.wasCancelled())
ci.cancel();

View File

@@ -0,0 +1,53 @@
package com.hypherionmc.craterlib.mixin;
import com.hypherionmc.craterlib.api.events.server.ServerStatusEvent;
import com.hypherionmc.craterlib.core.event.CraterEventBus;
import com.hypherionmc.craterlib.utils.ChatUtils;
import net.minecraft.network.Connection;
import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket;
import net.minecraft.network.protocol.status.ServerStatus;
import net.minecraft.network.protocol.status.ServerboundStatusRequestPacket;
import net.minecraft.server.network.ServerStatusPacketListenerImpl;
import org.spongepowered.asm.mixin.Final;
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;
@Mixin(ServerStatusPacketListenerImpl.class)
public class ServerStatusPacketListenerMixin {
@Shadow
@Final
private ServerStatus status;
@Shadow @Final private Connection connection;
@Inject(method = "handleStatusRequest",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V",
shift = At.Shift.BEFORE),
cancellable = true
)
private void injectHandleStatusRequest(ServerboundStatusRequestPacket arg, CallbackInfo ci) {
ServerStatusEvent.StatusRequestEvent event = new ServerStatusEvent.StatusRequestEvent(ChatUtils.mojangToAdventure(status.description()));
CraterEventBus.INSTANCE.postEvent(event);
if (event.getNewStatus() != null) {
ci.cancel();
this.connection.send(new ClientboundStatusResponsePacket(
new ServerStatus(ChatUtils.adventureToMojang(
event.getNewStatus()),
status.players(),
status.version(),
status.favicon(),
status.enforcesSecureChat(),
status.isModded()
)
));
}
}
}

View File

@@ -9,7 +9,8 @@
"ConfigScreenHandlerMixin"
],
"server": [
"ServerGamePacketListenerImplMixin"
"ServerGamePacketListenerImplMixin",
"ServerStatusPacketListenerMixin"
],
"injectors": {
"defaultRequire": 1