Skip to content

Commit

Permalink
1.3.0
Browse files Browse the repository at this point in the history
 - Added support for Minecraft 1.20.6 & 1.21 (also Java 21)
 * Dropped Russian translation due to it is outdated (PR is welcomed)

Technical Changes:
 - Optimized code (with some reverts)
 - Upgraded Gradle to 8.8; Upgraded dependencies
 - Supported Actions Workflow

Notice:
This version hasn't been tested yet, the stable version will be released on Modrinth after testing.
  • Loading branch information
XIAYM-gh committed Jul 1, 2024
1 parent 0fe1910 commit 1d2512f
Show file tree
Hide file tree
Showing 30 changed files with 236 additions and 167 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Build Mod
on: [ push, pull_request ]

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v3

- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: 21
distribution: temurin
cache: gradle

- name: Build Now
run: |
chmod +x gradlew
./gradlew build
- name: Find Output Jar
id: findjar
run: |
output="$(find fabricWrapper/build/libs/ ! -name "*-dev.jar" ! -name "*-sources.jar" -type f -printf "%f\n")"
echo "jarname=$output" >> $GITHUB_OUTPUT
- name: Upload Jar
uses: actions/upload-artifact@v4
with:
name: ${{ steps.findjar.outputs.jarname }}
path: fabricWrapper/build/libs/*.jar
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,6 @@ bin/
.project

# fabric
run/

run/
/versions/**/src/
38 changes: 30 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,36 @@
# Show My Skin Parts
A simple mod for Minecraft 1.19.4 & 1.20.4 (Other versions are not tested).

A simple mod for Minecraft 1.19.4, 1.20.4/6 & 1.21 (Other versions are not tested).
The configure screen requires `Cloth Config` and `Mod Menu` to open (or you can edit the configuration file manually).

### Why use it and What does it do?
For some reason, some minecraft servers (especially 1.19.3) won't send you your skin parts if you enter another dimension,
and it makes your skin looks **ugly**.
### Why use it and What does it do?

For some reason, some minecraft servers (especially 1.19.3) won't send you your skin parts if you enter another
dimension,
and it makes your skin looks **ugly**.

