feat: add way to stop e4mc

This commit is contained in:
Skye 2023-04-20 19:34:28 +09:00
parent df7ceb5911
commit ab56f6dc19
Signed by: me
GPG key ID: 0104BC05F41B77B8
7 changed files with 117 additions and 15 deletions

View file

@ -3,5 +3,5 @@ org.gradle.jvmargs=-Xmx2G
mod.name=e4mc
mod.id=e4mc_minecraft
mod.version=2.1.0
mod.version=3.0.0
mod.group=vg.skye

View file

@ -13,6 +13,7 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import vg.skye.e4mc_minecraft.E4mcClient;
import vg.skye.e4mc_minecraft.E4mcRelayHandler;
import javax.annotation.Nullable;
@ -22,7 +23,6 @@ import java.net.InetAddress;
@Mixin(ServerNetworkIo.class)
public abstract class ServerNetworkIoMixin {
private static final ThreadLocal<Boolean> initializingE4mc = ThreadLocal.withInitial(() -> false);
private static E4mcRelayHandler e4mcHandler = null;
@Shadow
public abstract void bind(@Nullable InetAddress address, int port) throws IOException;
@ -40,7 +40,7 @@ public abstract class ServerNetworkIoMixin {
}
} else {
E4mcRelayHandler handler = new E4mcRelayHandler();
e4mcHandler = handler;
E4mcClient.HANDLER = handler;
handler.connect();
}
}
@ -56,8 +56,10 @@ public abstract class ServerNetworkIoMixin {
}
@Inject(method = "stop", at = @At("HEAD"))
private void bind(CallbackInfo ci) {
e4mcHandler.close();
private void stop(CallbackInfo ci) {
if (E4mcClient.HANDLER != null) {
E4mcClient.HANDLER.close();
}
}

View file

@ -2,27 +2,100 @@ package vg.skye.e4mc_minecraft
//#if FABRIC==1
import net.fabricmc.api.ModInitializer
//#if MC>=11904
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback
//#else
//$$ import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback
//#endif
//#else
//$$ import net.minecraftforge.fml.common.Mod
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent
//$$ import net.minecraftforge.event.RegisterCommandsEvent
//#endif
import net.minecraft.server.command.CommandManager.*
//#if MC>=11904
import net.minecraft.text.Text
//#elseif FABRIC==1
//$$ import net.minecraft.text.TranslatableText
//#else
//$$ import net.minecraft.network.chat.TranslatableComponent
//#endif
import org.slf4j.Logger
import org.slf4j.LoggerFactory
//#if FORGE==1
//$$ @Mod("e4mc_minecraft")
//$$ @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE)
//$$ object E4mcClient {
//#else
object E4mcClient : ModInitializer {
//#endif
const val NAME = "e4mc"
const val ID = "e4mc_minecraft"
const val VERSION = "2.1.0"
const val VERSION = "3.0.0"
@JvmField
val LOGGER: Logger = LoggerFactory.getLogger("e4mc")
@JvmField
var HANDLER: E4mcRelayHandler? = null
//#if FABRIC==1
override fun onInitialize() {
// nothing needed
//#if MC>=11904
CommandRegistrationCallback.EVENT.register { dispatcher, _, _ ->
//#else
//$$ CommandRegistrationCallback.EVENT.register { dispatcher, _ ->
//#endif
dispatcher.register(literal("e4mc")
.then(
literal("stop")
.executes { context ->
if (HANDLER != null) {
HANDLER!!.close()
HANDLER = null
//#if MC>=11904
context.source.sendMessage(Text.translatable("text.e4mc_minecraft.closeServer"))
//#else
//$$ context.source.sendFeedback(TranslatableText("text.e4mc_minecraft.closeServer"), false)
//#endif
} else {
//#if MC>=11904
context.source.sendMessage(Text.translatable("text.e4mc_minecraft.serverAlreadyClosed"))
//#else
//$$ context.source.sendFeedback(TranslatableText("text.e4mc_minecraft.serverAlreadyClosed"), false)
//#endif
}
1
}
))
}
}
//#else
//$$ @SubscribeEvent
//$$ fun onRegisterCommandEvent(event: RegisterCommandsEvent) {
//$$ val commandDispatcher = event.getDispatcher()
//$$ commandDispatcher.register(literal("e4mc")
//$$ .then(
//$$ literal("stop")
//$$ .executes { context ->
//$$ if (HANDLER != null) {
//$$ HANDLER!!.close()
//$$ HANDLER = null
//$$ //#if MC>=11904
//$$ context.source.sendSuccess(Component.translatable("text.e4mc_minecraft.closeServer"), false)
//$$ //#else
//$$ //$$ context.source.sendSuccess(TranslatableComponent("text.e4mc_minecraft.closeServer"), false)
//$$ //#endif
//$$ } else {
//$$ //#if MC>=11904
//$$ context.source.sendFailure(Component.translatable("text.e4mc_minecraft.serverAlreadyClosed"))
//$$ //#else
//$$ //$$ context.source.sendFailure(TranslatableComponent("text.e4mc_minecraft.serverAlreadyClosed"))
//$$ //#endif
//$$ }
//$$ 1
//$$ }
//$$ ))
//$$ }
//#endif
}

View file

@ -122,28 +122,46 @@ class E4mcRelayHandler: WebSocketClient(URI("wss://ingress.e4mc.link")) {
private fun createMessage(domain: String): Text {
//#if MC>=11900
return Text.translatable(
"text.e4mc_quilt.domainAssigned",
"text.e4mc_minecraft.domainAssigned",
Text.literal(domain).styled {
it
.withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain))
.withColor(Formatting.GREEN)
.withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.translatable("chat.copy.click")))
}
).append(
Text.translatable("text.e4mc_minecraft.clickToStop").styled {
it
.withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND, "/e4mc stop"))
.withColor(Formatting.GRAY)
}
)
//#elseif FABRIC==1
//$$ return TranslatableText("text.e4mc_quilt.domainAssigned", LiteralText(domain).styled {
//$$ return TranslatableText("text.e4mc_minecraft.domainAssigned", LiteralText(domain).styled {
//$$ return@styled it
//$$ .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain))
//$$ .withColor(Formatting.GREEN)
//$$ .withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, TranslatableText("chat.copy.click")))
//$$ })
//$$ }).append(
//$$ TranslatableText("text.e4mc_minecraft.clickToStop").styled {
//$$ return@styled it
//$$ .withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND, "/e4mc stop"))
//$$ .withColor(Formatting.GRAY)
//$$ }
//$$ )
//#else
//$$ return TranslatableComponent("text.e4mc_quilt.domainAssigned", TextComponent(domain).withStyle {
//$$ return TranslatableComponent("text.e4mc_minecraft.domainAssigned", TextComponent(domain).withStyle {
//$$ return@withStyle it
//$$ .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain))
//$$ .withColor(ChatFormatting.GREEN)
//$$ .withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, TranslatableComponent("chat.copy.click")))
//$$ })
//$$ }).append(
//$$ TranslatableComponent("text.e4mc_minecraft.clickToStop").withStyle {
//$$ return@withStyle it
//$$ .withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND, "/e4mc stop"))
//$$ .withColor(ChatFormatting.GRAY)
//$$ }
//$$ )
//#endif
}

