feat: add way to stop e4mc
This commit is contained in:
parent
df7ceb5911
commit
ab56f6dc19
7 changed files with 117 additions and 15 deletions
|
@ -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
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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": " (Πατήστε εδώ για απενεργοποίηση)"
|
||||
}
|
|
@ -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)"
|
||||
}
|
||||
|
|
|
@ -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)"
|
||||
}
|
Loading…
Reference in a new issue