Skip to content

Commit

Permalink
Stable Beta - 0.8.3.9
Browse files Browse the repository at this point in the history
  • Loading branch information
wanomaniac committed Aug 20, 2024
1 parent c84bdcc commit 894d186
Show file tree
Hide file tree
Showing 13 changed files with 445 additions and 182 deletions.
18 changes: 14 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Server Mod Menu
### A direct fork of [ModMenu](https://github.com/TerraformersMC/ModMenu) made for downloading and getting details of server mods
![An image](https://cdn.modrinth.com/data/mdAdBC85/images/bab950bf491ccdb79a2b7b5001cf3ebc86f847cb.png)

## Running and using this mod
It's pretty easy, download the mod's jar file and run minecraft.
Expand All @@ -15,12 +16,21 @@ Since this mod needs to see the mods, i created a secondary server side mod name
## For server owners
You can download the appropriate version of [SCMC](https://github.com/SkellyBuilds/scmc) for your server, make sure to read the documentation so that you don't make your members download unnecessary server side mods that aren't flagged as server side only.

## ChangeLog
* Fixed the calculations for Showing [Number] servers
* Added different (buggy) colors for optional & required mods for the mod list.
* Optional mods are an thing now (As of SCMC version 0.9.2.7) and they are now natively supported to servermodmenu
* Bug fixes
* ***Added SRV support! Learn more [here](https://github.com/SkellyBuilds/scmc/wiki/Getting-started-using-SCMC#how-do-i-use-different-ports-properly)***

## Stuff that hasn't been worked on
* Translations - Switching the language that isn't EN_US will pretty make the mod chaotic. I will plan on making a crowdin as well but for now. Sorry :(
* Some bug fixes related to the GUI (Not anything related to the backend code like downloading, reloading and etc)
* **Translations - Switching the language that isn't EN_US will pretty make the mod chaotic. I will plan on making a crowdin as well but for now. Sorry :(**

I hope you find this mod useful :D
- SkellyBuilds
## Future plans
* Look for any translators, if you are willing to become a translator, join the [discord server](https://discord.gg/PqHCG2qv) and we'll see how this will go
* Fix most minor GUI bugs but honestly have no idea where to begin (The odd selectipn colors)
* Add a button on the disconnect screen if its related to server mod menu
* Clean up the code a little bit (But thats probably going to happen when i port it to 1.21.2)

## Not important but might help this project
If you already read, i have a host that runs a minecraft server and serveral of my stuff. This can be expensive so support could me alot while making this
Expand Down
6 changes: 6 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ plugins {
id 'fabric-loom' version '1.1-SNAPSHOT'
}

apply plugin: 'java'

compileJava {
options.compilerArgs << '-Xlint:unchecked'
}

apply from: './ferry.gradle'

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ yarn_mappings=1.20.1+build.2
loader_version=0.16.0
fabric_version=0.92.2+1.20.1
quilt_loader_version=0.17.7
mod_version=0.8.1.0
mod_version=0.8.3.9
# Project Metadata
project_name=Server Mod Menu
project_url=https://modrinth.com/mod/servermodmenu
Expand Down
Empty file modified gradlew
100644 → 100755
Empty file.
68 changes: 52 additions & 16 deletions src/main/java/com/skellybuilds/servermodmenu/ModMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@
import net.fabricmc.loader.api.ModContainer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.network.ServerInfo;
import net.minecraft.client.network.*;
import net.minecraft.client.option.ServerList;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetSocketAddress;
import java.text.NumberFormat;
import java.util.*;

Expand All @@ -51,6 +52,8 @@ public class ModMenu implements ClientModInitializer {
public static boolean runningQuilt = FabricLoader.getInstance().isModLoaded("quilt_loader");
public static boolean devEnvironment = FabricLoader.getInstance().isDevelopmentEnvironment();



public static Screen getConfigScreen(String modid, Screen menuScreen) {
if (!delayedScreenFactoryProviders.isEmpty()) {
delayedScreenFactoryProviders.forEach(map -> map.forEach(configScreenFactories::putIfAbsent));
Expand All @@ -71,14 +74,37 @@ public static void sendmodstonetwork(ServerList serverList, MinecraftClient clie
for (int i = 0; i < serverList.size(); i++) {
ServerInfo serverInfo = serverList.get(i);

List<String> stringArray = new ArrayList<>();
for (ModContainer mod : FabricLoader.getInstance().getAllMods()) {
stringArray.add(mod.getMetadata().getId());
if(serverInfo.address.contains(":")){
serverInfo.address = serverInfo.address.substring(0, serverInfo.address.indexOf(":"));
}

String data = "{\"playerN\":" + client.getSession().getUsername() + ", \"data\":" + stringArray.toString() + "}";
MainNetwork.connect(serverInfo.address, 27752);
MainNetwork.sendDataToServer(serverInfo.address, "addpmods|" + data);
Networking.ServerAddress parsedAd = Networking.ServerAddress.parse(serverInfo.address);

Optional<InetSocketAddress> optAddress = Networking.AllowedAddressResolver.DEFAULT.resolve(parsedAd).map(Address::getInetSocketAddress);
if(optAddress.isPresent()) {
final InetSocketAddress inetSocketAddress = (InetSocketAddress) optAddress.get();

List<String> stringArray = new ArrayList<>();
for (ModContainer mod : FabricLoader.getInstance().getAllMods()) {
stringArray.add(mod.getMetadata().getId());
}

String testS = inetSocketAddress.getAddress().getHostAddress();

String data = "{\"playerN\":" + client.getSession().getUsername() + ", \"data\":" + stringArray.toString() + "}";
MainNetwork.connect(testS, inetSocketAddress.getPort());

MainNetwork.sendDataToServer(testS, "addpmods|" + data);
} else {
List<String> stringArray = new ArrayList<>();
for (ModContainer mod : FabricLoader.getInstance().getAllMods()) {
stringArray.add(mod.getMetadata().getId());
}

String data = "{\"playerN\":" + client.getSession().getUsername() + ", \"data\":" + stringArray.toString() + "}";
MainNetwork.connect(serverInfo.address, 27752);
MainNetwork.sendDataToServer(serverInfo.address, "addpmods|" + data);
}
}


Expand All @@ -96,19 +122,29 @@ public void onInitializeClient() {
for (int i = 0; i < serverList.size(); i++) {
ServerInfo serverInfo = serverList.get(i);

if(socketLoops.get(serverInfo.address) != null)
{
new Thread(socketLoops.get(serverInfo.address)).start();
Networking.ServerAddress parsedAd = Networking.ServerAddress.parse(serverInfo.address);

Optional<InetSocketAddress> optAddress = Networking.AllowedAddressResolver.DEFAULT.resolve(parsedAd).map(Address::getInetSocketAddress);
if(optAddress.isPresent()) {
final InetSocketAddress inetSocketAddress = (InetSocketAddress) optAddress.get();
if (socketLoops.get(inetSocketAddress.getAddress().getHostAddress()) != null) {
new Thread(socketLoops.get(serverInfo.address)).start();
} else {
Networking.SocketStatusLoop loop = new Networking.SocketStatusLoop(serverInfo.address, inetSocketAddress.getPort());
socketLoops.put(serverInfo.address, loop);
new Thread(loop).start();
}
} else {
Networking.SocketStatusLoop loop = new Networking.SocketStatusLoop(serverInfo.address);
socketLoops.put(serverInfo.address, loop);
new Thread(loop).start();
if (socketLoops.get(serverInfo.address) != null) {
new Thread(socketLoops.get(serverInfo.address)).start();
} else {
Networking.SocketStatusLoop loop = new Networking.SocketStatusLoop(serverInfo.address);
socketLoops.put(serverInfo.address, loop);
new Thread(loop).start();
}
}
}




ModMenuConfigManager.initializeConfig();
Set<String> modpackMods = new HashSet<>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public SMod deserialize(JsonElement json, Type typeOfT, JsonDeserializationConte
JsonObject metaJ = jsonObject.get("meta").getAsJsonObject();
SMod.ModMeta meta = gson2.fromJson(metaJ, SMod.ModMeta.class);
boolean isComponent = jsonObject.get("isComponent").getAsBoolean();
return new SMod(version, id, meta, isComponent);
// Previous SCMC versions do not have this as a variable
boolean isOptional = jsonObject.get("isOptional") != null && jsonObject.get("isOptional").getAsBoolean();
return new SMod(version, id, meta, isComponent, isOptional);
}
}
9 changes: 8 additions & 1 deletion src/main/java/com/skellybuilds/servermodmenu/db/SMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,20 @@ public class SMod {
public String server;
public ModMeta meta;
public boolean isComponent = false;
public boolean isOptional = false;
public boolean isDownloaded = false;
public SMod() {}

public SMod(String version, String id, ModMeta meta, Boolean isComponent) {
public SMod(String version, String id, ModMeta meta, Boolean isComponent, Boolean isOptional) {
this.version = version;
this.id = id;
this.meta = meta;
this.isComponent = isComponent;
this.isOptional = isOptional;
}

public void setDownloaded(boolean d){
isDownloaded = d;
}

public String getVersion() {
Expand Down
Loading

0 comments on commit 894d186

Please sign in to comment.