diff --git a/src/main/java/de/ellpeck/naturesaura/InternalHooks.java b/src/main/java/de/ellpeck/naturesaura/InternalHooks.java index 31750360..f8f08d32 100644 --- a/src/main/java/de/ellpeck/naturesaura/InternalHooks.java +++ b/src/main/java/de/ellpeck/naturesaura/InternalHooks.java @@ -13,6 +13,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Tuple; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.apache.commons.lang3.mutable.MutableFloat; @@ -201,8 +202,8 @@ public class InternalHooks implements NaturesAuraAPI.IInternalHooks { } @Override - public IAuraChunk createAuraChunk() { - return new AuraChunk(); + public IAuraChunk createAuraChunk(LevelChunk chunk) { + return new AuraChunk(chunk); } } diff --git a/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java b/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java index 968f7536..ed0c830d 100644 --- a/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java +++ b/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java @@ -2,7 +2,6 @@ package de.ellpeck.naturesaura.api; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; -import de.ellpeck.naturesaura.api.aura.chunk.AuraChunkProvider; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.container.IAuraContainer; @@ -23,6 +22,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.attachment.AttachmentType; @@ -99,7 +99,7 @@ public final class NaturesAuraAPI { /** * The capability that any chunk in a level has to store Aura in it. As this is only applicable to chunks and all chunks in the level automatically get assigned this capability, using it directly is not necessary for addon developers. To retrieve this capability from any chunk, use the helper method {@link IAuraChunk#getAuraChunk(net.minecraft.world.level.Level, BlockPos)}. */ - public static final AttachmentType AURA_CHUNK_ATTACHMENT = AttachmentType.serializable(AuraChunkProvider::new).build(); + public static final AttachmentType AURA_CHUNK_ATTACHMENT = AttachmentType.serializable(h -> NaturesAuraAPI.instance().createAuraChunk((LevelChunk) h)).build(); private static final IInternalHooks INSTANCE; static { @@ -260,7 +260,7 @@ public final class NaturesAuraAPI { ILevelData getLevelData(Level level); - IAuraChunk createAuraChunk(); + IAuraChunk createAuraChunk(LevelChunk chunk); } diff --git a/src/main/java/de/ellpeck/naturesaura/api/aura/chunk/AuraChunkProvider.java b/src/main/java/de/ellpeck/naturesaura/api/aura/chunk/AuraChunkProvider.java deleted file mode 100644 index ad9c5620..00000000 --- a/src/main/java/de/ellpeck/naturesaura/api/aura/chunk/AuraChunkProvider.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.ellpeck.naturesaura.api.aura.chunk; - -import de.ellpeck.naturesaura.api.NaturesAuraAPI; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.chunk.LevelChunk; -import net.neoforged.neoforge.common.util.INBTSerializable; - -public class AuraChunkProvider implements INBTSerializable { - - private IAuraChunk auraChunk; - - public IAuraChunk get(LevelChunk chunk) { - if (this.auraChunk == null) - this.auraChunk = NaturesAuraAPI.instance().createAuraChunk(); - this.auraChunk.ensureInitialized(chunk); - return this.auraChunk; - } - - @Override - public CompoundTag serializeNBT() { - return this.get(null).serializeNBT(); - } - - @Override - public void deserializeNBT(CompoundTag nbt) { - this.get(null).deserializeNBT(nbt); - } - -} diff --git a/src/main/java/de/ellpeck/naturesaura/api/aura/chunk/IAuraChunk.java b/src/main/java/de/ellpeck/naturesaura/api/aura/chunk/IAuraChunk.java index 32a6e3cc..c6dccb60 100644 --- a/src/main/java/de/ellpeck/naturesaura/api/aura/chunk/IAuraChunk.java +++ b/src/main/java/de/ellpeck/naturesaura/api/aura/chunk/IAuraChunk.java @@ -33,7 +33,7 @@ public interface IAuraChunk extends INBTSerializable { */ static IAuraChunk getAuraChunk(Level level, BlockPos pos) { var chunk = (LevelChunk) level.getChunk(pos); - return chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT).get(chunk); + return chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT); } /** @@ -160,6 +160,4 @@ public interface IAuraChunk extends INBTSerializable { void markDirty(); - void ensureInitialized(LevelChunk chunk); - } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java index 4664de6d..1afee2af 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java @@ -50,7 +50,7 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES protected Projectile getProjectile(Level levelIn, Position position, ItemStack stackIn) { var ret = new ThrownTrident(EntityType.TRIDENT, levelIn); ret.setPos(position.x(), position.y(), position.z()); - ObfuscationReflectionHelper.setPrivateValue(ThrownTrident.class, ret, stackIn.copy(), "f_37555_"); + ObfuscationReflectionHelper.setPrivateValue(ThrownTrident.class, ret, stackIn.copy(), "pickupItemStack"); ret.pickup = AbstractArrow.Pickup.ALLOWED; return ret; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityFurnaceHeater.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityFurnaceHeater.java index db9dd346..b7b2e71e 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityFurnaceHeater.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/BlockEntityFurnaceHeater.java @@ -24,7 +24,7 @@ import java.lang.reflect.Field; public class BlockEntityFurnaceHeater extends BlockEntityImpl implements ITickableBlockEntity { - private static final Field FURNACE_DATA_FIELD = ObfuscationReflectionHelper.findField(AbstractFurnaceBlockEntity.class, "f_58311_"); + private static final Field FURNACE_DATA_FIELD = ObfuscationReflectionHelper.findField(AbstractFurnaceBlockEntity.class, "dataAccess"); public boolean isActive; public BlockEntityFurnaceHeater(BlockPos pos, BlockState state) { diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/AuraChunk.java b/src/main/java/de/ellpeck/naturesaura/chunk/AuraChunk.java index c676dc87..4f749ae7 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/AuraChunk.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/AuraChunk.java @@ -37,17 +37,12 @@ public class AuraChunk implements IAuraChunk { private final Table> auraAndSpotAmountCache = HashBasedTable.create(); private final Table[]> limitSpotCache = HashBasedTable.create(); private final List effects = new ArrayList<>(); + private final LevelChunk chunk; + private final IAuraType type; - private LevelChunk chunk; - private IAuraType type; private boolean needsSync; - @Override - public void ensureInitialized(LevelChunk chunk) { - // are we already initialized? - if (this.chunk != null) - return; - + public AuraChunk(LevelChunk chunk) { this.chunk = chunk; this.type = IAuraType.forLevel(chunk.getLevel()); diff --git a/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java b/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java index 5ff7dd2a..c0d7b1f6 100644 --- a/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java +++ b/src/main/java/de/ellpeck/naturesaura/events/CommonEvents.java @@ -33,14 +33,14 @@ import java.util.UUID; public class CommonEvents { - private static final Method GET_LOADED_CHUNKS_METHOD = ObfuscationReflectionHelper.findMethod(ChunkMap.class, "m_140416_"); + private static final Method GET_LOADED_CHUNKS_METHOD = ObfuscationReflectionHelper.findMethod(ChunkMap.class, "getChunks"); private static final ListMultimap PENDING_AURA_CHUNKS = ArrayListMultimap.create(); @SubscribeEvent public void onChunkUnload(ChunkEvent.Unload event) { var iChunk = event.getChunk(); if (iChunk instanceof LevelChunk chunk) { - var auraChunk = chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT).get(chunk); + var auraChunk = chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT); if (auraChunk instanceof AuraChunk) { var data = (LevelData) ILevelData.getLevelData(chunk.getLevel()); data.auraChunksWithSpots.remove(chunk.getPos().toLong()); @@ -76,7 +76,7 @@ public class CommonEvents { var chunk = holder.getTickingChunk(); if (chunk == null) continue; - var auraChunk = (AuraChunk) chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT).get(chunk); + var auraChunk = (AuraChunk) chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT); if (auraChunk != null) auraChunk.update(); } @@ -116,7 +116,7 @@ public class CommonEvents { var chunk = Helper.getLoadedChunk(player.level(), pos.x, pos.z); if (!(chunk instanceof LevelChunk levelChunk)) return false; - var auraChunk = (AuraChunk) levelChunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT).get(levelChunk); + var auraChunk = (AuraChunk) levelChunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT); if (auraChunk == null) return false; PacketHandler.sendTo(player, auraChunk.makePacket()); diff --git a/src/main/java/de/ellpeck/naturesaura/misc/LevelData.java b/src/main/java/de/ellpeck/naturesaura/misc/LevelData.java index baf8e8a4..b68ec288 100644 --- a/src/main/java/de/ellpeck/naturesaura/misc/LevelData.java +++ b/src/main/java/de/ellpeck/naturesaura/misc/LevelData.java @@ -70,6 +70,11 @@ public class LevelData extends SavedData implements ILevelData { return compound; } + @Override + public boolean isDirty() { + return true; + } + @Override public ItemStackHandlerNA getEnderStorage(String name) { return this.enderStorages.computeIfAbsent(name, n -> new ItemStackHandlerNA(27)); diff --git a/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java b/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java index 56200d1b..104e7179 100644 --- a/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java +++ b/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java @@ -61,7 +61,7 @@ public class PacketAuraChunk implements CustomPacketPayload { var chunk = level.getChunk(this.chunkX, this.chunkZ); if (chunk.isEmpty()) return false; - var auraChunk = (AuraChunk) chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT).get(chunk); + var auraChunk = (AuraChunk) chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT); if (auraChunk == null) return false; auraChunk.setSpots(this.drainSpots);