Skip to content

Commit d6adc05

Browse files
Version 1.3.5.4
1 parent 6ac78fc commit d6adc05

File tree

86 files changed

+1159
-808
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+1159
-808
lines changed

api/api/api.api

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -423,13 +423,13 @@ public abstract interface class gg/essential/api/utils/GuiUtil {
423423
public abstract fun openScreen (Lnet/minecraft/client/gui/screens/Screen;)V
424424
@1.17.1-forge,1.18.2-forge,1.19.2-forge,1.19.3-forge,1.19.4-forge,1.20.1-forge,1.20.2-forge,1.20.4-forge
425425
public abstract fun openedScreen ()Lnet/minecraft/client/gui/screens/Screen;
426-
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric
426+
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric,1.21.4-fabric
427427
public static fun getOpenedScreen ()Lnet/minecraft/client/gui/screen/Screen;
428-
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric
428+
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric,1.21.4-fabric
429429
public static fun open (Lnet/minecraft/client/gui/screen/Screen;)V
430-
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric
430+
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric,1.21.4-fabric
431431
public abstract fun openScreen (Lnet/minecraft/client/gui/screen/Screen;)V
432-
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric
432+
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric,1.21.4-fabric
433433
public abstract fun openedScreen ()Lnet/minecraft/client/gui/screen/Screen;
434434
@1.12.2-forge,1.8.9-forge
435435
public static fun getOpenedScreen ()Lnet/minecraft/client/gui/GuiScreen;
@@ -446,9 +446,9 @@ public final class gg/essential/api/utils/GuiUtil$Companion {
446446
public final fun getOpenedScreen ()Lnet/minecraft/client/gui/screens/Screen;
447447
@1.17.1-forge,1.18.2-forge,1.19.2-forge,1.19.3-forge,1.19.4-forge,1.20.1-forge,1.20.2-forge,1.20.4-forge
448448
public final fun open (Lnet/minecraft/client/gui/screens/Screen;)V
449-
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric
449+
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric,1.21.4-fabric
450450
public final fun getOpenedScreen ()Lnet/minecraft/client/gui/screen/Screen;
451-
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric
451+
@1.16.2-fabric,1.16.2-forge,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric,1.21.4-fabric
452452
public final fun open (Lnet/minecraft/client/gui/screen/Screen;)V
453453
@1.12.2-forge,1.8.9-forge
454454
public final fun getOpenedScreen ()Lnet/minecraft/client/gui/GuiScreen;
@@ -512,7 +512,7 @@ public final class gg/essential/api/utils/KotlinAdapter : net/minecraftforge/fml
512512
public abstract interface class gg/essential/api/utils/MinecraftUtils {
513513
@1.17.1-forge,1.18.2-forge,1.19.2-forge,1.19.3-forge,1.19.4-forge,1.20.1-forge,1.20.2-forge,1.20.4-forge
514514
public abstract fun getResourceImage (Lnet/minecraft/resources/ResourceLocation;)Ljava/awt/image/BufferedImage;
515-
@1.16.2-fabric,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric
515+
@1.16.2-fabric,1.17.1-fabric,1.18.1-fabric,1.18.2-fabric,1.19-fabric,1.19.2-fabric,1.19.3-fabric,1.19.4-fabric,1.20-fabric,1.20.1-fabric,1.20.2-fabric,1.20.4-fabric,1.20.6-fabric,1.21-fabric,1.21.2-fabric,1.21.4-fabric
516516
public abstract fun getResourceImage (Lnet/minecraft/util/Identifier;)Ljava/awt/image/BufferedImage;
517517
@1.12.2-forge,1.16.2-forge,1.8.9-forge
518518
public abstract fun getResourceImage (Lnet/minecraft/util/ResourceLocation;)Ljava/awt/image/BufferedImage;

api/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ dependencies {
5757

5858
// Core Gui Libraries
5959
val ucMcVersion = when (platform.mcVersion) {
60+
12104 -> "1.21.2"
6061
11802 -> "1.18.1"
6162
else -> mcVersionStr
6263
}

build-logic/src/main/kotlin/essential/preprocessor.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ fun Project.configurePreprocessTree(versions: File) {
2020
configure<RootPreprocessExtension> {
2121
strictExtraMappings.set(true)
2222

23+
val fabric12104 = createNode("1.21.4-fabric", 12104, "yarn")
2324
val fabric12102 = createNode("1.21.2-fabric", 12102, "yarn")
2425
val fabric12100 = createNode("1.21-fabric", 12100, "yarn")
2526
val fabric12006 = createNode("1.20.6-fabric", 12006, "yarn")
@@ -47,6 +48,7 @@ fun Project.configurePreprocessTree(versions: File) {
4748
val forge11202 = createNode("1.12.2-forge", 11202, "srg")
4849
val forge10809 = createNode("1.8.9-forge", 10809, "srg")
4950

51+
fabric12104.link(fabric12102, versions.resolve("1.21.4-1.21.2.txt"))
5052
fabric12102.link(fabric12100)
5153
fabric12100.link(fabric12006)
5254
fabric12006.link(fabric12004)

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ dependencies {
127127
12006 -> "0.97.8+1.20.6"
128128
12100 -> "0.99.2+1.21"
129129
12102 -> "0.106.0+1.21.2"
130+
12104 -> "0.110.0+1.21.4"
130131
else -> error("No fabric API version configured!")
131132
}
132133
include(modImplementation(fabricApi.module("fabric-api-base", fapiVersion))!!)

changelog/release-1.3.5.4.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Title: Bug Patch
2+
Summary: Minor bug fixes
3+
4+
## New Versions
5+
- Added support for 1.21.4 Fabric
6+
7+
## Bug Fixes
8+
- Fixed some emotes not playing properly when cosmetics are disabled in the Essential settings
9+
- Fixed some particles being unaffected by the "Show cosmetics" setting
10+
- Fixed Essential nametag indicator not showing when sneaking on Minecraft 1.21.2 and newer
11+
- Fixed Wardrobe mute / unmute button showing even for emotes which do not have sound
12+
13+
## Compatibility
14+
- Fixed not being able to join friends with ViaFabricPlus

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
essential.defaults.loom=0
2-
essential.defaults.loom.fabric-loader=net.fabricmc:fabric-loader:0.16.7
2+
essential.defaults.loom.fabric-loader=net.fabricmc:fabric-loader:0.16.9
33
kotlin.stdlib.default.dependency=false
44
org.gradle.daemon=false
55
org.gradle.parallel=true
66
org.gradle.configureondemand=true
77
org.gradle.parallel.threads=128
88
org.gradle.jvmargs=-Xmx16G
99
minecraftVersion=11202
10-
version=1.3.5.3
10+
version=1.3.5.4

gui/essential/src/main/kotlin/gg/essential/network/connectionmanager/cosmetics/EquippedCosmeticsManager.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@
1212
package gg.essential.network.connectionmanager.cosmetics
1313

1414
import com.google.common.collect.ImmutableMap
15+
import com.google.common.collect.MapMaker
1516
import gg.essential.config.EssentialConfig
1617
import gg.essential.connectionmanager.common.packet.cosmetic.ServerCosmeticPlayerSettingsPacket
1718
import gg.essential.connectionmanager.common.packet.cosmetic.ServerCosmeticsUserEquippedPacket
1819
import gg.essential.connectionmanager.common.packet.cosmetic.outfit.ClientCosmeticOutfitSelectedRequestPacket
1920
import gg.essential.connectionmanager.common.packet.cosmetic.outfit.ServerCosmeticOutfitSelectedResponsePacket
2021
import gg.essential.cosmetics.EquippedCosmetic
2122
import gg.essential.elementa.state.v2.ReferenceHolder
23+
import gg.essential.gui.elementa.state.v2.MutableState
2224
import gg.essential.gui.elementa.state.v2.ReferenceHolderImpl
25+
import gg.essential.gui.elementa.state.v2.State
26+
import gg.essential.gui.elementa.state.v2.mutableStateOf
2327
import gg.essential.mod.Model
2428
import gg.essential.mod.Skin
2529
import gg.essential.mod.cosmetics.CAPE_DISABLED_COSMETIC_ID
@@ -47,6 +51,8 @@ class EquippedCosmeticsManager(
4751
private val refHolder: ReferenceHolder = ReferenceHolderImpl()
4852
private val equippedCosmetics: MutableMap<UUID, Map<CosmeticSlot, String>> = mutableMapOf()
4953
private val visibleCosmetics: MutableMap<UUID, ImmutableMap<CosmeticSlot, EquippedCosmetic>> = mutableMapOf()
54+
private val visibleCosmeticsStates: MutableMap<UUID, MutableState<Map<CosmeticSlot, EquippedCosmetic>>> =
55+
MapMaker().weakValues().makeMap()
5056
private val cosmeticSettings: MutableMap<UUID, Map<String, List<CosmeticSetting>>> = mutableMapOf()
5157
private var ownCosmeticsVisible = true
5258

@@ -153,14 +159,15 @@ class EquippedCosmeticsManager(
153159
// Keep old instance if unchanged, so external comparisons against it can continue to take the fast path
154160
if (visibleCosmetics[playerId] != newValue) {
155161
visibleCosmetics[playerId] = newValue
162+
visibleCosmeticsStates[playerId]?.set(newValue)
156163
}
157164
}
158165

159166
private fun computeVisibleCosmetics(playerId: UUID): ImmutableMap<CosmeticSlot, EquippedCosmetic> {
160167
val cosmeticIds = equippedCosmetics[playerId] ?: return ImmutableMap.of()
161168
val settings = cosmeticSettings[playerId] ?: emptyMap()
162169

163-
val cosmeticsHidden = !ownCosmeticsVisible && playerId == ownUuid
170+
val cosmeticsHidden = EssentialConfig.disableCosmetics || (!ownCosmeticsVisible && playerId == ownUuid)
164171

165172
fun isVisible(slot: CosmeticSlot): Boolean {
166173
if (slot == CosmeticSlot.ICON) {
@@ -193,9 +200,17 @@ class EquippedCosmeticsManager(
193200
return visibleCosmetics[playerId] ?: ImmutableMap.of()
194201
}
195202

203+
fun getVisibleCosmeticsState(playerId: UUID): State<Map<CosmeticSlot, EquippedCosmetic>> {
204+
return visibleCosmeticsStates.getOrPut(playerId) { mutableStateOf(visibleCosmetics[playerId] ?: emptyMap()) }
205+
}
206+
196207
override fun resetState() {
197208
equippedCosmetics.clear()
198209
visibleCosmetics.clear()
210+
// Note: The visibleCosmeticsState map MUST NOT be cleared here because downstream states won't necessarily be
211+
// re-created on reconnect but should still continue to receive future updates.
212+
// It'll be cleaned up automatically as its entries become unused by virtue of having weak values.
213+
visibleCosmeticsStates.values.forEach { it.set(emptyMap()) }
199214
cosmeticSettings.clear()
200215
}
201216

@@ -211,6 +226,8 @@ class EquippedCosmeticsManager(
211226
equippedCosmetics.remove(uuid)
212227
visibleCosmetics.remove(uuid)
213228
cosmeticSettings.remove(uuid)
229+
// Note: The entry MUST NOT be removed from the visibleCosmeticsState map. See comment in [resetState].
230+
visibleCosmeticsStates[uuid]?.set(emptyMap())
214231
}
215232
}
216233
}

root.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import essential.*
1313
import gg.essential.gradle.util.*
1414
import net.fabricmc.loom.task.RemapJarTask
1515

16+
buildscript {
17+
dependencies.constraints.classpath("com.github.replaymod:remap:63aef8561!!")
18+
}
19+
1620
plugins {
1721
id("base")
1822
id("essential.utils")

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ listOf(
102102
"1.20.6-fabric",
103103
"1.21-fabric",
104104
"1.21.2-fabric",
105+
"1.21.4-fabric",
105106
).forEach { version ->
106107
include(":$version")
107108
project(":$version").apply {

src/main/java/gg/essential/Essential.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import gg.essential.config.EssentialConfigApiImpl;
2222
import gg.essential.config.McEssentialConfig;
2323
import gg.essential.cosmetics.PlayerWearableManager;
24-
import gg.essential.cosmetics.events.AnimationEffectHandler;
24+
import gg.essential.cosmetics.events.CosmeticEventEmitter;
2525
import gg.essential.data.OnboardingData;
2626
import gg.essential.elementa.components.image.FileImageCache;
2727
import gg.essential.elementa.components.image.ImageCache;
@@ -139,7 +139,7 @@ public class Essential implements EssentialAPI {
139139
private PlayerWearableManager playerWearableManager;
140140
private final GameProfileManager gameProfileManager = new GameProfileManager();
141141
private final MojangSkinManager skinManager = new MojangSkinManager(gameProfileManager, () -> Wardrobe.getInstance() != null);
142-
private AnimationEffectHandler animationEffectHandler;
142+
private CosmeticEventEmitter cosmeticEventEmitter;
143143
private Map<Object, Boolean> dynamicListeners = new HashMap<>();
144144
private EssentialGameRules gameRules;
145145

@@ -304,8 +304,8 @@ private void init() {
304304
registerListener(new WindowedFullscreenHandler());
305305
registerListener(connectionManager.getSpsManager());
306306
registerListener(connectionManager.getSocialManager());
307-
registerListenerRequiresEssential(animationEffectHandler = new AnimationEffectHandler());
308-
registerListenerRequiresEssential((playerWearableManager = new PlayerWearableManager(connectionManager, connectionManager.getCosmeticsManager())));
307+
registerListenerRequiresEssential(cosmeticEventEmitter = new CosmeticEventEmitter());
308+
registerListener(playerWearableManager = new PlayerWearableManager(connectionManager, connectionManager.getCosmeticsManager()));
309309
registerListener(WikiToastListener.INSTANCE);
310310
if (!OptiFineUtil.isLoaded()) {
311311
registerListenerRequiresEssential(ZoomHandler.getInstance());
@@ -522,8 +522,8 @@ public gg.essential.api.data.OnboardingData onboardingData() {
522522
return OnboardingData.INSTANCE;
523523
}
524524

525-
public AnimationEffectHandler getAnimationEffectHandler() {
526-
return animationEffectHandler;
525+
public CosmeticEventEmitter getCosmeticEventEmitter() {
526+
return cosmeticEventEmitter;
527527
}
528528

529529
public OverlayManager getOverlayManager() {

0 commit comments

Comments
 (0)