From 3557dcdb175c238614811f8094b83cc8103541b9 Mon Sep 17 00:00:00 2001 From: XevianLight <63034748+XevianLight@users.noreply.github.com> Date: Wed, 4 Feb 2026 19:13:15 -0700 Subject: [PATCH] Converted EnvironmentData and GravityData to records cause we never need to modify them --- .../core/saveddata/EnvironmentSavedData.java | 18 +++------ .../core/saveddata/GravitySavedData.java | 9 +---- .../core/saveddata/types/EnvironmentData.java | 29 +++++++------- .../core/saveddata/types/GravityData.java | 38 +++++++------------ 4 files changed, 36 insertions(+), 58 deletions(-) diff --git a/src/main/java/net/xevianlight/aphelion/core/saveddata/EnvironmentSavedData.java b/src/main/java/net/xevianlight/aphelion/core/saveddata/EnvironmentSavedData.java index 8535f71..1ba5e3b 100644 --- a/src/main/java/net/xevianlight/aphelion/core/saveddata/EnvironmentSavedData.java +++ b/src/main/java/net/xevianlight/aphelion/core/saveddata/EnvironmentSavedData.java @@ -103,9 +103,8 @@ public class EnvironmentSavedData extends SavedData { public void setOxygen(Level level, BlockPos pos, boolean value) { var data = getDataForPosition(level, pos); - data.setOxygen(value); // Aphelion.LOGGER.info("Set oxygen for {} to {}", pos, value); - putOrRemove(level, pos.asLong(), data.pack()); + putOrRemove(level, pos.asLong(), data.withOxygen(value).pack()); } public void setOxygen(Level level, Collection positions, boolean value) { @@ -116,8 +115,7 @@ public class EnvironmentSavedData extends SavedData { public void resetOxygen(Level level, BlockPos pos) { var data = getDataForPosition(level, pos); - data.setOxygen(defaultData(level).hasOxygen()); - putOrRemove(level, pos.asLong(), data.pack()); + putOrRemove(level, pos.asLong(), data.withOxygen(defaultData(level).hasOxygen()).pack()); } public void resetOxygen(Level level, Collection positions) { @@ -133,8 +131,7 @@ public class EnvironmentSavedData extends SavedData { public void setGravity(Level level, BlockPos pos, float value) { var data = getDataForPosition(level, pos); - data.setGravity(value); - putOrRemove(level, pos.asLong(), data.pack()); + putOrRemove(level, pos.asLong(), data.withGravity(value).pack()); } public void setGravity(Level level, Collection positions, float value) { @@ -145,8 +142,7 @@ public class EnvironmentSavedData extends SavedData { public void resetGravity(Level level, BlockPos pos) { var data = getDataForPosition(level, pos); - data.setGravity(defaultData(level).getGravity()); - putOrRemove(level, pos.asLong(), data.pack()); + putOrRemove(level, pos.asLong(), data.withGravity(defaultData(level).getGravity()).pack()); } public short getTemperature(Level level, BlockPos pos) { @@ -156,8 +152,7 @@ public class EnvironmentSavedData extends SavedData { public void setTemperature(Level level, BlockPos pos, short value) { var data = getDataForPosition(level, pos); - data.setTemperature(value); - putOrRemove(level, pos.asLong(), data.pack()); + putOrRemove(level, pos.asLong(), data.withTemperature(value).pack()); } public void setTemperature(Level level, Collection positions, short value) { @@ -168,8 +163,7 @@ public class EnvironmentSavedData extends SavedData { public void resetTemperature(Level level, BlockPos pos) { var data = getDataForPosition(level, pos); - data.setTemperature(defaultData(level).getTemperature()); - putOrRemove(level, pos.asLong(), data.pack()); + putOrRemove(level, pos.asLong(), data.withTemperature((defaultData(level).getTemperature())).pack()); } private void putOrRemove(Level level, long key, int packed) { diff --git a/src/main/java/net/xevianlight/aphelion/core/saveddata/GravitySavedData.java b/src/main/java/net/xevianlight/aphelion/core/saveddata/GravitySavedData.java index 26faf1c..12e483d 100644 --- a/src/main/java/net/xevianlight/aphelion/core/saveddata/GravitySavedData.java +++ b/src/main/java/net/xevianlight/aphelion/core/saveddata/GravitySavedData.java @@ -1,8 +1,6 @@ package net.xevianlight.aphelion.core.saveddata; import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; -import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; @@ -10,8 +8,6 @@ import net.minecraft.nbt.Tag; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.saveddata.SavedData; -import net.xevianlight.aphelion.client.ClientOxygenCache; -import net.xevianlight.aphelion.core.saveddata.types.EnvironmentData; import net.xevianlight.aphelion.core.saveddata.types.GravityData; import net.xevianlight.aphelion.planet.Planet; import net.xevianlight.aphelion.planet.PlanetCache; @@ -19,7 +15,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collection; import java.util.List; /** @@ -105,7 +100,7 @@ public class GravitySavedData extends SavedData { List regions = getGravityRegions(pos); for (var e : regions) { - sum += e.getAccel(); + sum += e.getGravity(); } return sum; @@ -120,7 +115,7 @@ public class GravitySavedData extends SavedData { List regions = getGravityRegions(pos); for (var e : regions) { - var accel = e.getAccel(); + var accel = e.getGravity(); if (accel > max) max = accel; } diff --git a/src/main/java/net/xevianlight/aphelion/core/saveddata/types/EnvironmentData.java b/src/main/java/net/xevianlight/aphelion/core/saveddata/types/EnvironmentData.java index 32be1e6..0bcdf92 100644 --- a/src/main/java/net/xevianlight/aphelion/core/saveddata/types/EnvironmentData.java +++ b/src/main/java/net/xevianlight/aphelion/core/saveddata/types/EnvironmentData.java @@ -1,6 +1,6 @@ package net.xevianlight.aphelion.core.saveddata.types; -public final class EnvironmentData { +public record EnvironmentData (boolean oxygen, short temperature, float gravity){ @@ -26,9 +26,6 @@ public final class EnvironmentData { private static final int TEMPERATURE_BIT = OXYGEN_BIT + OXYGEN_BITS; // next 16 bits private static final int GRAVITY_BIT = TEMPERATURE_BIT + TEMPERATURE_BITS; // next 15 bits - private boolean oxygen; - private short temperature; - private float gravity; public EnvironmentData(boolean oxygen, short temperature, float gravity) { this.oxygen = oxygen; @@ -36,6 +33,19 @@ public final class EnvironmentData { this.gravity = gravity; } + public EnvironmentData withOxygen(boolean newOxygen) { + return new EnvironmentData(newOxygen, this.temperature, this.gravity); + } + + public EnvironmentData withTemperature(short newTemperature) { + return new EnvironmentData(this.oxygen, newTemperature, this.gravity); + } + + @Deprecated + public EnvironmentData withGravity(float newGravity) { + return new EnvironmentData(this.oxygen, this.temperature, newGravity); + } + public int pack() { int packedData = 0; @@ -76,23 +86,12 @@ public final class EnvironmentData { return oxygen; } - public void setOxygen(boolean oxygen) { - this.oxygen = oxygen; - } - public short getTemperature() { return temperature; } - public void setTemperature(short temperature) { - this.temperature = temperature; - } - public float getGravity() { return gravity; } - public void setGravity(float gravity) { - this.gravity = gravity; - } } diff --git a/src/main/java/net/xevianlight/aphelion/core/saveddata/types/GravityData.java b/src/main/java/net/xevianlight/aphelion/core/saveddata/types/GravityData.java index de2087a..a8b9bc1 100644 --- a/src/main/java/net/xevianlight/aphelion/core/saveddata/types/GravityData.java +++ b/src/main/java/net/xevianlight/aphelion/core/saveddata/types/GravityData.java @@ -1,8 +1,8 @@ package net.xevianlight.aphelion.core.saveddata.types; -public class GravityData { - private float accel; - private float radius; +// A record seems more useful here since this class is really only to help us interpret these values as they are written to the disk as an integer. +// We never store GravityData for any reason other than to test its values or to pack it into an integer. +public record GravityData (float gravity, float radius) { public static final float DEFAULT_GRAVITY = 9.80665f; // 1G public static final float GRAVITY_PRECISION = 100.0f; @@ -10,40 +10,30 @@ public class GravityData { public static final float MAX_RADIUS = Short.MAX_VALUE / RADIUS_PRECISION; public static final float MAX_GRAVITY = Short.MAX_VALUE / GRAVITY_PRECISION; - public GravityData(float accel, float radius) { - this.accel = accel; - this.radius = radius; + public GravityData { + gravity = Math.clamp(gravity, 0f, MAX_GRAVITY); + radius = Math.clamp(radius, 0f, MAX_RADIUS); } public int pack() { - int packed = 0; + int g = Math.round(gravity * GRAVITY_PRECISION) & 0xFFFF; + int r = Math.round(radius * RADIUS_PRECISION) & 0xFFFF; - packed |= (int) (this.accel * GRAVITY_PRECISION); - packed |= (int) (this.radius * RADIUS_PRECISION) << 16; - - return packed; + return g | (r << 16); } - public float getAccel() { - return accel; - } - - public void setAccel(float accel) { - this.accel = accel; + public float getGravity() { + return gravity; } public float getRadius() { return radius; } - public void setRadius(short radius) { - this.radius = radius; - } - public static GravityData unpack(int packed) { - float accel = (packed & 0xFFFF) / GRAVITY_PRECISION; - float radius = (packed >> 16) / RADIUS_PRECISION; + float gravity = (packed & 0xFFFF) / GRAVITY_PRECISION; + float radius = ((packed >>> 16) & 0xFFFF) / RADIUS_PRECISION; - return new GravityData(accel, radius); + return new GravityData(gravity, radius); } }