mirror of
https://github.com/XevianLight/Aphelion.git
synced 2026-05-11 01:50:56 +01:00
Converted EnvironmentData and GravityData to records cause we never need to modify them
This commit is contained in:
@@ -103,9 +103,8 @@ public class EnvironmentSavedData extends SavedData {
|
|||||||
|
|
||||||
public void setOxygen(Level level, BlockPos pos, boolean value) {
|
public void setOxygen(Level level, BlockPos pos, boolean value) {
|
||||||
var data = getDataForPosition(level, pos);
|
var data = getDataForPosition(level, pos);
|
||||||
data.setOxygen(value);
|
|
||||||
// Aphelion.LOGGER.info("Set oxygen for {} to {}", pos, 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<BlockPos> positions, boolean value) {
|
public void setOxygen(Level level, Collection<BlockPos> positions, boolean value) {
|
||||||
@@ -116,8 +115,7 @@ public class EnvironmentSavedData extends SavedData {
|
|||||||
|
|
||||||
public void resetOxygen(Level level, BlockPos pos) {
|
public void resetOxygen(Level level, BlockPos pos) {
|
||||||
var data = getDataForPosition(level, pos);
|
var data = getDataForPosition(level, pos);
|
||||||
data.setOxygen(defaultData(level).hasOxygen());
|
putOrRemove(level, pos.asLong(), data.withOxygen(defaultData(level).hasOxygen()).pack());
|
||||||
putOrRemove(level, pos.asLong(), data.pack());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetOxygen(Level level, Collection<BlockPos> positions) {
|
public void resetOxygen(Level level, Collection<BlockPos> positions) {
|
||||||
@@ -133,8 +131,7 @@ public class EnvironmentSavedData extends SavedData {
|
|||||||
|
|
||||||
public void setGravity(Level level, BlockPos pos, float value) {
|
public void setGravity(Level level, BlockPos pos, float value) {
|
||||||
var data = getDataForPosition(level, pos);
|
var data = getDataForPosition(level, pos);
|
||||||
data.setGravity(value);
|
putOrRemove(level, pos.asLong(), data.withGravity(value).pack());
|
||||||
putOrRemove(level, pos.asLong(), data.pack());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGravity(Level level, Collection<BlockPos> positions, float value) {
|
public void setGravity(Level level, Collection<BlockPos> positions, float value) {
|
||||||
@@ -145,8 +142,7 @@ public class EnvironmentSavedData extends SavedData {
|
|||||||
|
|
||||||
public void resetGravity(Level level, BlockPos pos) {
|
public void resetGravity(Level level, BlockPos pos) {
|
||||||
var data = getDataForPosition(level, pos);
|
var data = getDataForPosition(level, pos);
|
||||||
data.setGravity(defaultData(level).getGravity());
|
putOrRemove(level, pos.asLong(), data.withGravity(defaultData(level).getGravity()).pack());
|
||||||
putOrRemove(level, pos.asLong(), data.pack());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public short getTemperature(Level level, BlockPos pos) {
|
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) {
|
public void setTemperature(Level level, BlockPos pos, short value) {
|
||||||
var data = getDataForPosition(level, pos);
|
var data = getDataForPosition(level, pos);
|
||||||
data.setTemperature(value);
|
putOrRemove(level, pos.asLong(), data.withTemperature(value).pack());
|
||||||
putOrRemove(level, pos.asLong(), data.pack());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTemperature(Level level, Collection<BlockPos> positions, short value) {
|
public void setTemperature(Level level, Collection<BlockPos> positions, short value) {
|
||||||
@@ -168,8 +163,7 @@ public class EnvironmentSavedData extends SavedData {
|
|||||||
|
|
||||||
public void resetTemperature(Level level, BlockPos pos) {
|
public void resetTemperature(Level level, BlockPos pos) {
|
||||||
var data = getDataForPosition(level, pos);
|
var data = getDataForPosition(level, pos);
|
||||||
data.setTemperature(defaultData(level).getTemperature());
|
putOrRemove(level, pos.asLong(), data.withTemperature((defaultData(level).getTemperature())).pack());
|
||||||
putOrRemove(level, pos.asLong(), data.pack());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void putOrRemove(Level level, long key, int packed) {
|
private void putOrRemove(Level level, long key, int packed) {
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package net.xevianlight.aphelion.core.saveddata;
|
package net.xevianlight.aphelion.core.saveddata;
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
|
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.BlockPos;
|
||||||
import net.minecraft.core.HolderLookup;
|
import net.minecraft.core.HolderLookup;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
@@ -10,8 +8,6 @@ import net.minecraft.nbt.Tag;
|
|||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.saveddata.SavedData;
|
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.core.saveddata.types.GravityData;
|
||||||
import net.xevianlight.aphelion.planet.Planet;
|
import net.xevianlight.aphelion.planet.Planet;
|
||||||
import net.xevianlight.aphelion.planet.PlanetCache;
|
import net.xevianlight.aphelion.planet.PlanetCache;
|
||||||
@@ -19,7 +15,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -105,7 +100,7 @@ public class GravitySavedData extends SavedData {
|
|||||||
List<GravityData> regions = getGravityRegions(pos);
|
List<GravityData> regions = getGravityRegions(pos);
|
||||||
|
|
||||||
for (var e : regions) {
|
for (var e : regions) {
|
||||||
sum += e.getAccel();
|
sum += e.getGravity();
|
||||||
}
|
}
|
||||||
|
|
||||||
return sum;
|
return sum;
|
||||||
@@ -120,7 +115,7 @@ public class GravitySavedData extends SavedData {
|
|||||||
List<GravityData> regions = getGravityRegions(pos);
|
List<GravityData> regions = getGravityRegions(pos);
|
||||||
|
|
||||||
for (var e : regions) {
|
for (var e : regions) {
|
||||||
var accel = e.getAccel();
|
var accel = e.getGravity();
|
||||||
if (accel > max) max = accel;
|
if (accel > max) max = accel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package net.xevianlight.aphelion.core.saveddata.types;
|
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 TEMPERATURE_BIT = OXYGEN_BIT + OXYGEN_BITS; // next 16 bits
|
||||||
private static final int GRAVITY_BIT = TEMPERATURE_BIT + TEMPERATURE_BITS; // next 15 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) {
|
public EnvironmentData(boolean oxygen, short temperature, float gravity) {
|
||||||
this.oxygen = oxygen;
|
this.oxygen = oxygen;
|
||||||
@@ -36,6 +33,19 @@ public final class EnvironmentData {
|
|||||||
this.gravity = gravity;
|
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() {
|
public int pack() {
|
||||||
int packedData = 0;
|
int packedData = 0;
|
||||||
|
|
||||||
@@ -76,23 +86,12 @@ public final class EnvironmentData {
|
|||||||
return oxygen;
|
return oxygen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOxygen(boolean oxygen) {
|
|
||||||
this.oxygen = oxygen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public short getTemperature() {
|
public short getTemperature() {
|
||||||
return temperature;
|
return temperature;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTemperature(short temperature) {
|
|
||||||
this.temperature = temperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public float getGravity() {
|
public float getGravity() {
|
||||||
return gravity;
|
return gravity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGravity(float gravity) {
|
|
||||||
this.gravity = gravity;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package net.xevianlight.aphelion.core.saveddata.types;
|
package net.xevianlight.aphelion.core.saveddata.types;
|
||||||
|
|
||||||
public class GravityData {
|
// 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.
|
||||||
private float accel;
|
// We never store GravityData for any reason other than to test its values or to pack it into an integer.
|
||||||
private float radius;
|
public record GravityData (float gravity, float radius) {
|
||||||
|
|
||||||
public static final float DEFAULT_GRAVITY = 9.80665f; // 1G
|
public static final float DEFAULT_GRAVITY = 9.80665f; // 1G
|
||||||
public static final float GRAVITY_PRECISION = 100.0f;
|
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_RADIUS = Short.MAX_VALUE / RADIUS_PRECISION;
|
||||||
public static final float MAX_GRAVITY = Short.MAX_VALUE / GRAVITY_PRECISION;
|
public static final float MAX_GRAVITY = Short.MAX_VALUE / GRAVITY_PRECISION;
|
||||||
|
|
||||||
public GravityData(float accel, float radius) {
|
public GravityData {
|
||||||
this.accel = accel;
|
gravity = Math.clamp(gravity, 0f, MAX_GRAVITY);
|
||||||
this.radius = radius;
|
radius = Math.clamp(radius, 0f, MAX_RADIUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int pack() {
|
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);
|
return g | (r << 16);
|
||||||
packed |= (int) (this.radius * RADIUS_PRECISION) << 16;
|
|
||||||
|
|
||||||
return packed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getAccel() {
|
public float getGravity() {
|
||||||
return accel;
|
return gravity;
|
||||||
}
|
|
||||||
|
|
||||||
public void setAccel(float accel) {
|
|
||||||
this.accel = accel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getRadius() {
|
public float getRadius() {
|
||||||
return radius;
|
return radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRadius(short radius) {
|
|
||||||
this.radius = radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GravityData unpack(int packed) {
|
public static GravityData unpack(int packed) {
|
||||||
float accel = (packed & 0xFFFF) / GRAVITY_PRECISION;
|
float gravity = (packed & 0xFFFF) / GRAVITY_PRECISION;
|
||||||
float radius = (packed >> 16) / RADIUS_PRECISION;
|
float radius = ((packed >>> 16) & 0xFFFF) / RADIUS_PRECISION;
|
||||||
|
|
||||||
return new GravityData(accel, radius);
|
return new GravityData(gravity, radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user