Skip to content

Commit e94670b

Browse files
authored
Merge pull request #1 from dev-hydrogen/integration/upstream-sync-09-19
sync upstream 2025/09/19
2 parents c594807 + 0f0b30b commit e94670b

Some content is hidden

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

64 files changed

+895
-309
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ dependencies {
7878
modImplementation("com.terraformersmc:modmenu:${project.property("modmenu_version")}")
7979
modImplementation("com.noxcrew.noxesium:fabric:2.7.7")
8080
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1")
81+
compileOnlyApi("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0-RC.2")
8182
}
8283

8384
loom {

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ minecraft_version=1.21.8
77
loader_version=0.16.4
88
kotlin_loader_version=1.13.4+kotlin.2.2.0
99
# Mod Properties
10-
mod_version=1.2.0
10+
mod_version=1.3.0
1111
maven_group=cc.pe3epwithyou
1212
archives_base_name=island++
1313
# Dependencies

src/main/java/cc/pe3epwithyou/trident/mixin/AbstractContainerScreenMixin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import cc.pe3epwithyou.trident.client.listeners.ChestScreenListener;
44
import cc.pe3epwithyou.trident.config.Config;
55
import cc.pe3epwithyou.trident.feature.BlueprintIndicators;
6+
import cc.pe3epwithyou.trident.feature.CraftableIndicator;
7+
import cc.pe3epwithyou.trident.feature.fishing.TideWindIndicator;
68
import cc.pe3epwithyou.trident.feature.rarityslot.RaritySlot;
79
import cc.pe3epwithyou.trident.state.MCCIState;
810
import cc.pe3epwithyou.trident.utils.DebugDraw;
@@ -39,6 +41,8 @@ public void renderSlotTail(GuiGraphics guiGraphics, Slot slot, CallbackInfo ci)
3941
if (Config.Debug.INSTANCE.getDrawSlotNumber()) {
4042
DebugDraw.INSTANCE.renderSlotNumber(guiGraphics, slot);
4143
}
44+
TideWindIndicator.INSTANCE.render(guiGraphics, slot);
45+
CraftableIndicator.INSTANCE.render(guiGraphics, slot);
4246
}
4347

4448
@Inject(method = "onClose", at = @At(value = "HEAD"))

src/main/java/cc/pe3epwithyou/trident/mixin/ConnectionMixin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cc.pe3epwithyou.trident.mixin;
22

33
import cc.pe3epwithyou.trident.feature.questing.QuestListener;
4+
import cc.pe3epwithyou.trident.state.FontCollection;
5+
import cc.pe3epwithyou.trident.state.PlayerStateIO;
46
import cc.pe3epwithyou.trident.utils.ChatUtils;
57
import cc.pe3epwithyou.trident.utils.DelayedAction;
68
import net.minecraft.network.Connection;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cc.pe3epwithyou.trident.mixin;
2+
3+
import cc.pe3epwithyou.trident.state.FontCollection;
4+
import net.minecraft.client.gui.font.providers.BitmapProvider;
5+
import net.minecraft.resources.ResourceLocation;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
@Mixin(BitmapProvider.Definition.class)
12+
public class FontLoaderMixin {
13+
@Inject(method = "<init>", at = @At("TAIL"))
14+
private void init(ResourceLocation resourceLocation, int height, int ascent, int[][] chars, CallbackInfo ci) {
15+
String namespace = resourceLocation.getNamespace();
16+
String path = resourceLocation.getPath();
17+
if (!namespace.equals("mcc") || !path.startsWith("_fonts/")) return;
18+
int[] c = chars[0];
19+
StringBuilder builder = new StringBuilder();
20+
for (int point : c) {
21+
builder.appendCodePoint(point);
22+
}
23+
24+
String character = builder.toString();
25+
FontCollection.INSTANCE.loadDefinition(resourceLocation, character, ascent, height);
26+
}
27+
}

src/main/java/cc/pe3epwithyou/trident/mixin/JoinIslandMixin.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cc.pe3epwithyou.trident.mixin;
22