With this mod, your skin parts will always be shown (Following the client's skin options).
And it will automatically "refresh" your skin parts in order to enable your skin parts to be seen to others (It's configurable).
If other players still cannot see your skin parts, you can simply press `N` to refresh your skin parts manually.
With this mod, your skin layers will always be shown (Following the client's skin options).
And it will automatically resend your client's options in order to enable your skin layers to be seen to others (Configurable).
If other players still cannot see your skin layers, you can simply press `N` to refresh your skin parts manually.

### Notice
This mod doesn't seem work well with 3d-Skin-Layers, so please disable it first and try again before reporting bugs if it's installed.

This mod doesn't seem work well with 3d-Skin-Layers, so please disable it first and try again before reporting bugs if
it's installed.

### Compiling

To compile on *nix operating systems, run:

```shell
chmod +x gradlew
./gradlew build
```

For Windows, run:

```batch
gradlew build
```

Then, the mod jar file will be located at `fabricWrapper/build/libs/ShowMySkinParts-{VERSION}-all.jar`.
6 changes: 5 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
plugins {
id 'fabric-loom' version '1.5-SNAPSHOT' apply false
id 'fabric-loom' version '1.6-SNAPSHOT' apply false
id 'com.replaymod.preprocess' version '16a0d7b710'
}

preprocess {
def mc1194 = createNode('1.19.4', 1_19_04, 'mojang')
def mc1204 = createNode('1.20.4', 1_20_04, 'mojang')
def mc1206 = createNode('1.20.6', 1_20_06, 'mojang')
def mc1210 = createNode('1.21', 1_21_00, 'mojang')

mc1194.link(mc1204, null)
mc1204.link(mc1206, null)
mc1206.link(mc1210, null)
}

tasks.register('cleanPreprocessSources') {
Expand Down
2 changes: 1 addition & 1 deletion fabricWrapper/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jar {
processResources {
// disable cache
outputs.upToDateWhen { false }
ArrayList<?> mc_condition = []
HashSet<?> mc_condition = []
ArrayList<?> jars = []

fabric_subprojects.each({
Expand Down
2 changes: 1 addition & 1 deletion fabricWrapper/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"environment": "client",
"entrypoints": {
"modmenu": [
"cn.xiaym.spr.compat.modmenu.ModMenuEntry"
"cn.xiaym.skin.compat.modmenu.ModMenuEntry"
]
},
"depends": {
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Gradle properties
org.gradle.cache.cleanup=false
org.gradle.jvmargs=-Xmx1G
# org.gradle.parallel=true
org.gradle.parallel=true

# Mod Properties
mod_archives_base_name=ShowMySkinParts
Expand All @@ -11,8 +11,8 @@ mod_maven_group=top.nlrdev
mod_name=Show My Skin Parts
mod_homepage=https://github.com/NLR-DevTeam/ShowMySkinParts
mod_sources=https://github.com/NLR-DevTeam/ShowMySkinParts
mod_version=1.2.0
mod_version=1.3.0
mod_license=MIT

# Global Dependency
fabric_loader_version=0.15.7
fabric_loader_version=0.15.11
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
5 changes: 3 additions & 2 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@ pluginManagement {

def versions = [
'1.19.4',
'1.20.4'
'1.20.4', '1.20.6',
'1.21'
]

for (String version : versions) {
include(":$version")
def proj = project(":$version")
proj.projectDir = file("versions/$version")
proj.buildFileName = '../1.20.4/build.gradle'
proj.buildFileName = '../1.21/build.gradle'
}

include(':fabricWrapper')
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package cn.xiaym.spr;
package cn.xiaym.skin;

import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
Expand All @@ -10,8 +10,8 @@
import java.nio.file.Path;

public class Config {
public static boolean refreshAfterRespawn = true;
public static boolean refreshWhenChangeDim = true;
public static boolean refreshWhenRespawning = true;
public static boolean refreshWhenChangingDim = true;
private static Path configFile;
private static JsonObject confObj = new JsonObject();

Expand All @@ -23,33 +23,34 @@ public static void initialize() {
Files.createFile(configFile);
save();
} catch (IOException e) {
SkinPRMain.getLogger().error("[SkinParts] Error occurred while creating the config file: ", e);
Main.LOGGER.error("Error occurred while creating the config file: ", e);
}

return;
}

try {
confObj = JsonParser.parseString(
Files.readString(configFile)
).getAsJsonObject();
String jsonStr = new String(Files.readAllBytes(configFile));
confObj = JsonParser.parseString(jsonStr).getAsJsonObject();

refreshAfterRespawn = confObj.getAsJsonPrimitive("refreshWhenRespawning").getAsBoolean();
refreshWhenChangeDim = confObj.getAsJsonPrimitive("refreshWhenChangingDim").getAsBoolean();
refreshWhenRespawning = confObj.getAsJsonPrimitive("refreshWhenRespawning").getAsBoolean();
refreshWhenChangingDim = confObj.getAsJsonPrimitive("refreshWhenChangingDim").getAsBoolean();
} catch (Exception e) {
SkinPRMain.getLogger().error("[SkinParts] Error occurred while reading the config file: ", e);
Main.LOGGER.error("Error occurred while reading the config file: ", e);
}
}

public static void save() {
confObj.addProperty("refreshWhenRespawning", refreshAfterRespawn);
confObj.addProperty("refreshWhenChangingDim", refreshWhenChangeDim);
confObj.addProperty("refreshWhenRespawning", refreshWhenRespawning);
confObj.addProperty("refreshWhenChangingDim", refreshWhenChangingDim);

try {
Files.writeString(configFile,
new GsonBuilder().setPrettyPrinting().create().toJson(JsonParser.parseString(confObj.toString())));
new GsonBuilder().setPrettyPrinting().create().toJson(
JsonParser.parseString(confObj.toString()))
);
} catch (IOException e) {
SkinPRMain.getLogger().error("[SkinParts] Error occurred while saving the config file: ", e);
Main.LOGGER.error("Error occurred while saving the config file: ", e);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
package cn.xiaym.spr;
package cn.xiaym.skin;

import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import org.lwjgl.glfw.GLFW;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SkinPRMain implements ClientModInitializer {
public class Main implements ClientModInitializer {
public static final KeyBinding MANUAL_KEY = new KeyBinding(
"keybinding.skinpr.refreshManually",
InputUtil.Type.KEYSYM,
GLFW.GLFW_KEY_N,
"category.skinpr.keybindings"
);
public static final MinecraftClient MC = MinecraftClient.getInstance();
private static final Logger LOGGER = LoggerFactory.getLogger("SkinParts");
public static final Logger LOGGER = LoggerFactory.getLogger("SkinParts");

public static void refreshSkinParts() {
MC.options.sendClientSettings();
}

public static Logger getLogger() {
return LOGGER;
}

@Override
public void onInitializeClient() {
Config.initialize();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package cn.xiaym.spr.compat.modmenu;
package cn.xiaym.skin.compat.modmenu;

import cn.xiaym.spr.Config;
import cn.xiaym.skin.Config;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
Expand Down Expand Up @@ -29,18 +29,18 @@ public ConfigScreenFactory<?> getModConfigScreenFactory() {
// Respawn
general.addEntry(
entryBuilder.startBooleanToggle(Text.translatable("config.skinpr.category.general.toggle_respawn"),
Config.refreshAfterRespawn)
Config.refreshWhenRespawning)
.setDefaultValue(true)
.setSaveConsumer(b -> Config.refreshAfterRespawn = b)
.setSaveConsumer(b -> Config.refreshWhenRespawning = b)
.build()
);

// Change dim
general.addEntry(
entryBuilder.startBooleanToggle(Text.translatable("config.skinpr.category.general.toggle_dim"),
Config.refreshWhenChangeDim)
Config.refreshWhenChangingDim)
.setDefaultValue(true)
.setSaveConsumer(b -> Config.refreshWhenChangeDim = b)
.setSaveConsumer(b -> Config.refreshWhenChangingDim = b)
.build()
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package cn.xiaym.spr.mixin;
package cn.xiaym.skin.mixin;

import cn.xiaym.spr.Config;
import cn.xiaym.spr.SkinPRMain;
import cn.xiaym.skin.Main;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.Identifier;
Expand All @@ -10,19 +9,24 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import static cn.xiaym.spr.SkinPRMain.MC;
import static cn.xiaym.skin.Main.MC;

@Mixin(MinecraftClient.class)
public class DimensionChangeHandler {
@Inject(method = "setWorld(Lnet/minecraft/client/world/ClientWorld;)V", at = @At("RETURN"))
private void onWorldChange(ClientWorld clientWorld, CallbackInfo info) {
if (clientWorld == null || !Config.refreshWhenChangeDim || MC.player == null) {
if (clientWorld == null || MC.player == null) {
return;
}

SkinPRMain.refreshSkinParts();
Main.refreshSkinParts();

Identifier dimID = clientWorld.getDimensionKey().getValue();
SkinPRMain.getLogger().info("[SkinParts] Dimension change detected - Refreshing the player's skin parts. (" + dimID + ")");
//#if MC >= 12006
Identifier dimID = clientWorld.getRegistryKey().getValue();
//#else
//$$ Identifier dimID = clientWorld.getDimensionKey().getValue();
//#endif

Main.LOGGER.info("[SkinParts] Dimension change detected - Refreshing the player's skin layers. ({})", dimID);
}
}
Loading

0 comments on commit 1d2512f

Please sign in to comment.