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.name=e4mc | ||||||
| mod.id=e4mc_minecraft | mod.id=e4mc_minecraft | ||||||
| mod.version=2.1.0 | mod.version=3.0.0 | ||||||
| mod.group=vg.skye | 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.Inject; | ||||||
| import org.spongepowered.asm.mixin.injection.Redirect; | import org.spongepowered.asm.mixin.injection.Redirect; | ||||||
| import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; | ||||||
|  | import vg.skye.e4mc_minecraft.E4mcClient; | ||||||
| import vg.skye.e4mc_minecraft.E4mcRelayHandler; | import vg.skye.e4mc_minecraft.E4mcRelayHandler; | ||||||
| 
 | 
 | ||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  | @ -22,7 +23,6 @@ import java.net.InetAddress; | ||||||
| @Mixin(ServerNetworkIo.class) | @Mixin(ServerNetworkIo.class) | ||||||
| public abstract class ServerNetworkIoMixin { | public abstract class ServerNetworkIoMixin { | ||||||
| 	private static final ThreadLocal<Boolean> initializingE4mc = ThreadLocal.withInitial(() -> false); | 	private static final ThreadLocal<Boolean> initializingE4mc = ThreadLocal.withInitial(() -> false); | ||||||
| 	private static E4mcRelayHandler e4mcHandler = null; |  | ||||||
| 
 | 
 | ||||||
| 	@Shadow | 	@Shadow | ||||||
| 	public abstract void bind(@Nullable InetAddress address, int port) throws IOException; | 	public abstract void bind(@Nullable InetAddress address, int port) throws IOException; | ||||||
|  | @ -40,7 +40,7 @@ public abstract class ServerNetworkIoMixin { | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			E4mcRelayHandler handler = new E4mcRelayHandler(); | 			E4mcRelayHandler handler = new E4mcRelayHandler(); | ||||||
| 			e4mcHandler = handler; | 			E4mcClient.HANDLER = handler; | ||||||
| 			handler.connect(); | 			handler.connect(); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -56,8 +56,10 @@ public abstract class ServerNetworkIoMixin { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Inject(method = "stop", at = @At("HEAD")) | 	@Inject(method = "stop", at = @At("HEAD")) | ||||||
| 	private void bind(CallbackInfo ci) { | 	private void stop(CallbackInfo ci) { | ||||||
| 		e4mcHandler.close(); | 		if (E4mcClient.HANDLER != null) { | ||||||
|  | 			E4mcClient.HANDLER.close(); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,27 +2,100 @@ package vg.skye.e4mc_minecraft | ||||||
| 
 | 
 | ||||||
| //#if FABRIC==1 | //#if FABRIC==1 | ||||||
| import net.fabricmc.api.ModInitializer | 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 | //#else | ||||||
| //$$ import net.minecraftforge.fml.common.Mod | //$$ 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 | //#endif | ||||||
| import org.slf4j.Logger | import org.slf4j.Logger | ||||||
| import org.slf4j.LoggerFactory | import org.slf4j.LoggerFactory | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| //#if FORGE==1 | //#if FORGE==1 | ||||||
| //$$ @Mod("e4mc_minecraft") | //$$ @Mod("e4mc_minecraft") | ||||||
|  | //$$ @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE) | ||||||
| //$$ object E4mcClient { | //$$ object E4mcClient { | ||||||
| //#else | //#else | ||||||
| object E4mcClient : ModInitializer { | object E4mcClient : ModInitializer { | ||||||
| //#endif | //#endif | ||||||
|     const val NAME = "e4mc" |     const val NAME = "e4mc" | ||||||
|     const val ID = "e4mc_minecraft" |     const val ID = "e4mc_minecraft" | ||||||
|     const val VERSION = "2.1.0" |     const val VERSION = "3.0.0" | ||||||
|     @JvmField |     @JvmField | ||||||
|     val LOGGER: Logger = LoggerFactory.getLogger("e4mc") |     val LOGGER: Logger = LoggerFactory.getLogger("e4mc") | ||||||
|  |     @JvmField | ||||||
|  |     var HANDLER: E4mcRelayHandler? = null | ||||||
| 
 | 
 | ||||||
|     //#if FABRIC==1 |     //#if FABRIC==1 | ||||||
|     override fun onInitialize() { |     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 |     //#endif | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -122,28 +122,46 @@ class E4mcRelayHandler: WebSocketClient(URI("wss://ingress.e4mc.link")) { | ||||||
|     private fun createMessage(domain: String): Text { |     private fun createMessage(domain: String): Text { | ||||||
|         //#if MC>=11900 |         //#if MC>=11900 | ||||||
|         return Text.translatable( |         return Text.translatable( | ||||||
|             "text.e4mc_quilt.domainAssigned", |             "text.e4mc_minecraft.domainAssigned", | ||||||
|             Text.literal(domain).styled { |             Text.literal(domain).styled { | ||||||
|                 it |                 it | ||||||
|                     .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain)) |                     .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain)) | ||||||
|                     .withColor(Formatting.GREEN) |                     .withColor(Formatting.GREEN) | ||||||
|                     .withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.translatable("chat.copy.click"))) |                     .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 |         //#elseif FABRIC==1 | ||||||
|         //$$ return TranslatableText("text.e4mc_quilt.domainAssigned", LiteralText(domain).styled { |         //$$ return TranslatableText("text.e4mc_minecraft.domainAssigned", LiteralText(domain).styled { | ||||||
|         //$$     return@styled it |         //$$     return@styled it | ||||||
|         //$$         .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain)) |         //$$         .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain)) | ||||||
|         //$$         .withColor(Formatting.GREEN) |         //$$         .withColor(Formatting.GREEN) | ||||||
|         //$$         .withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, TranslatableText("chat.copy.click"))) |         //$$         .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 |         //#else | ||||||
|         //$$ return TranslatableComponent("text.e4mc_quilt.domainAssigned", TextComponent(domain).withStyle { |         //$$ return TranslatableComponent("text.e4mc_minecraft.domainAssigned", TextComponent(domain).withStyle { | ||||||
|         //$$     return@withStyle it |         //$$     return@withStyle it | ||||||
|         //$$         .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain)) |         //$$         .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, domain)) | ||||||
|         //$$         .withColor(ChatFormatting.GREEN) |         //$$         .withColor(ChatFormatting.GREEN) | ||||||
|         //$$         .withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, TranslatableComponent("chat.copy.click"))) |         //$$         .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 |         //#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