From b5a84fc1faae1553aa44bc82663c065b9f21838b Mon Sep 17 00:00:00 2001 From: FalsePattern Date: Wed, 13 Dec 2023 17:05:49 +0100 Subject: [PATCH] The Great Naming Scheme Cleanup. Breaking change. - Replaced "EBS" with "subchunk" - Replaced "section" with "subchunk" - Removed the Chunk* prefix from most classes - Data manager names much more descriptive and less verbose Yes, this contradicts the backwards compatibility requirements set forth in the FalsePatternLib StableAPI interface, however, we're still in beta, and only our mods use this library as far as I'm aware, so it's fine to make changes like this for now. --- ...ChunkDataManager.java => DataManager.java} | 96 +++++++++---------- ...unkDataRegistry.java => DataRegistry.java} | 26 ++--- .../falsepattern/chunk/api/package-info.java | 4 +- .../falsepattern/chunk/internal/ChunkAPI.java | 14 +-- .../falsepattern/chunk/internal/Common.java | 4 +- ...egistryImpl.java => DataRegistryImpl.java} | 68 ++++++------- .../core/ChunkAPICoreModContainer.java | 11 +-- .../mixins/client/vanilla/ChunkMixin.java | 10 +- .../common/vanilla/AnvilChunkLoaderMixin.java | 54 +++++------ .../vanilla/S21PacketChunkDataMixin.java | 24 ++--- .../vanilla/S26PacketMapChunkBulkMixin.java | 12 +-- .../chunk/internal/vanilla/BiomeManager.java | 8 +- .../internal/vanilla/BlockIDManager.java | 68 ++++++------- .../internal/vanilla/BlocklightManager.java | 20 ++-- .../internal/vanilla/LightingManager.java | 4 +- .../internal/vanilla/MetadataManager.java | 20 ++-- .../chunk/internal/vanilla/NibbleManager.java | 38 ++++---- .../internal/vanilla/SkylightManager.java | 30 +++--- .../internal/vanilla/VanillaManager.java | 4 +- 19 files changed, 250 insertions(+), 265 deletions(-) rename src/main/java/com/falsepattern/chunk/api/{ChunkDataManager.java => DataManager.java} (70%) rename src/main/java/com/falsepattern/chunk/api/{ChunkDataRegistry.java => DataRegistry.java} (79%) rename src/main/java/com/falsepattern/chunk/internal/{ChunkDataRegistryImpl.java => DataRegistryImpl.java} (85%) diff --git a/src/main/java/com/falsepattern/chunk/api/ChunkDataManager.java b/src/main/java/com/falsepattern/chunk/api/DataManager.java similarity index 70% rename from src/main/java/com/falsepattern/chunk/api/ChunkDataManager.java rename to src/main/java/com/falsepattern/chunk/api/DataManager.java index fa4d632..a29800e 100644 --- a/src/main/java/com/falsepattern/chunk/api/ChunkDataManager.java +++ b/src/main/java/com/falsepattern/chunk/api/DataManager.java @@ -8,7 +8,6 @@ package com.falsepattern.chunk.api; import com.falsepattern.lib.StableAPI; -import lombok.val; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,16 +23,16 @@ import java.nio.ByteBuffer; * managers. For the actual networking and data storage, see the internal interfaces of this interface. * Note: This interface does nothing by itself, you also need to implement one or more of the internal interfaces. * - * @since 0.1.0 - * @see ChunkDataManager.PacketDataManager - * @see ChunkDataManager.ChunkNBTDataManager - * @see ChunkDataManager.SectionNBTDataManager - * @see ChunkDataRegistry + * @since 0.5.0 + * @see PacketDataManager + * @see ChunkDataManager + * @see SubchunkDataManager + * @see DataRegistry * @author FalsePattern - * @version 0.1.0 + * @version 0.5.0 */ -@StableAPI(since = "0.1.0") -public interface ChunkDataManager { +@StableAPI(since = "0.5.0") +public interface DataManager { /** * @return The domain of this manager. Usually the modid of the mod that owns this manager. @@ -52,16 +51,16 @@ public interface ChunkDataManager { /** * Implement this interface if you want to synchronize your data with the client. * - * @since 0.1.0 + * @since 0.5.0 * @author FalsePattern - * @version 0.1.0 + * @version 0.5.0 */ - @StableAPI(since = "0.1.0") - interface PacketDataManager extends ChunkDataManager { + @StableAPI(since = "0.5.0") + interface PacketDataManager extends DataManager { /** * @return The maximum amount of bytes your data can take up in a packet. * - * @implNote This is used to determine the size of the packet compression/decompression buffer. + * @implSpec This is used to determine the size of the packet compression/decompression buffer. * Only called ONCE, during registration! */ @StableAPI.Expose @@ -75,7 +74,7 @@ public interface ChunkDataManager { */ @Contract(mutates = "param4") @StableAPI.Expose - void writeToBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer data); + void writeToBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer data); /** * Deserializes your data from a packet. @@ -86,15 +85,18 @@ public interface ChunkDataManager { */ @Contract(mutates = "param1,param4") @StableAPI.Expose - void readFromBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer buffer); + void readFromBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer buffer); } /** - * The common superinterface for ChunkNBTDataManager and SectionNBTDataManager. + * The common superinterface for RootDataManager and SubchunkDataManager. * Contains version information and messages for users attempting to upgrade/remove versions. + * @since 0.5.0 + * @author FalsePattern + * @version 0.5.0 */ - @StableAPI(since = "0.4.0") - interface NBTDataManager extends ChunkDataManager { + @StableAPI(since = "0.5.0") + interface StorageDataManager extends DataManager { /** * @return The current version of the data manager */ @@ -113,8 +115,8 @@ public interface ChunkDataManager { String newInstallDescription(); /** - * @return The message to show to users when this mod is removed and they try to load the world (stored in the - * world's NBT during save) + * @return The message to show to users when this manager is removed, AND they try to load the world (stored in the + * world's NBT during previous saves) */ @StableAPI.Expose @Contract(pure = true) @@ -133,14 +135,14 @@ public interface ChunkDataManager { } /** - * Implement this interface if you want to save your data to disk. This is called once per chunk. + * Implement this interface if you want to save your data to disk. This is called once per chunk, hence "root" * - * @since 0.1.0 + * @since 0.5.0 * @author FalsePattern - * @version 0.1.0 + * @version 0.5.0 */ - @StableAPI(since = "0.1.0") - interface ChunkNBTDataManager extends NBTDataManager { + @StableAPI(since = "0.5.0") + interface ChunkDataManager extends StorageDataManager { /** * If false, the given nbt compound will be a freshly created object that gets inserted into the actual * level NBT tag under the `domain:id` name. @@ -177,27 +179,21 @@ public interface ChunkDataManager { * Directly copies data from one chunk to another chunk. * @param from The chunk to copy data from. * @param to The chunk to copy data to. - * @implNote The default implementation uses a very inefficient method of serialize->deserialize, so this should be overridden if possible. */ @Contract(mutates = "param2") - @StableAPI.Expose(since = "0.5.0") - default void cloneChunk(Chunk from, Chunk to) { - val tmp = new NBTTagCompound(); - writeChunkToNBT(from, tmp); - readChunkFromNBT(to, tmp); - } + void cloneChunk(Chunk from, Chunk to); } /** - * Implement this interface if you want to save your ExtendedBlockStorage data to disk. This is called once per + * Implement this interface if you want to save your subchunk data to disk. This is called once per * ExtendedBlockStorage per chunk. (16 times per chunk) * - * @since 0.1.0 + * @since 0.5.0 * @author FalsePattern - * @version 0.1.0 + * @version 0.5.0 */ - @StableAPI(since = "0.1.0") - interface SectionNBTDataManager extends NBTDataManager { + @StableAPI(since = "0.5.0") + interface SubchunkDataManager extends StorageDataManager { /** * If false, the given nbt compound will be a freshly created object that gets inserted into the actual * segment NBT tag under the `domain:id` name. @@ -208,7 +204,7 @@ public interface ChunkDataManager { */ @StableAPI.Expose @Contract(pure = true) - default boolean sectionPrivilegedAccess() { + default boolean subchunkPrivilegedAccess() { return false; } @@ -217,31 +213,25 @@ public interface ChunkDataManager { */ @Contract(mutates = "param3") @StableAPI.Expose - void writeSectionToNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section); + void writeSubchunkToNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt); /** * Deserializes your data from an NBT tag. This is used when loading the chunk from disk. * The NBT *may* be null if the chunk was saved before this manager was registered - * (e.g., loading save before the mod was added), and the manager is not {@link #sectionPrivilegedAccess() privileged}. + * (e.g., loading save before the mod was added), and the manager is not {@link #subchunkPrivilegedAccess() privileged}. * In this case, you should initialize the data to a sane default. */ @Contract(mutates = "param2") @StableAPI.Expose - void readSectionFromNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section); + void readSubchunkFromNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt); /** - * Directly copies data from one section to another section. - * @param fromChunk The owner of the section to copy data from. - * @param from The section to copy data from. - * @param to The section to copy data to. - * @implNote The default implementation uses a very inefficient method of serialize->deserialize, so this should be overridden if possible. + * Directly copies data from one subchunk to another. + * @param fromChunk The owner of the subchunk to copy data from. + * @param from The subchunk to copy data from. + * @param to The subchunk to copy data to. */ @Contract(mutates = "param3") - @StableAPI.Expose(since = "0.5.0") - default void cloneSection(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { - val tmp = new NBTTagCompound(); - writeSectionToNBT(fromChunk, from, tmp); - readSectionFromNBT(fromChunk, to, tmp); - } + void cloneSubchunk(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to); } } diff --git a/src/main/java/com/falsepattern/chunk/api/ChunkDataRegistry.java b/src/main/java/com/falsepattern/chunk/api/DataRegistry.java similarity index 79% rename from src/main/java/com/falsepattern/chunk/api/ChunkDataRegistry.java rename to src/main/java/com/falsepattern/chunk/api/DataRegistry.java index aaec398..b94f79f 100644 --- a/src/main/java/com/falsepattern/chunk/api/ChunkDataRegistry.java +++ b/src/main/java/com/falsepattern/chunk/api/DataRegistry.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.api; -import com.falsepattern.chunk.internal.ChunkDataRegistryImpl; +import com.falsepattern.chunk.internal.DataRegistryImpl; import com.falsepattern.lib.StableAPI; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Unmodifiable; @@ -20,13 +20,13 @@ import java.util.Set; /** * This class is used to register ChunkDataManagers, as well as dispatch clone requests. * - * @since 0.1.0 - * @see ChunkDataManager + * @since 0.5.0 + * @see DataManager * @author FalsePattern - * @version 0.1.0 + * @version 0.5.0 */ -@StableAPI(since = "0.1.0") -public class ChunkDataRegistry { +@StableAPI(since = "0.5.0") +public class DataRegistry { /** * Registers a ChunkDataManager. Only do this during the init phase. * @@ -36,9 +36,9 @@ public class ChunkDataRegistry { * @throws IllegalArgumentException If the manager has a duplicate id. */ @StableAPI.Expose - public static void registerDataManager(ChunkDataManager manager) + public static void registerDataManager(DataManager manager) throws IllegalStateException, IllegalArgumentException { - ChunkDataRegistryImpl.registerDataManager(manager); + DataRegistryImpl.registerDataManager(manager); } /** @@ -50,7 +50,7 @@ public class ChunkDataRegistry { */ @StableAPI.Expose public static void disableDataManager(String domain, String id) throws IllegalStateException { - ChunkDataRegistryImpl.disableDataManager(domain, id); + DataRegistryImpl.disableDataManager(domain, id); } /** @@ -60,7 +60,7 @@ public class ChunkDataRegistry { @Contract(pure = true) @StableAPI.Expose public static @Unmodifiable Set getRegisteredManagers() { - return ChunkDataRegistryImpl.getRegisteredManagers(); + return DataRegistryImpl.getRegisteredManagers(); } /** @@ -72,7 +72,7 @@ public class ChunkDataRegistry { @Contract(mutates = "param2") @StableAPI.Expose(since = "0.5.0") public static void cloneChunk(Chunk from, Chunk to) { - ChunkDataRegistryImpl.cloneChunk(from, to); + DataRegistryImpl.cloneChunk(from, to); } /** @@ -83,7 +83,7 @@ public class ChunkDataRegistry { */ @Contract(mutates = "param3") @StableAPI.Expose(since = "0.5.0") - public static void cloneSection(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { - ChunkDataRegistryImpl.cloneSection(fromChunk, from, to); + public static void cloneSubchunk(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { + DataRegistryImpl.cloneSubchunk(fromChunk, from, to); } } diff --git a/src/main/java/com/falsepattern/chunk/api/package-info.java b/src/main/java/com/falsepattern/chunk/api/package-info.java index 75f6f3e..a681e45 100644 --- a/src/main/java/com/falsepattern/chunk/api/package-info.java +++ b/src/main/java/com/falsepattern/chunk/api/package-info.java @@ -8,8 +8,8 @@ /** * This package contains the classes that you will use to interact with the ChunkAPI library. * - * @since 0.1.0 + * @since 0.5.0 * @author FalsePattern - * @version 0.1.0 + * @version 0.5.0 */ package com.falsepattern.chunk.api; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/chunk/internal/ChunkAPI.java b/src/main/java/com/falsepattern/chunk/internal/ChunkAPI.java index d37c8f3..8774da2 100644 --- a/src/main/java/com/falsepattern/chunk/internal/ChunkAPI.java +++ b/src/main/java/com/falsepattern/chunk/internal/ChunkAPI.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal; -import com.falsepattern.chunk.api.ChunkDataRegistry; +import com.falsepattern.chunk.api.DataRegistry; import com.falsepattern.chunk.internal.vanilla.BiomeManager; import com.falsepattern.chunk.internal.vanilla.BlockIDManager; import com.falsepattern.chunk.internal.vanilla.BlocklightManager; @@ -27,11 +27,11 @@ public class ChunkAPI { @Mod.EventHandler public void init(FMLInitializationEvent event) { - ChunkDataRegistry.registerDataManager(new BlockIDManager()); - ChunkDataRegistry.registerDataManager(new MetadataManager()); - ChunkDataRegistry.registerDataManager(new LightingManager()); - ChunkDataRegistry.registerDataManager(new BlocklightManager()); - ChunkDataRegistry.registerDataManager(new SkylightManager()); - ChunkDataRegistry.registerDataManager(new BiomeManager()); + DataRegistry.registerDataManager(new BlockIDManager()); + DataRegistry.registerDataManager(new MetadataManager()); + DataRegistry.registerDataManager(new LightingManager()); + DataRegistry.registerDataManager(new BlocklightManager()); + DataRegistry.registerDataManager(new SkylightManager()); + DataRegistry.registerDataManager(new BiomeManager()); } } \ No newline at end of file diff --git a/src/main/java/com/falsepattern/chunk/internal/Common.java b/src/main/java/com/falsepattern/chunk/internal/Common.java index 5e3caea..3350915 100644 --- a/src/main/java/com/falsepattern/chunk/internal/Common.java +++ b/src/main/java/com/falsepattern/chunk/internal/Common.java @@ -16,6 +16,6 @@ import org.apache.logging.log4j.Logger; public class Common { public static final Logger LOG = LogManager.getLogger(Tags.MODID); - public static final int EBS_PER_CHUNK = 16; - public static final int BLOCKS_PER_EBS = 16 * 16 * 16; + public static final int SUBCHUNKS_PER_CHUNK = 16; + public static final int BLOCKS_PER_SUBCHUNK = 16 * 16 * 16; } diff --git a/src/main/java/com/falsepattern/chunk/internal/ChunkDataRegistryImpl.java b/src/main/java/com/falsepattern/chunk/internal/DataRegistryImpl.java similarity index 85% rename from src/main/java/com/falsepattern/chunk/internal/ChunkDataRegistryImpl.java rename to src/main/java/com/falsepattern/chunk/internal/DataRegistryImpl.java index 8815cfd..01c11ed 100644 --- a/src/main/java/com/falsepattern/chunk/internal/ChunkDataRegistryImpl.java +++ b/src/main/java/com/falsepattern/chunk/internal/DataRegistryImpl.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import lombok.Data; import lombok.val; import lombok.var; @@ -33,22 +33,22 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -public class ChunkDataRegistryImpl { +public class DataRegistryImpl { private static final Set managers = new HashSet<>(); private static final Map packetManagers = new HashMap<>(); - private static final Map NBTManagers = new HashMap<>(); - private static final Map chunkNBTManagers = new HashMap<>(); - private static final Map sectionNBTManagers = new HashMap<>(); + private static final Map NBTManagers = new HashMap<>(); + private static final Map chunkNBTManagers = new HashMap<>(); + private static final Map subchunkNBTManagers = new HashMap<>(); private static final Set disabledManagers = new HashSet<>(); private static int maxPacketSize = 4; @Data private static class PacketManagerInfo { public final int maxPacketSize; - public final ChunkDataManager.PacketDataManager manager; + public final DataManager.PacketDataManager manager; } - public static void registerDataManager(ChunkDataManager manager) + public static void registerDataManager(DataManager manager) throws IllegalStateException, IllegalArgumentException { if (Loader.instance().getLoaderState() != LoaderState.INITIALIZATION) { throw new IllegalStateException("ChunkDataManager registration is not allowed at this time! " + @@ -65,19 +65,19 @@ public class ChunkDataRegistryImpl { } managers.add(id); - if (manager instanceof ChunkDataManager.PacketDataManager) { - val packetManager = (ChunkDataManager.PacketDataManager) manager; + if (manager instanceof DataManager.PacketDataManager) { + val packetManager = (DataManager.PacketDataManager) manager; val maxSize = packetManager.maxPacketSize(); maxPacketSize += 4 + id.getBytes(StandardCharsets.UTF_8).length + 4 + maxSize; packetManagers.put(id, new PacketManagerInfo(maxSize, packetManager)); } - if (manager instanceof ChunkDataManager.NBTDataManager) { - NBTManagers.put(id, (ChunkDataManager.NBTDataManager) manager); - if (manager instanceof ChunkDataManager.ChunkNBTDataManager) { - chunkNBTManagers.put(id, (ChunkDataManager.ChunkNBTDataManager) manager); + if (manager instanceof DataManager.StorageDataManager) { + NBTManagers.put(id, (DataManager.StorageDataManager) manager); + if (manager instanceof DataManager.ChunkDataManager) { + chunkNBTManagers.put(id, (DataManager.ChunkDataManager) manager); } - if (manager instanceof ChunkDataManager.SectionNBTDataManager) { - sectionNBTManagers.put(id, (ChunkDataManager.SectionNBTDataManager) manager); + if (manager instanceof DataManager.SubchunkDataManager) { + subchunkNBTManagers.put(id, (DataManager.SubchunkDataManager) manager); } } } @@ -98,7 +98,7 @@ public class ChunkDataRegistryImpl { maxPacketSize -= 4 + id.getBytes(StandardCharsets.UTF_8).length + 4 + removed.maxPacketSize; } chunkNBTManagers.remove(manager); - sectionNBTManagers.remove(manager); + subchunkNBTManagers.remove(manager); NBTManagers.remove(manager); } @@ -123,7 +123,7 @@ public class ChunkDataRegistryImpl { return new String(bytes); } - public static void readFromBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, byte[] data) { + public static void readFromBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, byte[] data) { val buf = ByteBuffer.wrap(data); buf.order(ByteOrder.LITTLE_ENDIAN); int count = buf.getInt(); @@ -141,12 +141,12 @@ public class ChunkDataRegistryImpl { } int start = buf.position(); val slice = createSlice(buf, start, length); - managerInfo.manager.readFromBuffer(chunk, ebsMask, forceUpdate, slice); + managerInfo.manager.readFromBuffer(chunk, subchunkMask, forceUpdate, slice); buf.position(start + length); } } - public static int writeToBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, byte[] data) { + public static int writeToBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, byte[] data) { val buf = ByteBuffer.wrap(data); buf.order(ByteOrder.LITTLE_ENDIAN); buf.putInt(packetManagers.size()); @@ -156,7 +156,7 @@ public class ChunkDataRegistryImpl { writeString(buf, id); int start = buf.position() + 4; val slice = createSlice(buf, start, managerInfo.maxPacketSize); - managerInfo.manager.writeToBuffer(chunk, ebsMask, forceUpdate, slice); + managerInfo.manager.writeToBuffer(chunk, subchunkMask, forceUpdate, slice); int length = slice.position(); buf.putInt(length); buf.position(start + length); @@ -175,7 +175,7 @@ public class ChunkDataRegistryImpl { return slice; } - private static NBTTagCompound createManagerNBT(boolean privileged, NBTTagCompound root, ChunkDataManager manager) { + private static NBTTagCompound createManagerNBT(boolean privileged, NBTTagCompound root, DataManager manager) { if (privileged) { return root; } @@ -197,7 +197,7 @@ public class ChunkDataRegistryImpl { } } - private static NBTTagCompound getManagerNBT(boolean privileged, NBTTagCompound root, ChunkDataManager manager) { + private static NBTTagCompound getManagerNBT(boolean privileged, NBTTagCompound root, DataManager manager) { if (privileged) { return root; } @@ -212,17 +212,17 @@ public class ChunkDataRegistryImpl { return domainNBT.getCompoundTag(manager.id()); } - public static void writeSectionToNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound sectionNBT) { - for (val manager : sectionNBTManagers.values()) { - manager.writeSectionToNBT(chunk, ebs, - createManagerNBT(manager.sectionPrivilegedAccess(), sectionNBT, manager)); + public static void writeSubchunkToNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + for (val manager : subchunkNBTManagers.values()) { + manager.writeSubchunkToNBT(chunk, subchunk, + createManagerNBT(manager.subchunkPrivilegedAccess(), nbt, manager)); } } - public static void readSectionFromNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound sectionNBT) { - for (val manager : sectionNBTManagers.values()) { - manager.readSectionFromNBT(chunk, ebs, - getManagerNBT(manager.sectionPrivilegedAccess(), sectionNBT, manager)); + public static void readSubchunkFromNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + for (val manager : subchunkNBTManagers.values()) { + manager.readSubchunkFromNBT(chunk, subchunk, + getManagerNBT(manager.subchunkPrivilegedAccess(), nbt, manager)); } } @@ -244,9 +244,9 @@ public class ChunkDataRegistryImpl { } } - public static void cloneSection(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { - for (val manager: sectionNBTManagers.values()) { - manager.cloneSection(fromChunk, from, to); + public static void cloneSubchunk(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { + for (val manager: subchunkNBTManagers.values()) { + manager.cloneSubchunk(fromChunk, from, to); } } @@ -414,7 +414,7 @@ public class ChunkDataRegistryImpl { } } - public static SaveManagerInfo fromManager(ChunkDataManager.NBTDataManager manager) { + public static SaveManagerInfo fromManager(DataManager.StorageDataManager manager) { return new SaveManagerInfo(manager.version(), manager.uninstallMessage()); } } diff --git a/src/main/java/com/falsepattern/chunk/internal/core/ChunkAPICoreModContainer.java b/src/main/java/com/falsepattern/chunk/internal/core/ChunkAPICoreModContainer.java index bc94119..aa69322 100644 --- a/src/main/java/com/falsepattern/chunk/internal/core/ChunkAPICoreModContainer.java +++ b/src/main/java/com/falsepattern/chunk/internal/core/ChunkAPICoreModContainer.java @@ -1,26 +1,21 @@ package com.falsepattern.chunk.internal.core; -import com.falsepattern.chunk.internal.ChunkDataRegistryImpl; +import com.falsepattern.chunk.internal.DataRegistryImpl; import com.falsepattern.chunk.internal.Tags; import com.google.common.eventbus.EventBus; -import lombok.Data; import lombok.val; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.storage.SaveHandler; import net.minecraft.world.storage.WorldInfo; -import net.minecraftforge.common.util.Constants; import cpw.mods.fml.common.DummyModContainer; import cpw.mods.fml.common.LoadController; import cpw.mods.fml.common.ModMetadata; -import cpw.mods.fml.common.StartupQuery; import cpw.mods.fml.common.WorldAccessContainer; import cpw.mods.fml.common.versioning.DefaultArtifactVersion; -import java.util.HashMap; import java.util.Map; -import java.util.Set; public class ChunkAPICoreModContainer extends DummyModContainer implements WorldAccessContainer { public ChunkAPICoreModContainer() { @@ -45,12 +40,12 @@ public class ChunkAPICoreModContainer extends DummyModContainer implements World @Override public NBTTagCompound getDataForWriting(SaveHandler handler, WorldInfo info) { val tag = new NBTTagCompound(); - ChunkDataRegistryImpl.writeLevelDat(tag); + DataRegistryImpl.writeLevelDat(tag); return tag; } @Override public void readData(SaveHandler handler, WorldInfo info, Map propertyMap, NBTTagCompound tag) { - ChunkDataRegistryImpl.readLevelDat(tag); + DataRegistryImpl.readLevelDat(tag); } } diff --git a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/client/vanilla/ChunkMixin.java b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/client/vanilla/ChunkMixin.java index f20de2e..e744a2d 100644 --- a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/client/vanilla/ChunkMixin.java +++ b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/client/vanilla/ChunkMixin.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.mixin.mixins.client.vanilla; -import com.falsepattern.chunk.internal.ChunkDataRegistryImpl; +import com.falsepattern.chunk.internal.DataRegistryImpl; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -53,7 +53,7 @@ public abstract class ChunkMixin { */ @SideOnly(Side.CLIENT) @Overwrite - public void fillChunk(byte[] data, int ebsMask, int ebsMSBMask, boolean forceUpdate) { + public void fillChunk(byte[] data, int subchunkMask, int subchunkMSBMask, boolean forceUpdate) { for (Object o : chunkTileEntityMap.values()) { TileEntity tileEntity = (TileEntity) o; tileEntity.updateContainingBlockInfo(); @@ -64,7 +64,7 @@ public abstract class ChunkMixin { boolean hasSky = !this.worldObj.provider.hasNoSky; for (int i = 0; i < storageArrays.length; i++) { - if ((ebsMask & (1 << i)) != 0) { + if ((subchunkMask & (1 << i)) != 0) { if (storageArrays[i] == null) { storageArrays[i] = new ExtendedBlockStorage(i << 4, hasSky); } @@ -73,10 +73,10 @@ public abstract class ChunkMixin { } } - ChunkDataRegistryImpl.readFromBuffer((Chunk) (Object) this, ebsMask, forceUpdate, data); + DataRegistryImpl.readFromBuffer((Chunk) (Object) this, subchunkMask, forceUpdate, data); for (int i = 0; i < storageArrays.length; ++i) { - if ((storageArrays[i] != null) && ((ebsMask & (1 << i)) != 0)) { + if ((storageArrays[i] != null) && ((subchunkMask & (1 << i)) != 0)) { storageArrays[i].removeInvalidBlocks(); } } diff --git a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/AnvilChunkLoaderMixin.java b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/AnvilChunkLoaderMixin.java index c2036a7..3259f28 100644 --- a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/AnvilChunkLoaderMixin.java +++ b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/AnvilChunkLoaderMixin.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.mixin.mixins.common.vanilla; -import com.falsepattern.chunk.internal.ChunkDataRegistryImpl; +import com.falsepattern.chunk.internal.DataRegistryImpl; import lombok.val; import org.apache.logging.log4j.Level; import org.spongepowered.asm.mixin.Mixin; @@ -44,7 +44,7 @@ public abstract class AnvilChunkLoaderMixin { nbt.setLong("LastUpdate", world.getTotalWorldTime()); nbt.setBoolean("TerrainPopulated", chunk.isTerrainPopulated); nbt.setLong("InhabitedTime", chunk.inhabitedTime); - writeSections(chunk, nbt); + writeSubchunks(chunk, nbt); writeCustomData(chunk, nbt); writeEntities(chunk, world, nbt); } @@ -63,7 +63,7 @@ public abstract class AnvilChunkLoaderMixin { Chunk chunk = new Chunk(world, x, z); chunk.isTerrainPopulated = nbt.getBoolean("TerrainPopulated"); chunk.inhabitedTime = nbt.getLong("InhabitedTime"); - readSections(chunk, nbt); + readSubchunks(chunk, nbt); readCustomData(chunk, nbt); // End this method here and split off entity loading to another method @@ -71,46 +71,46 @@ public abstract class AnvilChunkLoaderMixin { } private void readCustomData(Chunk chunk, NBTTagCompound nbt) { - ChunkDataRegistryImpl.readChunkFromNBT(chunk, nbt); + DataRegistryImpl.readChunkFromNBT(chunk, nbt); } - private void readSections(Chunk chunk, NBTTagCompound nbt) { - NBTTagList sections = nbt.getTagList("Sections", 10); + private void readSubchunks(Chunk chunk, NBTTagCompound nbt) { + NBTTagList subchunksNBT = nbt.getTagList("Sections", 10); byte segments = 16; - ExtendedBlockStorage[] ebsList = new ExtendedBlockStorage[segments]; + ExtendedBlockStorage[] subchunkList = new ExtendedBlockStorage[segments]; - for (int k = 0; k < sections.tagCount(); ++k) { - NBTTagCompound section = sections.getCompoundTagAt(k); - byte yLevel = section.getByte("Y"); - ExtendedBlockStorage ebs = new ExtendedBlockStorage(yLevel << 4, !chunk.worldObj.provider.hasNoSky); - ChunkDataRegistryImpl.readSectionFromNBT(chunk, ebs, section); + for (int k = 0; k < subchunksNBT.tagCount(); ++k) { + NBTTagCompound subchunkNBT = subchunksNBT.getCompoundTagAt(k); + byte yLevel = subchunkNBT.getByte("Y"); + ExtendedBlockStorage subchunk = new ExtendedBlockStorage(yLevel << 4, !chunk.worldObj.provider.hasNoSky); + DataRegistryImpl.readSubchunkFromNBT(chunk, subchunk, subchunkNBT); - ebs.removeInvalidBlocks(); - ebsList[yLevel] = ebs; + subchunk.removeInvalidBlocks(); + subchunkList[yLevel] = subchunk; } - chunk.setStorageArrays(ebsList); + chunk.setStorageArrays(subchunkList); } private void writeCustomData(Chunk chunk, NBTTagCompound nbt) { - ChunkDataRegistryImpl.writeChunkToNBT(chunk, nbt); + DataRegistryImpl.writeChunkToNBT(chunk, nbt); } - private void writeSections(Chunk chunk, NBTTagCompound nbt) { - ExtendedBlockStorage[] ebsList = chunk.getBlockStorageArray(); - NBTTagList sections = new NBTTagList(); - NBTTagCompound section; + private void writeSubchunks(Chunk chunk, NBTTagCompound nbt) { + ExtendedBlockStorage[] subchunks = chunk.getBlockStorageArray(); + NBTTagList subchunksNBT = new NBTTagList(); + NBTTagCompound subchunkNBT; - for (ExtendedBlockStorage ebs : ebsList) { - if (ebs != null) { - section = new NBTTagCompound(); - section.setByte("Y", (byte) (ebs.getYLocation() >> 4 & 255)); - ChunkDataRegistryImpl.writeSectionToNBT(chunk, ebs, section); - sections.appendTag(section); + for (ExtendedBlockStorage subchunk : subchunks) { + if (subchunk != null) { + subchunkNBT = new NBTTagCompound(); + subchunkNBT.setByte("Y", (byte) (subchunk.getYLocation() >> 4 & 255)); + DataRegistryImpl.writeSubchunkToNBT(chunk, subchunk, subchunkNBT); + subchunksNBT.appendTag(subchunkNBT); } } - nbt.setTag("Sections", sections); + nbt.setTag("Sections", subchunksNBT); } private void writeEntities(Chunk chunk, World world, NBTTagCompound nbt) { diff --git a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S21PacketChunkDataMixin.java b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S21PacketChunkDataMixin.java index 59b873f..c78b44a 100644 --- a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S21PacketChunkDataMixin.java +++ b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S21PacketChunkDataMixin.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.mixin.mixins.common.vanilla; -import com.falsepattern.chunk.internal.ChunkDataRegistryImpl; +import com.falsepattern.chunk.internal.DataRegistryImpl; import lombok.val; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -37,7 +37,7 @@ public abstract class S21PacketChunkDataMixin { @Shadow(aliases = "field_149282_b") private int zPosition; @Shadow(aliases = "field_149283_c") - private int ebsMask; + private int subchunkMask; @Shadow(aliases = "field_149281_e") private byte[] deflatedData; @Shadow(aliases = "field_149278_f") @@ -51,7 +51,7 @@ public abstract class S21PacketChunkDataMixin { constant = @Constant(intValue = 196864), require = 1) private static int increasePacketSize(int constant) { - return ChunkDataRegistryImpl.maxPacketSize(); + return DataRegistryImpl.maxPacketSize(); } /** @@ -59,25 +59,25 @@ public abstract class S21PacketChunkDataMixin { * @reason Replace functionality */ @Overwrite - public static S21PacketChunkData.Extracted func_149269_a(Chunk chunk, boolean forceUpdate, int ebsMask) { - ExtendedBlockStorage[] ebs = chunk.getBlockStorageArray(); + public static S21PacketChunkData.Extracted func_149269_a(Chunk chunk, boolean forceUpdate, int subchunkMask) { + ExtendedBlockStorage[] subchunks = chunk.getBlockStorageArray(); S21PacketChunkData.Extracted extracted = new S21PacketChunkData.Extracted(); - if (buffer.length < ChunkDataRegistryImpl.maxPacketSize()) { - buffer = new byte[ChunkDataRegistryImpl.maxPacketSize()]; + if (buffer.length < DataRegistryImpl.maxPacketSize()) { + buffer = new byte[DataRegistryImpl.maxPacketSize()]; } if (forceUpdate) { chunk.sendUpdates = true; } - for (int i = 0; i < ebs.length; ++i) { - if (ebs[i] != null && (!forceUpdate || !ebs[i].isEmpty()) && (ebsMask & 1 << i) != 0) { + for (int i = 0; i < subchunks.length; ++i) { + if (subchunks[i] != null && (!forceUpdate || !subchunks[i].isEmpty()) && (subchunkMask & 1 << i) != 0) { extracted.field_150280_b |= 1 << i; } } - int length = ChunkDataRegistryImpl.writeToBuffer(chunk, extracted.field_150280_b, forceUpdate, buffer); + int length = DataRegistryImpl.writeToBuffer(chunk, extracted.field_150280_b, forceUpdate, buffer); extracted.field_150282_a = new byte[length]; System.arraycopy(buffer, 0, extracted.field_150282_a, 0, length); @@ -106,7 +106,7 @@ public abstract class S21PacketChunkDataMixin { data.writeInt(xPosition); data.writeInt(zPosition); data.writeBoolean(forceUpdate); - data.writeShort((short) (ebsMask & 0xFFFF)); + data.writeShort((short) (subchunkMask & 0xFFFF)); data.writeInt(this.data.length); data.writeInt(deflatedSize); data.writeBytes(deflatedData, 0, deflatedSize); @@ -121,7 +121,7 @@ public abstract class S21PacketChunkDataMixin { xPosition = data.readInt(); zPosition = data.readInt(); forceUpdate = data.readBoolean(); - ebsMask = data.readShort() & 0xFFFF; + subchunkMask = data.readShort() & 0xFFFF; this.data = new byte[data.readInt()]; deflatedSize = data.readInt(); if (buffer.length < deflatedSize) { diff --git a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S26PacketMapChunkBulkMixin.java b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S26PacketMapChunkBulkMixin.java index 57cfab9..65c3683 100644 --- a/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S26PacketMapChunkBulkMixin.java +++ b/src/main/java/com/falsepattern/chunk/internal/mixin/mixins/common/vanilla/S26PacketMapChunkBulkMixin.java @@ -34,9 +34,9 @@ public abstract class S26PacketMapChunkBulkMixin { @Shadow(aliases = "field_149264_b") private int[] zPositions; @Shadow(aliases = "field_149265_c") - private int[] ebsMasks; + private int[] subchunkMasks; @Shadow(aliases = "field_149262_d") - private int[] ebsMSBMasks; + private int[] subchunkMSBMasks; @Shadow(aliases = "field_149261_g") private int deflatedSize; @Shadow(aliases = "field_149267_h") @@ -62,8 +62,8 @@ public abstract class S26PacketMapChunkBulkMixin { skylight = data.readBoolean(); xPositions = new int[chunkCount]; zPositions = new int[chunkCount]; - ebsMasks = new int[chunkCount]; - ebsMSBMasks = new int[chunkCount]; + subchunkMasks = new int[chunkCount]; + subchunkMSBMasks = new int[chunkCount]; datas = new byte[chunkCount][]; if (inflaterBuffer.length < deflatedSize) { @@ -89,7 +89,7 @@ public abstract class S26PacketMapChunkBulkMixin { val size = sizes[i]; xPositions[i] = data.readInt(); zPositions[i] = data.readInt(); - ebsMasks[i] = data.readUnsignedShort(); + subchunkMasks[i] = data.readUnsignedShort(); datas[i] = new byte[size]; System.arraycopy(buf, pos, datas[i], 0, size); @@ -122,7 +122,7 @@ public abstract class S26PacketMapChunkBulkMixin { for (int i = 0; i < xPositions.length; ++i) { data.writeInt(xPositions[i]); data.writeInt(zPositions[i]); - data.writeShort((short) (ebsMasks[i] & 65535)); + data.writeShort((short) (subchunkMasks[i] & 65535)); } } } diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/BiomeManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/BiomeManager.java index 5ca9a33..18e41d5 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/BiomeManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/BiomeManager.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import com.falsepattern.chunk.api.ArrayUtil; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ import net.minecraft.world.chunk.Chunk; import java.nio.ByteBuffer; public class BiomeManager extends VanillaManager - implements ChunkDataManager.PacketDataManager, ChunkDataManager.ChunkNBTDataManager { + implements DataManager.PacketDataManager, DataManager.ChunkDataManager { public static final int BYTES_PER_CHUNK = 256; @Override @@ -31,14 +31,14 @@ public class BiomeManager extends VanillaManager } @Override - public void writeToBuffer(@NotNull Chunk chunk, int ebsMask, boolean forceUpdate, @NotNull ByteBuffer data) { + public void writeToBuffer(@NotNull Chunk chunk, int subchunkMask, boolean forceUpdate, @NotNull ByteBuffer data) { if (forceUpdate) { data.put(chunk.getBiomeArray()); } } @Override - public void readFromBuffer(@NotNull Chunk chunk, int ebsMask, boolean forceUpdate, @NotNull ByteBuffer buffer) { + public void readFromBuffer(@NotNull Chunk chunk, int subchunkMask, boolean forceUpdate, @NotNull ByteBuffer buffer) { if (forceUpdate) { buffer.get(chunk.getBiomeArray()); } diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/BlockIDManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/BlockIDManager.java index 55f9b5b..1bfeda1 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/BlockIDManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/BlockIDManager.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import com.falsepattern.chunk.api.ArrayUtil; import lombok.val; @@ -18,13 +18,13 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.nio.ByteBuffer; -import static com.falsepattern.chunk.internal.Common.BLOCKS_PER_EBS; -import static com.falsepattern.chunk.internal.Common.EBS_PER_CHUNK; +import static com.falsepattern.chunk.internal.Common.BLOCKS_PER_SUBCHUNK; +import static com.falsepattern.chunk.internal.Common.SUBCHUNKS_PER_CHUNK; public class BlockIDManager extends VanillaManager - implements ChunkDataManager.PacketDataManager, ChunkDataManager.SectionNBTDataManager { - private static final int LSB_BYTES_PER_EBS = BLOCKS_PER_EBS; - private static final int MSB_BYTES_PER_EBS = BLOCKS_PER_EBS / 2; + implements DataManager.PacketDataManager, DataManager.SubchunkDataManager { + private static final int LSB_BYTES_PER_SUBCHUNK = BLOCKS_PER_SUBCHUNK; + private static final int MSB_BYTES_PER_SUBCHUNK = BLOCKS_PER_SUBCHUNK / 2; private static final int HEADER_SIZE = 2; @Override @@ -34,20 +34,20 @@ public class BlockIDManager extends VanillaManager @Override public int maxPacketSize() { - return HEADER_SIZE + EBS_PER_CHUNK * (LSB_BYTES_PER_EBS + MSB_BYTES_PER_EBS); + return HEADER_SIZE + SUBCHUNKS_PER_CHUNK * (LSB_BYTES_PER_SUBCHUNK + MSB_BYTES_PER_SUBCHUNK); } @Override - public void writeToBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer data) { - val ebsArray = chunk.getBlockStorageArray(); + public void writeToBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer data) { + val subchunks = chunk.getBlockStorageArray(); int currentPos = data.position(); data.putShort((short) 0); int msbMask = 0; - for (int i = 0; i < ebsArray.length; i++) { - if ((ebsMask & (1 << i)) != 0) { - val ebs = ebsArray[i]; - val lsb = ebs.getBlockLSBArray(); - val msb = ebs.getBlockMSBArray(); + for (int i = 0; i < subchunks.length; i++) { + if ((subchunkMask & (1 << i)) != 0) { + val subchunk = subchunks[i]; + val lsb = subchunk.getBlockLSBArray(); + val msb = subchunk.getBlockMSBArray(); data.put(lsb); if (msb != null) { msbMask |= 1 << i; @@ -62,51 +62,51 @@ public class BlockIDManager extends VanillaManager } @Override - public void readFromBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer buffer) { - val ebsArray = chunk.getBlockStorageArray(); + public void readFromBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer buffer) { + val subchunks = chunk.getBlockStorageArray(); val msbMask = buffer.getShort() & 0xFFFF; - for (int i = 0; i < ebsArray.length; i++) { - val ebs = ebsArray[i]; - if ((ebsMask & (1 << i)) != 0 && ebs != null) { - buffer.get(ebs.getBlockLSBArray()); + for (int i = 0; i < subchunks.length; i++) { + val subchunk = subchunks[i]; + if ((subchunkMask & (1 << i)) != 0 && subchunk != null) { + buffer.get(subchunk.getBlockLSBArray()); if ((msbMask & (1 << i)) != 0) { - val msb = ebs.getBlockMSBArray(); + val msb = subchunk.getBlockMSBArray(); if (msb == null) { - ebs.createBlockMSBArray(); + subchunk.createBlockMSBArray(); } - buffer.get(ebs.getBlockMSBArray().data); + buffer.get(subchunk.getBlockMSBArray().data); } else { - ebs.setBlockMSBArray(null); + subchunk.setBlockMSBArray(null); } } } } @Override - public boolean sectionPrivilegedAccess() { + public boolean subchunkPrivilegedAccess() { return true; } @Override - public void writeSectionToNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { - section.setByteArray("Blocks", ebs.getBlockLSBArray()); + public void writeSubchunkToNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + nbt.setByteArray("Blocks", subchunk.getBlockLSBArray()); - if (ebs.getBlockMSBArray() != null) { - section.setByteArray("Add", ebs.getBlockMSBArray().data); + if (subchunk.getBlockMSBArray() != null) { + nbt.setByteArray("Add", subchunk.getBlockMSBArray().data); } } @Override - public void readSectionFromNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { - ebs.setBlockLSBArray(section.getByteArray("Blocks")); + public void readSubchunkFromNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + subchunk.setBlockLSBArray(nbt.getByteArray("Blocks")); - if (section.hasKey("Add", 7)) { - ebs.setBlockMSBArray(new NibbleArray(section.getByteArray("Add"), 4)); + if (nbt.hasKey("Add", 7)) { + subchunk.setBlockMSBArray(new NibbleArray(nbt.getByteArray("Add"), 4)); } } @Override - public void cloneSection(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { + public void cloneSubchunk(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { to.setBlockLSBArray(ArrayUtil.copyArray(from.getBlockLSBArray(), to.getBlockLSBArray())); to.setBlockMSBArray(ArrayUtil.copyArray(from.getBlockMSBArray(), to.getBlockMSBArray())); } diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/BlocklightManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/BlocklightManager.java index 5a53d95..79eafd9 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/BlocklightManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/BlocklightManager.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import com.falsepattern.chunk.api.ArrayUtil; import net.minecraft.nbt.NBTTagCompound; @@ -15,10 +15,10 @@ import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.NibbleArray; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; -public class BlocklightManager extends NibbleManager implements ChunkDataManager.SectionNBTDataManager { +public class BlocklightManager extends NibbleManager implements DataManager.SubchunkDataManager { @Override - protected NibbleArray getNibbleArray(ExtendedBlockStorage ebs) { - return ebs.getBlocklightArray(); + protected NibbleArray getNibbleArray(ExtendedBlockStorage subchunk) { + return subchunk.getBlocklightArray(); } @Override @@ -27,22 +27,22 @@ public class BlocklightManager extends NibbleManager implements ChunkDataManager } @Override - public boolean sectionPrivilegedAccess() { + public boolean subchunkPrivilegedAccess() { return true; } @Override - public void writeSectionToNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { - section.setByteArray("BlockLight", ebs.getBlocklightArray().data); + public void writeSubchunkToNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + nbt.setByteArray("BlockLight", subchunk.getBlocklightArray().data); } @Override - public void readSectionFromNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { - ebs.setBlocklightArray(new NibbleArray(section.getByteArray("BlockLight"), 4)); + public void readSubchunkFromNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + subchunk.setBlocklightArray(new NibbleArray(nbt.getByteArray("BlockLight"), 4)); } @Override - public void cloneSection(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { + public void cloneSubchunk(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { from.setBlocklightArray(ArrayUtil.copyArray(from.getBlocklightArray(), to.getBlocklightArray())); } } diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/LightingManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/LightingManager.java index f9a54ea..b4adc42 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/LightingManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/LightingManager.java @@ -7,13 +7,13 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import com.falsepattern.chunk.api.ArrayUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.chunk.Chunk; -public class LightingManager extends VanillaManager implements ChunkDataManager.ChunkNBTDataManager { +public class LightingManager extends VanillaManager implements DataManager.ChunkDataManager { @Override public String id() { return "lighting"; diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/MetadataManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/MetadataManager.java index 9723aa5..b3bdd31 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/MetadataManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/MetadataManager.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import com.falsepattern.chunk.api.ArrayUtil; import net.minecraft.nbt.NBTTagCompound; @@ -15,10 +15,10 @@ import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.NibbleArray; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; -public class MetadataManager extends NibbleManager implements ChunkDataManager.SectionNBTDataManager { +public class MetadataManager extends NibbleManager implements DataManager.SubchunkDataManager { @Override - protected NibbleArray getNibbleArray(ExtendedBlockStorage ebs) { - return ebs.getMetadataArray(); + protected NibbleArray getNibbleArray(ExtendedBlockStorage subchunk) { + return subchunk.getMetadataArray(); } @Override @@ -27,22 +27,22 @@ public class MetadataManager extends NibbleManager implements ChunkDataManager.S } @Override - public boolean sectionPrivilegedAccess() { + public boolean subchunkPrivilegedAccess() { return true; } @Override - public void writeSectionToNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { - section.setByteArray("Data", ebs.getMetadataArray().data); + public void writeSubchunkToNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + nbt.setByteArray("Data", subchunk.getMetadataArray().data); } @Override - public void readSectionFromNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { - ebs.setBlockMetadataArray(new NibbleArray(section.getByteArray("Data"), 4)); + public void readSubchunkFromNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { + subchunk.setBlockMetadataArray(new NibbleArray(nbt.getByteArray("Data"), 4)); } @Override - public void cloneSection(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { + public void cloneSubchunk(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { to.setBlockMetadataArray(ArrayUtil.copyArray(from.getMetadataArray(), to.getMetadataArray())); } } diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/NibbleManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/NibbleManager.java index e8eb762..5ee146f 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/NibbleManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/NibbleManager.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import com.falsepattern.chunk.internal.Common; import lombok.val; @@ -17,37 +17,37 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.nio.ByteBuffer; -public abstract class NibbleManager extends VanillaManager implements ChunkDataManager.PacketDataManager { - public static final int BYTES_PER_EBS = Common.BLOCKS_PER_EBS / 2; +public abstract class NibbleManager extends VanillaManager implements DataManager.PacketDataManager { + public static final int BYTES_PER_SUBCHUNK = Common.BLOCKS_PER_SUBCHUNK / 2; - protected abstract NibbleArray getNibbleArray(ExtendedBlockStorage ebs); + protected abstract NibbleArray getNibbleArray(ExtendedBlockStorage subchunk); @Override public int maxPacketSize() { - return Common.EBS_PER_CHUNK * BYTES_PER_EBS; + return Common.SUBCHUNKS_PER_CHUNK * BYTES_PER_SUBCHUNK; } @Override - public void writeToBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer data) { - val ebsArray = chunk.getBlockStorageArray(); - for (int i = 0; i < ebsArray.length; i++) { - if ((ebsMask & (1 << i)) != 0) { - val ebs = ebsArray[i]; - if (ebs != null) { - data.put(getNibbleArray(ebs).data, 0, BYTES_PER_EBS); + public void writeToBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer data) { + val subchunks = chunk.getBlockStorageArray(); + for (int i = 0; i < subchunks.length; i++) { + if ((subchunkMask & (1 << i)) != 0) { + val subchunk = subchunks[i]; + if (subchunk != null) { + data.put(getNibbleArray(subchunk).data, 0, BYTES_PER_SUBCHUNK); } } } } @Override - public void readFromBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer buffer) { - val ebsArray = chunk.getBlockStorageArray(); - for (int i = 0; i < ebsArray.length; i++) { - if ((ebsMask & (1 << i)) != 0) { - val ebs = ebsArray[i]; - if (ebs != null) { - buffer.get(getNibbleArray(ebs).data, 0, BYTES_PER_EBS); + public void readFromBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer buffer) { + val subchunks = chunk.getBlockStorageArray(); + for (int i = 0; i < subchunks.length; i++) { + if ((subchunkMask & (1 << i)) != 0) { + val subchunk = subchunks[i]; + if (subchunk != null) { + buffer.get(getNibbleArray(subchunk).data, 0, BYTES_PER_SUBCHUNK); } } } diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/SkylightManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/SkylightManager.java index 2e14572..e562ed3 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/SkylightManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/SkylightManager.java @@ -7,7 +7,7 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import com.falsepattern.chunk.api.ArrayUtil; import net.minecraft.nbt.NBTTagCompound; @@ -17,54 +17,54 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import java.nio.ByteBuffer; -public class SkylightManager extends NibbleManager implements ChunkDataManager.SectionNBTDataManager { +public class SkylightManager extends NibbleManager implements DataManager.SubchunkDataManager { @Override public String id() { return "skylight"; } @Override - protected NibbleArray getNibbleArray(ExtendedBlockStorage ebs) { - return ebs.getSkylightArray(); + protected NibbleArray getNibbleArray(ExtendedBlockStorage subchunk) { + return subchunk.getSkylightArray(); } @Override - public void writeToBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer data) { + public void writeToBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer data) { if (!chunk.worldObj.provider.hasNoSky) { - super.writeToBuffer(chunk, ebsMask, forceUpdate, data); + super.writeToBuffer(chunk, subchunkMask, forceUpdate, data); } } @Override - public void readFromBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer buffer) { + public void readFromBuffer(Chunk chunk, int subchunkMask, boolean forceUpdate, ByteBuffer buffer) { if (!chunk.worldObj.provider.hasNoSky) { - super.readFromBuffer(chunk, ebsMask, forceUpdate, buffer); + super.readFromBuffer(chunk, subchunkMask, forceUpdate, buffer); } } @Override - public boolean sectionPrivilegedAccess() { + public boolean subchunkPrivilegedAccess() { return true; } @Override - public void writeSectionToNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { + public void writeSubchunkToNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { if (!chunk.worldObj.provider.hasNoSky) { - section.setByteArray("SkyLight", ebs.getSkylightArray().data); + nbt.setByteArray("SkyLight", subchunk.getSkylightArray().data); } else { - section.setByteArray("SkyLight", new byte[ebs.getBlocklightArray().data.length]); + nbt.setByteArray("SkyLight", new byte[subchunk.getBlocklightArray().data.length]); } } @Override - public void readSectionFromNBT(Chunk chunk, ExtendedBlockStorage ebs, NBTTagCompound section) { + public void readSubchunkFromNBT(Chunk chunk, ExtendedBlockStorage subchunk, NBTTagCompound nbt) { if (!chunk.worldObj.provider.hasNoSky) { - ebs.setSkylightArray(new NibbleArray(section.getByteArray("SkyLight"), 4)); + subchunk.setSkylightArray(new NibbleArray(nbt.getByteArray("SkyLight"), 4)); } } @Override - public void cloneSection(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { + public void cloneSubchunk(Chunk fromChunk, ExtendedBlockStorage from, ExtendedBlockStorage to) { if (!fromChunk.worldObj.provider.hasNoSky) { to.setSkylightArray(ArrayUtil.copyArray(from.getSkylightArray(), to.getSkylightArray())); } else { diff --git a/src/main/java/com/falsepattern/chunk/internal/vanilla/VanillaManager.java b/src/main/java/com/falsepattern/chunk/internal/vanilla/VanillaManager.java index e4f384f..c2443a7 100644 --- a/src/main/java/com/falsepattern/chunk/internal/vanilla/VanillaManager.java +++ b/src/main/java/com/falsepattern/chunk/internal/vanilla/VanillaManager.java @@ -7,11 +7,11 @@ package com.falsepattern.chunk.internal.vanilla; -import com.falsepattern.chunk.api.ChunkDataManager; +import com.falsepattern.chunk.api.DataManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public abstract class VanillaManager implements ChunkDataManager { +public abstract class VanillaManager implements DataManager { @Override public String domain() { return "minecraft";