forked from me/e4mc_minecraft
		
	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