3+
import cc.pe3epwithyou.trident.modrinth.UpdateChecker;
34
import cc.pe3epwithyou.trident.interfaces.DialogCollection;
45
import net.minecraft.client.multiplayer.ClientHandshakePacketListenerImpl;
56
import net.minecraft.client.multiplayer.ServerData;
@@ -20,7 +21,8 @@ public class JoinIslandMixin {
2021
private void loginFinished(ClientboundLoginFinishedPacket clientboundLoginFinishedPacket, CallbackInfo ci) {
2122
// Close all dialogs before joining the server
2223
DialogCollection.INSTANCE.clear();
23-
// if (this.serverData == null) return;
24-
// if (!this.serverData.ip.toLowerCase().contains("mccisland.net")) return;
24+
if (this.serverData == null) return;
25+
if (!this.serverData.ip.toLowerCase().contains("mccisland.net")) return;
26+
UpdateChecker.INSTANCE.checkForUpdates();
2527
}
2628
}

src/main/kotlin/cc/pe3epwithyou/trident/Trident.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cc.pe3epwithyou.trident
22

33
import cc.pe3epwithyou.trident.config.Config
4+
import cc.pe3epwithyou.trident.modrinth.UpdateChecker
45
import cc.pe3epwithyou.trident.utils.NoxesiumUtils
56
import net.fabricmc.api.ModInitializer
67
import org.slf4j.Logger
@@ -11,8 +12,9 @@ class Trident : ModInitializer {
1112
val LOGGER: Logger = LoggerFactory.getLogger(this.toString())
1213
}
1314
override fun onInitialize() {
14-
LOGGER.info("[Trident] Initializing Client...")
15+
LOGGER.info("[Island++] Initializing Client...")
1516
Config.init()
1617
NoxesiumUtils.registerListeners()
18+
UpdateChecker.init()
1719
}
1820
}

src/main/kotlin/cc/pe3epwithyou/trident/client/TridentClient.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import cc.pe3epwithyou.trident.interfaces.fishing.ChancePerksDialog
2424
import cc.pe3epwithyou.trident.interfaces.fishing.SpotDialog
2525
import cc.pe3epwithyou.trident.state.MCCIState
2626
import cc.pe3epwithyou.trident.state.PlayerState
27+
import cc.pe3epwithyou.trident.state.PlayerStateIO
2728
import cc.pe3epwithyou.trident.utils.ChatUtils
2829
import cc.pe3epwithyou.trident.utils.DelayedAction
2930
import cc.pe3epwithyou.trident.utils.TridentFont
@@ -34,6 +35,7 @@ import net.fabricmc.api.ClientModInitializer
3435
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager
3536
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback
3637
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource
38+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents
3739
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents
3840
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper
3941
import net.minecraft.ChatFormatting
@@ -59,7 +61,7 @@ class TridentClient : ClientModInitializer {
5961
)
6062

6163
companion object {
62-
val playerState = PlayerState()
64+
var playerState = PlayerState()
6365
lateinit var settingsKeymapping: KeyMapping
6466
var jokeCooldown: Boolean = false
6567
}
@@ -150,6 +152,21 @@ class TridentClient : ClientModInitializer {
150152
}
151153
0
152154
}
155+
).then(
156+
ClientCommandManager.literal("resetPlayerState")
157+
.executes { _ ->
158+
playerState = PlayerState()
159+
PlayerStateIO.load()
160+
DialogCollection.refreshOpenedDialogs()
161+
val c = Component.literal("Player state has been ")
162+
.withColor(TridentFont.TRIDENT_COLOR)
163+
.append(
164+
Component.literal("successfully reset")
165+
.withColor(TridentFont.TRIDENT_ACCENT)
166+
)
167+
ChatUtils.sendMessage(c, true)
168+
0
169+
}
153170
)
154171

155172
override fun onInitializeClient() {
@@ -192,5 +209,12 @@ class TridentClient : ClientModInitializer {
192209
}
193210

194211
DialogCollection.loadAllDialogs()
212+
playerState = PlayerStateIO.load()
213+
214+
ClientLifecycleEvents.CLIENT_STOPPING.register { onShutdownClient() }
215+
}
216+
217+
private fun onShutdownClient() {
218+
PlayerStateIO.save()
195219
}
196220
}

src/main/kotlin/cc/pe3epwithyou/trident/client/listeners/ChatEventListener.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import cc.pe3epwithyou.trident.config.Config
55
import cc.pe3epwithyou.trident.feature.fishing.DepletedDisplay
66
import cc.pe3epwithyou.trident.interfaces.DialogCollection
77
import cc.pe3epwithyou.trident.state.MCCIState
8+
import cc.pe3epwithyou.trident.utils.Resources
89
import cc.pe3epwithyou.trident.utils.extensions.WindowExtensions.focusWindowIfInactive
910
import cc.pe3epwithyou.trident.utils.extensions.WindowExtensions.requestAttentionIfInactive
1011
import cc.pe3epwithyou.trident.utils.ChatUtils
1112
import cc.pe3epwithyou.trident.state.fishing.UseCondition
1213
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents
1314
import net.minecraft.client.Minecraft
1415
import net.minecraft.network.chat.Component
15-
import net.minecraft.resources.ResourceLocation
1616
import net.minecraft.sounds.SoundEvent
1717
import java.util.*
1818