View file

@ -1,3 +1,6 @@
{
"text.e4mc_quilt.domainAssigned": "Τοπικό παιχνίδι εξυπηρετήται στη διεύθηνση [%s]"
"text.e4mc_minecraft.domainAssigned": "Τοπικό παιχνίδι εξυπηρετήται στη διεύθηνση [%s]",
"text.e4mc_minecraft.closeServer": "Το τοπικό παιχνίδι δεν εξυπηρετήται δημόσια πλέον",
"text.e4mc_minecraft.serverAlreadyClosed": "Το τοπικό παιχνίδι δεν εξυπηρετήται δημόσια",
"text.e4mc_minecraft.clickToStop": " (Πατήστε εδώ για απενεργοποίηση)"
}

View file

@ -1,3 +1,6 @@
{
"text.e4mc_quilt.domainAssigned": "Local game hosted on domain [%s]"
"text.e4mc_minecraft.domainAssigned": "Local game hosted on domain [%s]",
"text.e4mc_minecraft.closeServer": "Local game no longer publicly hosted",
"text.e4mc_minecraft.serverAlreadyClosed": "Local game not publicly hosted",
"text.e4mc_minecraft.clickToStop": " (Click here to stop)"
}

View file

@ -1,3 +1,6 @@
{
"text.e4mc_quilt.domainAssigned": "Kohalik mäng on üles seatud domeenil [%s]"
"text.e4mc_minecraft.domainAssigned": "Kohalik mäng on üles seatud domeenil [%s]",
"text.e4mc_minecraft.closeServer": "Kohalik mäng ei ole enam avalikult hostitud",
"text.e4mc_minecraft.serverAlreadyClosed": "Kohalik mäng ei ole avalikult hostitud",
"text.e4mc_minecraft.clickToStop": " (Klõpsa lõpetamiseks)"
}