Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.Copy
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.net.URL
import java.net.URI
import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
Expand Down Expand Up @@ -96,7 +96,7 @@ fun resolveServerVersion(raw: String?): String? {
fun fetchLatestServerRelease(): String? {
val metadataUrl = "https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml"
return try {
val xml = URL(metadataUrl).readText()
val xml = URI(metadataUrl).toURL().openStream().bufferedReader().use { it.readText() }
Regex("<release>([^<]+)</release>").find(xml)?.groupValues?.get(1)
?: Regex("<latest>([^<]+)</latest>").find(xml)?.groupValues?.get(1)
} catch (ex: IOException) {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ plugin_author=msdigital
plugin_website=https://github.com/msdigital/bumenfeld-clock
plugin_main_entrypoint=com.bumenfeld.clock.Clock
enable_hytale_plugin=true
server_version=*
server_version=2026.03.26-89796e57b
1 change: 1 addition & 0 deletions src/main/java/com/bumenfeld/clock/Clock.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class Clock extends JavaPlugin {

public Clock(JavaPluginInit init) {
super(init);
ExtractedAssetPackManifestEnsurer.ensure(this);
this.config = withConfig("BumenfeldClock", ClockConfig.CODEC);
}

Expand Down
11 changes: 4 additions & 7 deletions src/main/java/com/bumenfeld/clock/ClockTickSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import com.hypixel.hytale.component.ArchetypeChunk;
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.Holder;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.component.query.Query;
import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
import com.buuz135.mhud.MultipleHUD;
import com.hypixel.hytale.server.core.entity.EntityUtils;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.entity.entities.player.hud.HudManager;
import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
Expand Down Expand Up @@ -51,9 +49,8 @@ public void tick(float dt, int index, ArchetypeChunk<EntityStore> archetypeChunk
return;
}

Holder<EntityStore> holder = EntityUtils.toHolder(index, archetypeChunk);
Player player = holder.getComponent(Player.getComponentType());
PlayerRef playerRef = holder.getComponent(PlayerRef.getComponentType());
Player player = archetypeChunk.getComponent(index, Player.getComponentType());
PlayerRef playerRef = archetypeChunk.getComponent(index, PlayerRef.getComponentType());
if (player == null || playerRef == null) {
return;
}
Expand All @@ -66,10 +63,10 @@ public void tick(float dt, int index, ArchetypeChunk<EntityStore> archetypeChunk
return;
}

PlayerClockSettings settings = holder.getComponent(settingsComponent);
PlayerClockSettings settings = archetypeChunk.getComponent(index, settingsComponent);
if (settings == null) {
settings = PlayerClockSettings.fromDefaults(config.get());
holder.putComponent(settingsComponent, settings);
commandBuffer.putComponent(archetypeChunk.getReferenceTo(index), settingsComponent, settings);
}

String formatted = formatTime(gameDateTime, settings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ static void ensure(JavaPlugin plugin) {
Files.createDirectories(dataDirectory);
Path extractedManifest = dataDirectory.resolve("manifest.json");
String extractedPackName = extractedPackName(pluginManifest.getName());
if (!shouldWriteExtractedManifest(extractedManifest, pluginManifest.getGroup(), pluginManifest.getName(), extractedPackName)) {
return;
}

try (InputStream stream = plugin.getClass().getClassLoader().getResourceAsStream("manifest.json")) {
if (stream == null) {
return;
Expand All @@ -43,6 +39,15 @@ static void ensure(JavaPlugin plugin) {
if (!(root instanceof ObjectNode rootObject)) {
return;
}
if (!shouldWriteExtractedManifest(
extractedManifest,
pluginManifest.getGroup(),
pluginManifest.getName(),
extractedPackName,
rootObject
)) {
return;
}

rootObject.put("Name", extractedPackName);
rootObject.put("IncludesAssetPack", false);
Expand All @@ -55,17 +60,43 @@ static void ensure(JavaPlugin plugin) {
}
}

private static boolean shouldWriteExtractedManifest(Path path, String pluginGroup, String pluginName, String extractedPackName) {
private static boolean shouldWriteExtractedManifest(
Path path,
String pluginGroup,
String pluginName,
String extractedPackName,
JsonNode bundledManifest
) {
if (!Files.exists(path)) {
return true;
}

try {
JsonNode root = MAPPER.readTree(path.toFile());
if (!(root instanceof ObjectNode)) {
return true;
}
String group = root.path("Group").asText("");
String name = root.path("Name").asText("");

if (group.equals(pluginGroup) && name.equals(extractedPackName)) {
// Managed extracted manifest must keep IncludesAssetPack=false to avoid duplicate asset-pack registration.
if (root.path("IncludesAssetPack").asBoolean(true)) {
return true;
}

String extractedBuildId = root.path("Build").path("Id").asText("");
String bundledBuildId = bundledManifest.path("Build").path("Id").asText("");
if (!bundledBuildId.isBlank() && !bundledBuildId.equals(extractedBuildId)) {
return true;
}

String extractedServerVersion = root.path("ServerVersion").asText("");
String bundledServerVersion = bundledManifest.path("ServerVersion").asText("");
if (!bundledServerVersion.isBlank() && !bundledServerVersion.equals(extractedServerVersion)) {
return true;
}

return false;
}
if (group.equals(pluginGroup) && name.equals(pluginName)) {
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,8 @@
"Id": "${build_id}",
"Timestamp": "${build_timestamp}",
"GitRevision": "${git_revision}"
},
"UpdateChecker": {
"CurseForge": "1452160"
}
}
Loading