@@ -63,7 +63,7 @@ object ChatEventListener {
6363
Minecraft.getInstance().window.requestAttentionIfInactive()
6464
Minecraft.getInstance().player?.playSound(
6565
SoundEvent(
66-
ResourceLocation.fromNamespaceAndPath("mcc", "games.fishing.stock_depleted"),
66+
Resources.mcc("games.fishing.stock_depleted"),
6767
Optional.empty()
6868
)
6969
)

src/main/kotlin/cc/pe3epwithyou/trident/client/listeners/ChestScreenListener.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ import net.minecraft.core.component.DataComponents
2424
object ChestScreenListener {
2525

2626
private fun parseRarity(name: String): Rarity = when {
27-
"Common" in name -> Rarity.COMMON
28-
"Uncommon" in name -> Rarity.UNCOMMON
29-
"Rare" in name -> Rarity.RARE
30-
"Epic" in name -> Rarity.EPIC
27+
"Common" in name -> Rarity.COMMON
28+
"Uncommon" in name -> Rarity.UNCOMMON
29+
"Rare" in name -> Rarity.RARE
30+
"Epic" in name -> Rarity.EPIC
3131
"Legendary" in name -> Rarity.LEGENDARY
32-
"Mythic" in name -> Rarity.MYTHIC
32+
"Mythic" in name -> Rarity.MYTHIC
3333
else -> Rarity.COMMON
3434
}
3535

@@ -206,6 +206,7 @@ object ChestScreenListener {
206206
availableSlots--
207207
null
208208
}
209+
209210
rawName.contains("Empty Supply Slot") -> null
210211
else -> {
211212
val cleanedName = rawName
@@ -219,7 +220,8 @@ object ChestScreenListener {
219220
} as MutableList<Augment?>
220221
ChatUtils.debugLog("""
221222
Augments: ${TridentClient.playerState.supplies.augments}
222-
""".trimIndent())
223+
""".trimIndent()
224+
)
223225
TridentClient.playerState.supplies.augmentsAvailable = availableSlots
224226
// Parse uses for each augment; keep length aligned with augments list, skip locked/empty
225227
val mutableAugments = mutableListOf<MutableAugment>()
@@ -265,15 +267,18 @@ object ChestScreenListener {
265267
val unstableOverclock = screen.menu.slots[15]
266268
val unstableModel = unstableOverclock.item.components[DataComponents.ITEM_MODEL]
267269
if (unstableModel != null) {
268-
TridentClient.playerState.supplies.overclocks.unstable.isAvailable = !unstableModel.path.startsWith("island_interface/locked")
270+
TridentClient.playerState.supplies.overclocks.unstable.state.isAvailable =
271+
!unstableModel.path.startsWith("island_interface/locked")
269272
}
270-
TridentClient.playerState.supplies.overclocks.unstable.texture = ItemParser.getUnstableOverclock(unstableOverclock.item)
271-
TridentClient.playerState.supplies.overclocks.unstable.level = ItemParser.getOverclockLevel(unstableOverclock.item)
273+
TridentClient.playerState.supplies.overclocks.unstable.texture =
274+
ItemParser.getUnstableOverclock(unstableOverclock.item)
275+
TridentClient.playerState.supplies.overclocks.unstable.state.level = ItemParser.getOverclockLevel(unstableOverclock.item)
272276

273277
val supremeOverclock = screen.menu.slots[16]
274278
val supremeModel = supremeOverclock.item.components[DataComponents.ITEM_MODEL]
275279
if (supremeModel != null) {
276-
TridentClient.playerState.supplies.overclocks.supreme.isAvailable = !supremeModel.path.startsWith("island_interface/locked")
280+
TridentClient.playerState.supplies.overclocks.supreme.state.isAvailable =
281+
!supremeModel.path.startsWith("island_interface/locked")
277282
}
278283
TridentClient.playerState.supplies.overclocks.stableLevels.hook = ItemParser.getOverclockLevel(hookOverclock.item)
279284
TridentClient.playerState.supplies.overclocks.stableLevels.magnet = ItemParser.getOverclockLevel(magnetOverclock.item)

0 commit comments

Comments
 (0)