Skip to content

Commit

Permalink
[Port] Update to 1.6.4 (v2.5.3)
Browse files Browse the repository at this point in the history
  • Loading branch information
CDAGaming committed Jan 14, 2025
1 parent 90f63c5 commit d95b54c
Show file tree
Hide file tree
Showing 13 changed files with 47 additions and 171 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
package com.gitlab.cdagaming.craftpresence.core;

import com.gitlab.cdagaming.unilib.core.CoreUtils;
import com.gitlab.cdagaming.unilib.core.integrations.logging.ApacheLogger;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.github.cdagaming.unicore.integrations.logging.JavaLogger;
import io.github.cdagaming.unicore.integrations.logging.LoggingImpl;
Expand Down Expand Up @@ -87,7 +86,7 @@ public class Constants {
/**
* The Application's Instance of {@link LoggingImpl} for Logging Information
*/
public static final LoggingImpl LOG = CoreUtils.IS_LEGACY_SOFT ? new JavaLogger(MOD_ID) : new ApacheLogger(MOD_ID);
public static final JavaLogger LOG = new JavaLogger(MOD_ID);

/**
* The Application's Instance of {@link TranslationUtils} for Localization and Translating Data Strings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,8 @@ public Config apply(Config instance, JsonElement rawJson, Object... args) {

// Per-GUI Events
instance.advancedSettings.enablePerGui = true;
instance.advancedSettings.guiSettings.guiData.put("GuiScreenRealmsProxy", new ModuleData()
.setData(convertPresenceData(conf.get("realms_list"))));
instance.advancedSettings.guiSettings.guiData.put("GuiMultiplayer", new ModuleData()
.setData(convertPresenceData(conf.get("server_list"))));
instance.advancedSettings.guiSettings.guiData.put("GuiScreenWorking", new ModuleData()
.setData(convertPresenceData(conf.get("join_game"))));
instance.advancedSettings.guiSettings.guiData.put("GuiDownloadTerrain", new ModuleData()
.setData(convertPresenceData(conf.get("join_game"))));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
import org.meteordev.starscript.utils.VariableReplacementTransformer;
import org.meteordev.starscript.value.Value;
import org.meteordev.starscript.value.ValueMap;
import org.slf4j.impl.JDK14LoggerFactory;

import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -224,6 +225,9 @@ public void setup() {
public void init(final boolean debugMode, final boolean verboseMode, final IPCListener listener, final Map<String, String> dynamicIcons) {
// Create IPC Instance
ipcInstance = new IPCClient(Long.parseLong(CLIENT_ID), debugMode, verboseMode, AUTO_REGISTER, CLIENT_ID);
ipcInstance.setForcedLogger(new JDK14LoggerFactory().getLogger(
Constants.LOG.getLogInstance().getName()
));
if (listener != null) {
ipcInstance.setListener(listener);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,9 @@ public void updatePresence() {

@Override
public void getInternalData() {
if (!EntityList.method_8367().isEmpty()) {
for (Object entityLocationObj : EntityList.method_8367()) {
final Map mappings = (Map) StringUtils.getField(EntityList.class, null, "classToStringMapping", "field_75626_c", "field_3269", "c");
if (!mappings.values().isEmpty()) {
for (Object entityLocationObj : mappings.values()) {
final String entityLocation = (String) entityLocationObj;
if (entityLocation != null) {
final String entityName = StringUtils.getOrDefault(entityLocation, "generic");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -365,8 +365,7 @@ public void updatePresence() {

@Override
public void getInternalData() {
for (Object blockObj : Block.blockRegistry) {
final Block block = Block.getBlockById(Block.blockRegistry.getIDForObject(blockObj));
for (Block block : Block.blocksList) {
if (!ItemUtils.isItemEmpty(block)) {
final ItemStack stack = ItemUtils.getStackFrom(block);
final String blockName = ItemUtils.getItemName(stack);
Expand All @@ -382,8 +381,7 @@ public void getInternalData() {
}
}

for (Object itemObj : Item.itemRegistry) {
final Item item = Item.getItemById(Item.itemRegistry.getIDForObject(itemObj));
for (Item item : Item.itemsList) {
if (!ItemUtils.isItemEmpty(item)) {
final ItemStack stack = ItemUtils.getStackFrom(item);
final String itemName = ItemUtils.getItemName(stack);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import io.github.cdagaming.unicore.utils.MappingUtils;
import io.github.cdagaming.unicore.utils.StringUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import unilib.external.io.github.classgraph.ClassInfo;
Expand Down Expand Up @@ -214,12 +213,13 @@ public void renderSlotItem(final String originalName, final int xPos, final int
String assetUrl;

if (renderType == RenderType.ServerData) {
final ServerData data = CraftPresence.SERVER.getDataFromName(originalName);
// Note: ServerData Base64 unavailable in MC 1.6.4 and below
/*final ServerData data = CraftPresence.SERVER.getDataFromName(originalName);
if (data != null && !StringUtils.isNullOrEmpty(data.getBase64EncodedIconData())) {
assetUrl = "data:image/png;base64," + data.getBase64EncodedIconData();
texture = ImageUtils.getTextureFromUrl(getGameInstance(), originalName, new Pair<>(ImageUtils.InputType.ByteStream, assetUrl));
} else if (CraftPresence.CONFIG.advancedSettings.allowEndpointIcons &&
} else */if (CraftPresence.CONFIG.advancedSettings.allowEndpointIcons &&
!StringUtils.isNullOrEmpty(CraftPresence.CONFIG.advancedSettings.serverIconEndpoint)) {
final String formattedIP = originalName.contains(":") ? StringUtils.formatAddress(originalName, false) : originalName;
final String endpointUrl = CraftPresence.CLIENT.compileData(String.format(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,27 +35,24 @@
import com.gitlab.cdagaming.unilib.utils.WorldUtils;
import com.gitlab.cdagaming.unilib.utils.gui.RenderUtils;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.realmsclient.RealmsMainScreen;
import com.mojang.realmsclient.dto.McoServer;
import io.github.cdagaming.unicore.impl.Pair;
import io.github.cdagaming.unicore.utils.MathUtils;
import io.github.cdagaming.unicore.utils.StringUtils;
import io.github.cdagaming.unicore.utils.TimeUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiMultiplayer;
import net.minecraft.client.gui.GuiPlayerInfo;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiScreenRealmsProxy;
import net.minecraft.client.multiplayer.GuiConnecting;
import net.minecraft.client.multiplayer.NetClientHandler;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.client.multiplayer.ServerList;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.client.network.OldServerPinger;
import net.minecraft.server.integrated.IntegratedServer;

import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.*;
import java.util.function.Supplier;

Expand Down Expand Up @@ -91,10 +88,6 @@ public class ServerUtils implements ExtendedModule {
private static final List<String> invalidNames = StringUtils.newArrayList(
"selectServer.defaultName"
);
/**
* The Ping Service to use when polling Minecraft Server Data
*/
private final OldServerPinger pinger = new OldServerPinger();
/**
* The Current Player Map, if available
*/
Expand Down Expand Up @@ -191,14 +184,10 @@ public class ServerUtils implements ExtendedModule {
* The Current Server Connection Data and Info
*/
private ServerData currentServerData;
/**
* The Current Realm Connection Data and Info
*/
private McoServer currentRealmData;
/**
* The Player's Current Connection Data
*/
private NetHandlerPlayClient currentConnection;
private NetClientHandler currentConnection;
/**
* If the RPC needs to be Updated or Re-Synchronized<p>
* Needed here for Multiple-Condition RPC Triggers
Expand Down Expand Up @@ -240,7 +229,6 @@ public void clearAttributes() {
currentServer_Name = null;
currentIntegratedData = null;
currentServerData = null;
currentRealmData = null;
currentConnection = null;
currentPlayers = 0;
maxPlayers = 0;
Expand All @@ -267,49 +255,25 @@ public void preTick() {
joinInProgress = CraftPresence.CLIENT.STATUS == DiscordStatus.JoinGame || CraftPresence.CLIENT.STATUS == DiscordStatus.SpectateGame;
}

/**
* Attempt to locate Realm Data from the current connection
*
* @param connection The Server Connection Data and Info
* @return the found realm data, or null
*/
@SuppressWarnings("RedundantCast")
private McoServer findRealmData(final NetHandlerPlayClient connection) {
try {
if (connection.guiScreenServer instanceof GuiScreenRealmsProxy realmsProxy &&
realmsProxy.method_6724() instanceof RealmsMainScreen realmsMainScreen) {
return (McoServer) StringUtils.executeMethod(
RealmsMainScreen.class, realmsMainScreen,
new Class[]{long.class},
new Object[]{(long) StringUtils.getField(
RealmsMainScreen.class, realmsMainScreen,
"selectedServerId"
)},
"findServer"
);
}
} catch (Throwable ignored) {
}
return null;
}

@Override
public void updateData() {
final IntegratedServer newIntegratedData = CraftPresence.instance.getIntegratedServer();
final ServerData newServerData = CraftPresence.instance.getCurrentServerData();
final NetHandlerPlayClient newConnection = CraftPresence.instance.getNetHandler();
ServerData newServerData;
final NetClientHandler newConnection = CraftPresence.instance.getNetHandler();

try {
newServerData = (ServerData) StringUtils.getField(Minecraft.class, CraftPresence.instance, "currentServerData", "field_71422_O", "field_3773", "M");
} catch (Exception ex) {
newServerData = null;
}

if (!joinInProgress) {
// If connected to a Realm, locate the RealmServer instance
// before continuing any further in module ticking
//
// Note: A Realm is only checked for *once* under set conditions
if (!hasCheckedRealm) {
final boolean canCheckRealm = newServerData != null && newConnection != null;
if (canCheckRealm) {
currentRealmData = findRealmData(newConnection);
isOnRealm = currentRealmData != null;
}
isOnRealm = false;
hasCheckedRealm = true;
}

Expand Down Expand Up @@ -346,7 +310,7 @@ public void updateData() {
* @param newPlayerList The Current Player Map, if available
*/
private void processData(final boolean newLANStatus, final boolean newSinglePlayerStatus,
final IntegratedServer newIntegratedData, final ServerData newServerData, final NetHandlerPlayClient newConnection,
final IntegratedServer newIntegratedData, final ServerData newServerData, final NetClientHandler newConnection,
final String newServer_IP, final String newServer_MOTD, final String newServer_Name,
final int newCurrentPlayers, final int newMaxPlayers, final List<GuiPlayerInfo> newPlayerList) {
final boolean isNewServer = newServerData != null && !newServerData.equals(currentServerData);
Expand Down Expand Up @@ -453,27 +417,8 @@ private String getServerMotd(final IntegratedServer newIntegratedData, final Ser
* @param newServerData The Current Server Connection Data and Info
* @param newConnection The Player's Current Connection Data
*/
private void processRealmData(final ServerData newServerData, final NetHandlerPlayClient newConnection) {
final List<GuiPlayerInfo> newPlayerList = newConnection != null ? StringUtils.newArrayList(newConnection.playerInfoList) : StringUtils.newArrayList();
final int newCurrentPlayers = newConnection != null ? newConnection.playerInfoList.size() : 1;

// Setup Player Maximum (Hardcoded for Realms)
int newMaxPlayers = 10;
if (newMaxPlayers < newCurrentPlayers) {
newMaxPlayers = newCurrentPlayers + 1;
}

final String newServer_IP = getServerAddress(newServerData);
final String newServer_Name = currentRealmData.getName();
final String newServer_MOTD = !isInvalidMotd(currentRealmData.getMotd()) ?
StringUtils.stripAllFormatting(currentRealmData.getMotd()) : CraftPresence.CONFIG.serverSettings.fallbackServerMotd;

processData(false, false,
null, newServerData, newConnection,
newServer_IP, newServer_MOTD, newServer_Name,
newCurrentPlayers, newMaxPlayers,
newPlayerList
);
private void processRealmData(final ServerData newServerData, final NetClientHandler newConnection) {
processServerData(null, newServerData, newConnection);
}

/**
Expand All @@ -483,11 +428,11 @@ private void processRealmData(final ServerData newServerData, final NetHandlerPl
* @param newServerData The Current Server Connection Data and Info
* @param newConnection The Player's Current Connection Data
*/
private void processServerData(final IntegratedServer newIntegratedData, final ServerData newServerData, final NetHandlerPlayClient newConnection) {
private void processServerData(final IntegratedServer newIntegratedData, final ServerData newServerData, final NetClientHandler newConnection) {
final List<GuiPlayerInfo> newPlayerList = newConnection != null ? StringUtils.newArrayList(newConnection.playerInfoList) : StringUtils.newArrayList();
final int newCurrentPlayers = newConnection != null ? newConnection.playerInfoList.size() : 1;

final boolean newLANStatus = (newIntegratedData != null && newIntegratedData.getPublic()) || (newServerData != null && newServerData.isLanServer());
final boolean newLANStatus = (newIntegratedData != null && newIntegratedData.getPublic()) || (CraftPresence.player != null && !CraftPresence.world.isRemote);
final boolean newSinglePlayerStatus = !newLANStatus && CraftPresence.instance.isSingleplayer();

// Setup Player Maximum (Hardcoded for LAN)
Expand Down Expand Up @@ -592,7 +537,7 @@ public void verifyAndJoin(final String secret) {
final boolean isValidSecret = boolParts.length <= 4 && stringParts.length <= 3 && containsValidClientID;

if (isValidSecret) {
ModUtils.executeOnMainThread(CraftPresence.instance, () -> joinServer(new ServerData(serverName, serverIP, false)));
ModUtils.executeOnMainThread(CraftPresence.instance, () -> joinServer(new ServerData(serverName, serverIP)));
} else {
Constants.LOG.error(Constants.TRANSLATOR.translate("craftpresence.logger.error.discord.join", secret));
}
Expand Down Expand Up @@ -623,11 +568,7 @@ private void pingServer(final ServerData serverData, final Runnable saver, final
}
PING_EXECUTOR.submit(() -> {
try {
final String iconData = serverData.getBase64EncodedIconData();
pinger.ping(serverData);
if (!Objects.equals(iconData, serverData.getBase64EncodedIconData())) {
saverEvent.run();
}
StringUtils.executeMethod(GuiMultiplayer.class, null, new Class[]{ServerData.class}, new Object[]{serverData}, "func_74017_b", "method_1007", "c");
callbackEvent.run();
} catch (Exception ex) {
serverData.pingToServer = -1L;
Expand Down Expand Up @@ -757,7 +698,7 @@ public void initPresence() {
syncArgument("world.difficulty", () -> {
final String newDifficulty = CraftPresence.world.getWorldInfo().isHardcoreModeEnabled() && ModUtils.RAW_TRANSLATOR != null ?
ModUtils.RAW_TRANSLATOR.translate("selectWorld.gameMode.hardcore") :
StringUtils.formatWord(CraftPresence.world.difficultySetting.name().toLowerCase());
Integer.toString(CraftPresence.world.difficultySetting);
return StringUtils.getOrDefault(newDifficulty);
});
syncArgument("world.weather.name", () -> {
Expand Down Expand Up @@ -862,7 +803,7 @@ public void initPresence() {
// Attempt to find alternative icons, if no overrides are present
if (StringUtils.isNullOrEmpty(currentServerIcon)) {
// Logic cloned from ScrollableListControl#renderSlotItem
final String originalName = currentRealmData.owner;
final String originalName = "";
final boolean isValidUuid = StringUtils.isValidUuid(originalName);
if (!CraftPresence.CONFIG.hasChanged() && CraftPresence.CONFIG.advancedSettings.allowEndpointIcons &&
!StringUtils.isNullOrEmpty(CraftPresence.CONFIG.advancedSettings.playerSkinEndpoint)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,8 @@ public void updatePresence() {
private List<BiomeGenBase> getBiomeTypes() {
List<BiomeGenBase> biomeTypes = StringUtils.newArrayList();

if (BiomeGenBase.getBiomeGenArray() != null) {
for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) {
if (BiomeGenBase.biomeList != null) {
for (BiomeGenBase biome : BiomeGenBase.biomeList) {
if (biome != null && !biomeTypes.contains(biome)) {
biomeTypes.add(biome);
}
Expand Down
3 changes: 0 additions & 3 deletions fabric/src/main/resources/craftpresence.accesswidener

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
*
* @author CDAGaming
*/
@Mod(modid = "@MOD_ID@", name = "@MOD_NAME@", version = "@VERSION_ID@", guiFactory = "com.gitlab.cdagaming.craftpresence.forge.config.ConfigGuiDataFactory", canBeDeactivated = true, acceptedMinecraftVersions = "*", dependencies = "@UNILIB_LEGACY_RANGE@")
@Mod(modid = "@MOD_ID@", name = "@MOD_NAME@", version = "@VERSION_ID@", acceptedMinecraftVersions = "*", dependencies = "@UNILIB_LEGACY_RANGE@")
public class CraftPresenceForge {
/**
* Begins Scheduling Ticks on Class Initialization
Expand Down
Loading

0 comments on commit d95b54c

Please sign in to comment.