From 47847ebd517a53f13dbbcdd8222e67e8fa75aba1 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Thu, 30 Jan 2025 16:03:24 -0500 Subject: [PATCH] [ci skip] cleanup --- .../sentry/PufferfishSentryAppender.java | 8 +- .../pufferfish/sentry/SentryManager.java | 8 +- .../pufferfish/util/AsyncExecutor.java | 2 - .../pufferfish/util/IterableWrapper.java | 9 +- .../util/Long2ObjectOpenHashMapWrapper.java | 42 --------- .../common/entity/EquipmentEntity.java | 3 +- .../util/change_tracking/ChangePublisher.java | 1 + .../change_tracking/ChangeSubscriber.java | 17 ++-- .../leaf/async/locate/AsyncLocator.java | 91 ++++++++++--------- .../org/dreeam/leaf/async/path/AsyncPath.java | 4 +- .../leaf/async/path/AsyncPathProcessor.java | 18 ++-- .../leaf/async/path/NodeEvaluatorCache.java | 1 + .../async/path/NodeEvaluatorFeatures.java | 12 +-- .../async/path/NodeEvaluatorGenerator.java | 7 +- .../async/tracker/MultithreadedTracker.java | 5 +- .../org/dreeam/leaf/config/LeafConfig.java | 8 +- .../dreeam/leaf/config/LeafGlobalConfig.java | 24 ++--- .../org/dreeam/leaf/misc/LagCompensation.java | 5 +- .../util/biome/PositionalBiomeGetter.java | 1 + .../util/cache/CachedOrNewBitsGetter.java | 1 + .../leaf/util/cache/IterateOutwardsCache.java | 7 +- .../LongList2BlockPosMutableIterable.java | 13 +-- .../util/map/StringCanonizingOpenHashMap.java | 5 +- .../dreeam/leaf/util/math/CompactSineLUT.java | 3 +- .../util/math/random/FasterRandomSource.java | 3 +- .../leaf/version/LeafVersionFetcher.java | 12 +-- .../org/leavesmc/leaves/LeavesLogger.java | 1 + .../leaves/protocol/AppleSkinProtocol.java | 62 ++++++------- .../leaves/protocol/AsteorBarProtocol.java | 42 ++++----- .../leaves/protocol/ChatImageProtocol.java | 7 +- .../protocol/core/LeavesProtocolManager.java | 8 +- .../leaves/protocol/jade/JadeProtocol.java | 4 +- .../protocol/jade/accessor/BlockAccessor.java | 1 - .../jade/accessor/BlockAccessorImpl.java | 32 +++---- .../jade/accessor/EntityAccessor.java | 2 +- .../jade/accessor/EntityAccessorImpl.java | 32 +++---- .../jade/payload/RequestEntityPayload.java | 23 ++--- .../jade/payload/ServerPingPayload.java | 28 +++--- .../ItemStorageExtensionProvider.java | 2 +- .../jade/provider/ItemStorageProvider.java | 4 +- .../jade/provider/block/BeehiveProvider.java | 2 +- .../provider/block/BrewingStandProvider.java | 10 +- .../jade/provider/block/FurnaceProvider.java | 20 ++-- .../provider/block/HopperLockProvider.java | 2 +- .../provider/block/ObjectNameProvider.java | 2 +- .../entity/StatusEffectsProvider.java | 9 +- .../protocol/jade/tool/ToolHandler.java | 4 +- .../leaves/protocol/jade/util/CommonUtil.java | 4 +- .../protocol/jade/util/HierarchyLookup.java | 15 +-- .../protocol/jade/util/IHierarchyLookup.java | 5 +- .../protocol/jade/util/ItemCollector.java | 3 +- .../protocol/jade/util/ItemIterator.java | 1 + .../leaves/protocol/jade/util/JadeCodec.java | 4 +- .../jade/util/PairHierarchyLookup.java | 7 +- .../leaves/protocol/jade/util/ViewGroup.java | 25 ++--- .../jade/util/WrappedHierarchyLookup.java | 13 +-- .../syncmatica/CommunicationManager.java | 1 - .../protocol/syncmatica/FileStorage.java | 2 +- .../syncmatica/PlayerIdentifierProvider.java | 2 +- .../syncmatica/exchange/AbstractExchange.java | 6 -- .../syncmatica/exchange/DownloadExchange.java | 3 +- .../syncmatica/exchange/Exchange.java | 1 + .../exchange/ModifyExchangeServer.java | 11 ++- .../org/leavesmc/leaves/replay/Recorder.java | 6 +- .../leaves/replay/RecorderOption.java | 2 +- .../leavesmc/leaves/replay/ReplayFile.java | 8 +- .../leavesmc/leaves/util/UUIDSerializer.java | 1 + .../purpurmc/purpur/command/AFKCommand.java | 16 ++-- .../region/EnumRegionFileExtension.java | 8 +- .../linearpaper/region/IRegionFile.java | 11 +++ .../region/IRegionFileFactory.java | 1 + .../linearpaper/region/LinearRegionFile.java | 3 +- .../src/main/java/su/plo/matter/Globals.java | 1 + .../src/main/java/su/plo/matter/Hashing.java | 31 ++++--- .../su/plo/matter/WorldgenCryptoRandom.java | 3 +- 75 files changed, 396 insertions(+), 405 deletions(-) delete mode 100644 leaf-server/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java diff --git a/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java b/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java index 0d1d6751..74e7cc82 100644 --- a/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java +++ b/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java @@ -22,7 +22,7 @@ import org.dreeam.leaf.config.modules.misc.SentryDSN; public class PufferfishSentryAppender extends AbstractAppender { - private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(PufferfishSentryAppender.class.getSimpleName()); + private static final org.apache.logging.log4j.Logger LOGGER = LogManager.getLogger(PufferfishSentryAppender.class.getSimpleName()); private static final Gson GSON = new Gson(); private final Level logLevel; @@ -37,13 +37,13 @@ public class PufferfishSentryAppender extends AbstractAppender { try { logException(logEvent); } catch (Exception e) { - logger.warn("Failed to log event with sentry", e); + LOGGER.warn("Failed to log event with sentry", e); } } else { try { logBreadcrumb(logEvent); } catch (Exception e) { - logger.warn("Failed to log event with sentry", e); + LOGGER.warn("Failed to log event with sentry", e); } } } @@ -127,7 +127,7 @@ public class PufferfishSentryAppender extends AbstractAppender { private Result filter(String loggerName) { return loggerName != null && loggerName.startsWith("gg.castaway.pufferfish.sentry") ? Result.DENY - : Result.NEUTRAL; + : Result.NEUTRAL; } } } diff --git a/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java b/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java index 1fc08518..47558c45 100644 --- a/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java +++ b/leaf-server/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java @@ -7,7 +7,7 @@ import org.apache.logging.log4j.Logger; public class SentryManager { - private static final Logger logger = LogManager.getLogger(SentryManager.class); + private static final Logger LOGGER = LogManager.getLogger(SentryManager.class); private SentryManager() { @@ -20,7 +20,7 @@ public class SentryManager { return; } if (logLevel == null) { - logger.error("Invalid log level, defaulting to WARN."); + LOGGER.error("Invalid log level, defaulting to WARN."); logLevel = Level.WARN; } try { @@ -34,9 +34,9 @@ public class SentryManager { PufferfishSentryAppender appender = new PufferfishSentryAppender(logLevel); appender.start(); ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addAppender(appender); - logger.info("Sentry logging started!"); + LOGGER.info("Sentry logging started!"); } catch (Exception e) { - logger.warn("Failed to initialize sentry!", e); + LOGGER.warn("Failed to initialize sentry!", e); initialized = false; } } diff --git a/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java b/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java index b8f01ce7..d5601de6 100644 --- a/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java +++ b/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java @@ -3,13 +3,11 @@ package gg.pufferfish.pufferfish.util; import com.google.common.collect.Queues; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.Marker; import java.util.Queue; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import java.util.logging.Level; public class AsyncExecutor implements Runnable { diff --git a/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/IterableWrapper.java b/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/IterableWrapper.java index 8b4a51ae..08e75cdc 100644 --- a/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/IterableWrapper.java +++ b/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/IterableWrapper.java @@ -4,14 +4,7 @@ import java.util.Iterator; import org.jetbrains.annotations.NotNull; -public class IterableWrapper implements Iterable { - - private final Iterator iterator; - - public IterableWrapper(Iterator iterator) { - this.iterator = iterator; - } - +public record IterableWrapper(Iterator iterator) implements Iterable { @NotNull @Override public Iterator iterator() { diff --git a/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java b/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java deleted file mode 100644 index 5578acce..00000000 --- a/leaf-server/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package gg.pufferfish.pufferfish.util; - -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; - -import java.util.Map; - -import org.jetbrains.annotations.Nullable; - -public class Long2ObjectOpenHashMapWrapper extends Long2ObjectOpenHashMap { - - private final Map backingMap; - - public Long2ObjectOpenHashMapWrapper(Map map) { - backingMap = map; - } - - @Override - public V put(Long key, V value) { - return backingMap.put(key, value); - } - - @Override - public V get(Object key) { - return backingMap.get(key); - } - - @Override - public V remove(Object key) { - return backingMap.remove(key); - } - - @Nullable - @Override - public V putIfAbsent(Long key, V value) { - return backingMap.putIfAbsent(key, value); - } - - @Override - public int size() { - return backingMap.size(); - } -} diff --git a/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/entity/EquipmentEntity.java b/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/entity/EquipmentEntity.java index 05604b8f..a5a2640e 100644 --- a/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/entity/EquipmentEntity.java +++ b/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/entity/EquipmentEntity.java @@ -4,6 +4,7 @@ import net.caffeinemc.mods.lithium.common.util.change_tracking.ChangeSubscriber; import net.minecraft.world.item.ItemStack; public interface EquipmentEntity { + void onEquipmentReplaced(ItemStack oldStack, ItemStack newStack); interface EquipmentTrackingEntity { @@ -13,4 +14,4 @@ public interface EquipmentEntity { interface TickableEnchantmentTrackingEntity extends ChangeSubscriber.EnchantmentSubscriber { void updateHasTickableEnchantments(ItemStack oldStack, ItemStack newStack); } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangePublisher.java b/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangePublisher.java index 9a39b58e..346bdefa 100644 --- a/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangePublisher.java +++ b/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangePublisher.java @@ -3,6 +3,7 @@ package net.caffeinemc.mods.lithium.common.util.change_tracking; import net.minecraft.world.item.ItemStack; public interface ChangePublisher { + void subscribe(ChangeSubscriber subscriber, int subscriberData); int unsubscribe(ChangeSubscriber subscriber); diff --git a/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangeSubscriber.java b/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangeSubscriber.java index ef206b9e..25bfce57 100644 --- a/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangeSubscriber.java +++ b/leaf-server/src/main/java/net/caffeinemc/mods/lithium/common/util/change_tracking/ChangeSubscriber.java @@ -5,6 +5,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; + import net.minecraft.world.item.ItemStack; public interface ChangeSubscriber { @@ -28,6 +29,7 @@ public interface ChangeSubscriber { return new Multi<>(subscribers, subscriberDatas); } } + static ChangeSubscriber without(ChangeSubscriber prevSubscriber, ChangeSubscriber removedSubscriber) { return without(prevSubscriber, removedSubscriber, 0, false); } @@ -90,7 +92,8 @@ public interface ChangeSubscriber { /** * Notify the subscriber that the publisher will be changed immediately after this call. - * @param publisher The publisher that is about to change + * + * @param publisher The publisher that is about to change * @param subscriberData The data associated with the subscriber, given when the subscriber was added */ void notify(@Nullable T publisher, int subscriberData); @@ -99,7 +102,7 @@ public interface ChangeSubscriber { * Notify the subscriber about being unsubscribed from the publisher. Used when the publisher becomes invalid. * The subscriber should not attempt to unsubscribe itself from the publisher in this method. * - * @param publisher The publisher unsubscribed from + * @param publisher The publisher unsubscribed from * @param subscriberData The data associated with the subscriber, given when the subscriber was added */ void forceUnsubscribe(T publisher, int subscriberData); @@ -108,9 +111,10 @@ public interface ChangeSubscriber { /** * Notify the subscriber that the publisher's count data will be changed immediately after this call. - * @param publisher The publisher that is about to change + * + * @param publisher The publisher that is about to change * @param subscriberData The data associated with the subscriber, given when the subscriber was added - * @param newCount The new count of the publisher + * @param newCount The new count of the publisher */ void notifyCount(T publisher, int subscriberData, int newCount); } @@ -119,7 +123,8 @@ public interface ChangeSubscriber { /** * Notify the subscriber that the publisher's enchantment data has been changed immediately before this call. - * @param publisher The publisher that has changed + * + * @param publisher The publisher that has changed * @param subscriberData The data associated with the subscriber, given when the subscriber was added */ void notifyAfterEnchantmentChange(T publisher, int subscriberData); @@ -187,4 +192,4 @@ public interface ChangeSubscriber { } } } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/locate/AsyncLocator.java b/leaf-server/src/main/java/org/dreeam/leaf/async/locate/AsyncLocator.java index fcede5af..e2d70fe1 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/locate/AsyncLocator.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/locate/AsyncLocator.java @@ -18,12 +18,15 @@ import java.util.function.Consumer; // Original project: https://github.com/thebrightspark/AsyncLocator public class AsyncLocator { + private static final ExecutorService LOCATING_EXECUTOR_SERVICE; - private AsyncLocator() {} + private AsyncLocator() { + } public static class AsyncLocatorThread extends TickThread { private static final AtomicInteger THREAD_COUNTER = new AtomicInteger(0); + public AsyncLocatorThread(Runnable run, String name) { super(run, name, THREAD_COUNTER.incrementAndGet()); } @@ -37,23 +40,23 @@ public class AsyncLocator { static { int threads = org.dreeam.leaf.config.modules.async.AsyncLocator.asyncLocatorThreads; LOCATING_EXECUTOR_SERVICE = new ThreadPoolExecutor( - 1, - threads, - org.dreeam.leaf.config.modules.async.AsyncLocator.asyncLocatorKeepalive, - TimeUnit.SECONDS, - new LinkedBlockingQueue<>(), - new ThreadFactoryBuilder() - .setThreadFactory( - r -> new AsyncLocatorThread(r, "Leaf Async Locator Thread") { - @Override - public void run() { - r.run(); - } - } - ) - .setNameFormat("Leaf Async Locator Thread - %d") - .setPriority(Thread.NORM_PRIORITY - 2) - .build() + 1, + threads, + org.dreeam.leaf.config.modules.async.AsyncLocator.asyncLocatorKeepalive, + TimeUnit.SECONDS, + new LinkedBlockingQueue<>(), + new ThreadFactoryBuilder() + .setThreadFactory( + r -> new AsyncLocatorThread(r, "Leaf Async Locator Thread") { + @Override + public void run() { + r.run(); + } + } + ) + .setNameFormat("Leaf Async Locator Thread - %d") + .setPriority(Thread.NORM_PRIORITY - 2) + .build() ); } @@ -68,15 +71,15 @@ public class AsyncLocator { * and returns a {@link LocateTask} with the futures for it. */ public static LocateTask locate( - ServerLevel level, - TagKey structureTag, - BlockPos pos, - int searchRadius, - boolean skipKnownStructures + ServerLevel level, + TagKey structureTag, + BlockPos pos, + int searchRadius, + boolean skipKnownStructures ) { CompletableFuture completableFuture = new CompletableFuture<>(); Future future = LOCATING_EXECUTOR_SERVICE.submit( - () -> doLocateLevel(completableFuture, level, structureTag, pos, searchRadius, skipKnownStructures) + () -> doLocateLevel(completableFuture, level, structureTag, pos, searchRadius, skipKnownStructures) ); return new LocateTask<>(level.getServer(), completableFuture, future); } @@ -87,41 +90,41 @@ public class AsyncLocator { * {@link LocateTask} with the futures for it. */ public static LocateTask>> locate( - ServerLevel level, - HolderSet structureSet, - BlockPos pos, - int searchRadius, - boolean skipKnownStructures + ServerLevel level, + HolderSet structureSet, + BlockPos pos, + int searchRadius, + boolean skipKnownStructures ) { CompletableFuture>> completableFuture = new CompletableFuture<>(); Future future = LOCATING_EXECUTOR_SERVICE.submit( - () -> doLocateChunkGenerator(completableFuture, level, structureSet, pos, searchRadius, skipKnownStructures) + () -> doLocateChunkGenerator(completableFuture, level, structureSet, pos, searchRadius, skipKnownStructures) ); return new LocateTask<>(level.getServer(), completableFuture, future); } private static void doLocateLevel( - CompletableFuture completableFuture, - ServerLevel level, - TagKey structureTag, - BlockPos pos, - int searchRadius, - boolean skipExistingChunks + CompletableFuture completableFuture, + ServerLevel level, + TagKey structureTag, + BlockPos pos, + int searchRadius, + boolean skipExistingChunks ) { BlockPos foundPos = level.findNearestMapStructure(structureTag, pos, searchRadius, skipExistingChunks); completableFuture.complete(foundPos); } private static void doLocateChunkGenerator( - CompletableFuture>> completableFuture, - ServerLevel level, - HolderSet structureSet, - BlockPos pos, - int searchRadius, - boolean skipExistingChunks + CompletableFuture>> completableFuture, + ServerLevel level, + HolderSet structureSet, + BlockPos pos, + int searchRadius, + boolean skipExistingChunks ) { Pair> foundPair = level.getChunkSource().getGenerator() - .findNearestMapStructure(level, structureSet, pos, searchRadius, skipExistingChunks); + .findNearestMapStructure(level, structureSet, pos, searchRadius, skipExistingChunks); completableFuture.complete(foundPair); } @@ -161,4 +164,4 @@ public class AsyncLocator { completableFuture.cancel(false); } } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPath.java b/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPath.java index d9279566..9afa9c8d 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPath.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPath.java @@ -111,7 +111,7 @@ public class AsyncPath extends Path { */ public synchronized void process() { if (this.processState == PathProcessState.COMPLETED || - this.processState == PathProcessState.PROCESSING) { + this.processState == PathProcessState.PROCESSING) { return; } @@ -136,7 +136,7 @@ public class AsyncPath extends Path { */ private void checkProcessed() { if (this.processState == PathProcessState.WAITING || - this.processState == PathProcessState.PROCESSING) { // Block if we are on processing + this.processState == PathProcessState.PROCESSING) { // Block if we are on processing this.process(); } } diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java b/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java index 192edd0f..1070cf69 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java @@ -17,14 +17,14 @@ import java.util.function.Consumer; public class AsyncPathProcessor { private static final Executor pathProcessingExecutor = new ThreadPoolExecutor( - 1, - org.dreeam.leaf.config.modules.async.AsyncPathfinding.asyncPathfindingMaxThreads, - org.dreeam.leaf.config.modules.async.AsyncPathfinding.asyncPathfindingKeepalive, TimeUnit.SECONDS, - new LinkedBlockingQueue<>(), - new ThreadFactoryBuilder() - .setNameFormat("Leaf Async Pathfinding Thread - %d") - .setPriority(Thread.NORM_PRIORITY - 2) - .build() + 1, + org.dreeam.leaf.config.modules.async.AsyncPathfinding.asyncPathfindingMaxThreads, + org.dreeam.leaf.config.modules.async.AsyncPathfinding.asyncPathfindingKeepalive, TimeUnit.SECONDS, + new LinkedBlockingQueue<>(), + new ThreadFactoryBuilder() + .setNameFormat("Leaf Async Pathfinding Thread - %d") + .setPriority(Thread.NORM_PRIORITY - 2) + .build() ); protected static CompletableFuture queue(@NotNull AsyncPath path) { @@ -42,7 +42,7 @@ public class AsyncPathProcessor { public static void awaitProcessing(@Nullable Path path, Consumer<@Nullable Path> afterProcessing) { if (path != null && !path.isProcessed() && path instanceof AsyncPath asyncPath) { asyncPath.postProcessing(() -> - MinecraftServer.getServer().scheduleOnMain(() -> afterProcessing.accept(path)) + MinecraftServer.getServer().scheduleOnMain(() -> afterProcessing.accept(path)) ); } else { afterProcessing.accept(path); diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorCache.java b/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorCache.java index b147a967..c2397543 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorCache.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorCache.java @@ -11,6 +11,7 @@ import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; public class NodeEvaluatorCache { + private static final Map> threadLocalNodeEvaluators = new ConcurrentHashMap<>(); private static final Map nodeEvaluatorToGenerator = new ConcurrentHashMap<>(); diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorFeatures.java b/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorFeatures.java index 2c4876bc..c985d357 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorFeatures.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorFeatures.java @@ -4,12 +4,12 @@ import net.minecraft.world.level.pathfinder.NodeEvaluator; import net.minecraft.world.level.pathfinder.SwimNodeEvaluator; public record NodeEvaluatorFeatures( - NodeEvaluatorType type, - boolean canPassDoors, - boolean canFloat, - boolean canWalkOverFences, - boolean canOpenDoors, - boolean allowBreaching + NodeEvaluatorType type, + boolean canPassDoors, + boolean canFloat, + boolean canWalkOverFences, + boolean canOpenDoors, + boolean allowBreaching ) { public static NodeEvaluatorFeatures fromNodeEvaluator(NodeEvaluator nodeEvaluator) { NodeEvaluatorType type = NodeEvaluatorType.fromNodeEvaluator(nodeEvaluator); diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorGenerator.java b/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorGenerator.java index 062ddc24..63e335e9 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorGenerator.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/path/NodeEvaluatorGenerator.java @@ -4,8 +4,5 @@ import net.minecraft.world.level.pathfinder.NodeEvaluator; import org.jetbrains.annotations.NotNull; public interface NodeEvaluatorGenerator { - - @NotNull - NodeEvaluator generate(NodeEvaluatorFeatures nodeEvaluatorFeatures); - -} \ No newline at end of file + @NotNull NodeEvaluator generate(NodeEvaluatorFeatures nodeEvaluatorFeatures); +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java b/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java index 4ff183c9..d4c23412 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java @@ -5,7 +5,6 @@ import ca.spottedleaf.moonrise.common.misc.NearbyPlayers; import ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel; import ca.spottedleaf.moonrise.patches.chunk_system.level.entity.server.ServerEntityLookup; import ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity; -import ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerTrackedEntity; import com.google.common.util.concurrent.ThreadFactoryBuilder; import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.FullChunkStatus; @@ -67,7 +66,7 @@ public class MultithreadedTracker { if (tracker == null) continue; - ((EntityTrackerTrackedEntity) tracker).moonrise$tick(nearbyPlayers.getChunk(entity.chunkPosition())); + tracker.moonrise$tick(nearbyPlayers.getChunk(entity.chunkPosition())); tracker.serverEntity.sendChanges(); } }); @@ -89,7 +88,7 @@ public class MultithreadedTracker { if (tracker == null) continue; - ((EntityTrackerTrackedEntity) tracker).moonrise$tick(nearbyPlayers.getChunk(entity.chunkPosition())); + tracker.moonrise$tick(nearbyPlayers.getChunk(entity.chunkPosition())); sendChangesTasks[index++] = () -> tracker.serverEntity.sendChanges(); // Collect send changes to task array } diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/LeafConfig.java b/leaf-server/src/main/java/org/dreeam/leaf/config/LeafConfig.java index 41b24849..bd46640f 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/config/LeafConfig.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/LeafConfig.java @@ -198,9 +198,9 @@ public class LeafConfig { private static List buildSparkExtraConfigs() { List extraConfigs = new ArrayList<>(Arrays.asList( - "config/leaf-global.yml", - "config/gale-global.yml", - "config/gale-world-defaults.yml" + "config/leaf-global.yml", + "config/gale-global.yml", + "config/gale-world-defaults.yml" )); for (World world : Bukkit.getWorlds()) { @@ -212,7 +212,7 @@ public class LeafConfig { private static String[] buildSparkHiddenPaths() { return new String[]{ - SentryDSN.sentryDsnConfigPath // Hide Sentry DSN key + SentryDSN.sentryDsnConfigPath // Hide Sentry DSN key }; } diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/LeafGlobalConfig.java b/leaf-server/src/main/java/org/dreeam/leaf/config/LeafGlobalConfig.java index 794bc822..5490746f 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/config/LeafGlobalConfig.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/LeafGlobalConfig.java @@ -15,19 +15,19 @@ public class LeafGlobalConfig { protected static final boolean isCN = CURRENT_REGION.equals("CN"); public LeafGlobalConfig(boolean init) throws Exception { - configFile = ConfigFile.loadConfig(new File(LeafConfig.I_CONFIG_FOLDER, LeafConfig.I_GLOBAL_CONFIG_FILE)); - configFile.set("config-version", 3.0); - configFile.addComments("config-version", pickStringRegionBased(""" - Leaf Config - GitHub Repo: https://github.com/Winds-Studio/Leaf - Discord: https://discord.com/invite/gfgAwdSEuM""", - """ - Leaf Config - GitHub Repo: https://github.com/Winds-Studio/Leaf - QQ Group: 619278377""")); + configFile = ConfigFile.loadConfig(new File(LeafConfig.I_CONFIG_FOLDER, LeafConfig.I_GLOBAL_CONFIG_FILE)); + configFile.set("config-version", 3.0); + configFile.addComments("config-version", pickStringRegionBased(""" + Leaf Config + GitHub Repo: https://github.com/Winds-Studio/Leaf + Discord: https://discord.com/invite/gfgAwdSEuM""", + """ + Leaf Config + GitHub Repo: https://github.com/Winds-Studio/Leaf + QQ Group: 619278377""")); - // Pre-structure to force order - structureConfig(); + // Pre-structure to force order + structureConfig(); } protected void structureConfig() { diff --git a/leaf-server/src/main/java/org/dreeam/leaf/misc/LagCompensation.java b/leaf-server/src/main/java/org/dreeam/leaf/misc/LagCompensation.java index 6ec73caf..c066fc2f 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/misc/LagCompensation.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/misc/LagCompensation.java @@ -42,7 +42,8 @@ public class LagCompensation { public static final int MAX_TPS = 20; public static final int FULL_TICK = 50; - private TPSCalculator() {} + private TPSCalculator() { + } public static void onTick() { if (currentTick != null) { @@ -111,4 +112,4 @@ public class LagCompensation { allMissedTicks = 0; } } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/biome/PositionalBiomeGetter.java b/leaf-server/src/main/java/org/dreeam/leaf/util/biome/PositionalBiomeGetter.java index 3683c61e..042dde39 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/biome/PositionalBiomeGetter.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/biome/PositionalBiomeGetter.java @@ -8,6 +8,7 @@ import java.util.function.Function; import java.util.function.Supplier; public class PositionalBiomeGetter implements Supplier> { + private final Function> biomeGetter; private final BlockPos.MutableBlockPos pos; private int nextX, nextY, nextZ; diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/cache/CachedOrNewBitsGetter.java b/leaf-server/src/main/java/org/dreeam/leaf/util/cache/CachedOrNewBitsGetter.java index 5a8abdff..e035619c 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/cache/CachedOrNewBitsGetter.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/cache/CachedOrNewBitsGetter.java @@ -6,6 +6,7 @@ import java.util.BitSet; import java.util.function.IntFunction; public class CachedOrNewBitsGetter { + private static final IntFunction bitSetConstructor = BitSet::new; public static ThreadLocal> BITSETS = ThreadLocal.withInitial(Int2ObjectOpenHashMap::new); diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/cache/IterateOutwardsCache.java b/leaf-server/src/main/java/org/dreeam/leaf/util/cache/IterateOutwardsCache.java index 9ae6b0a5..2de80d99 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/cache/IterateOutwardsCache.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/cache/IterateOutwardsCache.java @@ -2,17 +2,20 @@ package org.dreeam.leaf.util.cache; import it.unimi.dsi.fastutil.longs.LongArrayList; import it.unimi.dsi.fastutil.longs.LongList; + import java.util.Iterator; import java.util.Random; import java.util.concurrent.ConcurrentHashMap; + import net.minecraft.core.BlockPos; /** * @author 2No2Name, original implemenation by SuperCoder7979 and Gegy1000 */ public class IterateOutwardsCache { + //POS_ZERO must not be replaced with BlockPos.ORIGIN, otherwise iterateOutwards at BlockPos.ORIGIN will not use the cache - public static final BlockPos POS_ZERO = new BlockPos(0,0,0); + public static final BlockPos POS_ZERO = new BlockPos(0, 0, 0); private final ConcurrentHashMap table; @@ -68,4 +71,4 @@ public class IterateOutwardsCache { return entry; } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/cache/LongList2BlockPosMutableIterable.java b/leaf-server/src/main/java/org/dreeam/leaf/util/cache/LongList2BlockPosMutableIterable.java index bdc1e6a9..53c70ead 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/cache/LongList2BlockPosMutableIterable.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/cache/LongList2BlockPosMutableIterable.java @@ -2,7 +2,9 @@ package org.dreeam.leaf.util.cache; import it.unimi.dsi.fastutil.longs.LongIterator; import it.unimi.dsi.fastutil.longs.LongList; + import java.util.Iterator; + import net.minecraft.core.BlockPos; /** @@ -22,7 +24,7 @@ public class LongList2BlockPosMutableIterable implements Iterable { @Override public Iterator iterator() { - return new Iterator() { + return new Iterator<>() { private final LongIterator it = LongList2BlockPosMutableIterable.this.positions.iterator(); private final BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); @@ -36,11 +38,10 @@ public class LongList2BlockPosMutableIterable implements Iterable { public net.minecraft.core.BlockPos next() { long nextPos = this.it.nextLong(); return this.pos.set( - LongList2BlockPosMutableIterable.this.xOffset + BlockPos.getX(nextPos), - LongList2BlockPosMutableIterable.this.yOffset + BlockPos.getY(nextPos), - LongList2BlockPosMutableIterable.this.zOffset + BlockPos.getZ(nextPos)); + LongList2BlockPosMutableIterable.this.xOffset + BlockPos.getX(nextPos), + LongList2BlockPosMutableIterable.this.yOffset + BlockPos.getY(nextPos), + LongList2BlockPosMutableIterable.this.zOffset + BlockPos.getZ(nextPos)); } }; } - -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/map/StringCanonizingOpenHashMap.java b/leaf-server/src/main/java/org/dreeam/leaf/util/map/StringCanonizingOpenHashMap.java index 72538e77..3dcb73c3 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/map/StringCanonizingOpenHashMap.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/map/StringCanonizingOpenHashMap.java @@ -11,6 +11,7 @@ import java.util.function.Function; * Backed by an {@link Object2ObjectOpenHashMap}, with string keys interned to save memory. */ public class StringCanonizingOpenHashMap extends Object2ObjectOpenHashMap { + private static final Interner KEY_INTERNER = Interner.newWeakInterner(); private static String intern(String key) { @@ -49,10 +50,12 @@ public class StringCanonizingOpenHashMap extends Object2ObjectOpenHashMap StringCanonizingOpenHashMap deepCopy(StringCanonizingOpenHashMap incomingMap, Function deepCopier) { StringCanonizingOpenHashMap newMap = new StringCanonizingOpenHashMap<>(incomingMap.size(), 0.8f); ObjectIterator> iterator = incomingMap.object2ObjectEntrySet().fastIterator(); + while (iterator.hasNext()) { Map.Entry entry = iterator.next(); newMap.putWithoutInterning(entry.getKey(), deepCopier.apply(entry.getValue())); } + return newMap; } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/math/CompactSineLUT.java b/leaf-server/src/main/java/org/dreeam/leaf/util/math/CompactSineLUT.java index ef19bc09..d560b66d 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/math/CompactSineLUT.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/math/CompactSineLUT.java @@ -24,10 +24,11 @@ import net.minecraft.util.Mth; * from {@link Mth}. Validation is performed during runtime to ensure that the table is correct. * * @author coderbot16 Author of the original (and very clever) implementation in Rust: - * https://gitlab.com/coderbot16/i73/-/tree/master/i73-trig/src + * * @author jellysquid3 Additional optimizations, port to Java */ public class CompactSineLUT { + private static final int[] SINE_TABLE_INT = new int[16384 + 1]; private static final float SINE_TABLE_MIDPOINT; diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/math/random/FasterRandomSource.java b/leaf-server/src/main/java/org/dreeam/leaf/util/math/random/FasterRandomSource.java index 77fe5ab8..84b48703 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/math/random/FasterRandomSource.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/math/random/FasterRandomSource.java @@ -13,6 +13,7 @@ import java.util.random.RandomGeneratorFactory; public class FasterRandomSource implements BitRandomSource { + private static final int INT_BITS = 48; private static final long SEED_MASK = 0xFFFFFFFFFFFFL; private static final long MULTIPLIER = 25214903917L; @@ -75,7 +76,7 @@ public class FasterRandomSource implements BitRandomSource { @Override public RandomSource fromHashOf(String seed) { int i = seed.hashCode(); - return new FasterRandomSource((long)i ^ this.seed); + return new FasterRandomSource((long) i ^ this.seed); } @Override diff --git a/leaf-server/src/main/java/org/dreeam/leaf/version/LeafVersionFetcher.java b/leaf-server/src/main/java/org/dreeam/leaf/version/LeafVersionFetcher.java index a02577f0..861a7626 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/version/LeafVersionFetcher.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/version/LeafVersionFetcher.java @@ -6,12 +6,12 @@ public class LeafVersionFetcher extends AbstractPaperVersionFetcher { public LeafVersionFetcher() { super( - "ver/1.21.3", - "https://github.com/Winds-Studio/Leaf", - "Winds-Studio", - "Leaf", - "Winds-Studio", - "Leaf" + "ver/1.21.3", + "https://github.com/Winds-Studio/Leaf", + "Winds-Studio", + "Leaf", + "Winds-Studio", + "Leaf" ); } } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/LeavesLogger.java b/leaf-server/src/main/java/org/leavesmc/leaves/LeavesLogger.java index bc45935c..5f6466a5 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/LeavesLogger.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/LeavesLogger.java @@ -6,6 +6,7 @@ import java.util.logging.Level; import java.util.logging.Logger; public class LeavesLogger extends Logger { + public static final LeavesLogger LOGGER = new LeavesLogger(); private LeavesLogger() { diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java index 1e5d1469..f753b83d 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java @@ -49,8 +49,8 @@ public class AppleSkinProtocol { @ProtocolHandler.PlayerLeave public static void onPlayerLoggedOut(@NotNull ServerPlayer player) { - subscribedChannels.remove(player); - resetPlayerData(player); + subscribedChannels.remove(player); + resetPlayerData(player); } @ProtocolHandler.MinecraftRegister(ignoreId = true) @@ -62,45 +62,45 @@ public class AppleSkinProtocol { @ProtocolHandler.Ticker public static void tick() { - if (MinecraftServer.getServer().getTickCount() % org.dreeam.leaf.config.modules.network.ProtocolSupport.appleskinSyncTickInterval != 0) { - return; - } + if (MinecraftServer.getServer().getTickCount() % org.dreeam.leaf.config.modules.network.ProtocolSupport.appleskinSyncTickInterval != 0) { + return; + } - for (Map.Entry> entry : subscribedChannels.entrySet()) { - ServerPlayer player = entry.getKey(); - FoodData data = player.getFoodData(); + for (Map.Entry> entry : subscribedChannels.entrySet()) { + ServerPlayer player = entry.getKey(); + FoodData data = player.getFoodData(); - for (String channel : entry.getValue()) { - switch (channel) { - case "saturation" -> { - float saturation = data.getSaturationLevel(); - Float previousSaturation = previousSaturationLevels.get(player); - if (previousSaturation == null || saturation != previousSaturation) { - ProtocolUtils.sendPayloadPacket(player, SATURATION_KEY, buf -> buf.writeFloat(saturation)); - previousSaturationLevels.put(player, saturation); - } + for (String channel : entry.getValue()) { + switch (channel) { + case "saturation" -> { + float saturation = data.getSaturationLevel(); + Float previousSaturation = previousSaturationLevels.get(player); + if (previousSaturation == null || saturation != previousSaturation) { + ProtocolUtils.sendPayloadPacket(player, SATURATION_KEY, buf -> buf.writeFloat(saturation)); + previousSaturationLevels.put(player, saturation); } + } - case "exhaustion" -> { - float exhaustion = data.exhaustionLevel; - Float previousExhaustion = previousExhaustionLevels.get(player); - if (previousExhaustion == null || Math.abs(exhaustion - previousExhaustion) >= MINIMUM_EXHAUSTION_CHANGE_THRESHOLD) { - ProtocolUtils.sendPayloadPacket(player, EXHAUSTION_KEY, buf -> buf.writeFloat(exhaustion)); - previousExhaustionLevels.put(player, exhaustion); - } + case "exhaustion" -> { + float exhaustion = data.exhaustionLevel; + Float previousExhaustion = previousExhaustionLevels.get(player); + if (previousExhaustion == null || Math.abs(exhaustion - previousExhaustion) >= MINIMUM_EXHAUSTION_CHANGE_THRESHOLD) { + ProtocolUtils.sendPayloadPacket(player, EXHAUSTION_KEY, buf -> buf.writeFloat(exhaustion)); + previousExhaustionLevels.put(player, exhaustion); } + } - case "natural_regeneration" -> { - boolean regeneration = player.serverLevel().getGameRules().getBoolean(GameRules.RULE_NATURAL_REGENERATION); - Boolean previousRegeneration = previousNaturalRegeneration.get(player); - if (previousRegeneration == null || regeneration != previousRegeneration) { - ProtocolUtils.sendPayloadPacket(player, NATURAL_REGENERATION_KEY, buf -> buf.writeBoolean(regeneration)); - previousNaturalRegeneration.put(player, regeneration); - } + case "natural_regeneration" -> { + boolean regeneration = player.serverLevel().getGameRules().getBoolean(GameRules.RULE_NATURAL_REGENERATION); + Boolean previousRegeneration = previousNaturalRegeneration.get(player); + if (previousRegeneration == null || regeneration != previousRegeneration) { + ProtocolUtils.sendPayloadPacket(player, NATURAL_REGENERATION_KEY, buf -> buf.writeBoolean(regeneration)); + previousNaturalRegeneration.put(player, regeneration); } } } } + } } @ProtocolHandler.ReloadServer diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AsteorBarProtocol.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AsteorBarProtocol.java index 1f22ebe7..f7f43eac 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AsteorBarProtocol.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/AsteorBarProtocol.java @@ -57,29 +57,29 @@ public class AsteorBarProtocol { @ProtocolHandler.Ticker public static void tick() { - for (ServerPlayer player : players) { - FoodData data = player.getFoodData(); + for (ServerPlayer player : players) { + FoodData data = player.getFoodData(); - float saturation = data.getSaturationLevel(); - Float previousSaturation = previousSaturationLevels.get(player.getUUID()); - if (previousSaturation == null || saturation != previousSaturation) { - ProtocolUtils.sendPayloadPacket(player, NETWORK_KEY, buf -> { - buf.writeByte(1); - buf.writeFloat(saturation); - }); - previousSaturationLevels.put(player.getUUID(), saturation); - } - - float exhaustion = data.exhaustionLevel; - Float previousExhaustion = previousExhaustionLevels.get(player.getUUID()); - if (previousExhaustion == null || Math.abs(exhaustion - previousExhaustion) >= THRESHOLD) { - ProtocolUtils.sendPayloadPacket(player, NETWORK_KEY, buf -> { - buf.writeByte(0); - buf.writeFloat(exhaustion); - }); - previousExhaustionLevels.put(player.getUUID(), exhaustion); - } + float saturation = data.getSaturationLevel(); + Float previousSaturation = previousSaturationLevels.get(player.getUUID()); + if (previousSaturation == null || saturation != previousSaturation) { + ProtocolUtils.sendPayloadPacket(player, NETWORK_KEY, buf -> { + buf.writeByte(1); + buf.writeFloat(saturation); + }); + previousSaturationLevels.put(player.getUUID(), saturation); } + + float exhaustion = data.exhaustionLevel; + Float previousExhaustion = previousExhaustionLevels.get(player.getUUID()); + if (previousExhaustion == null || Math.abs(exhaustion - previousExhaustion) >= THRESHOLD) { + ProtocolUtils.sendPayloadPacket(player, NETWORK_KEY, buf -> { + buf.writeByte(0); + buf.writeFloat(exhaustion); + }); + previousExhaustionLevels.put(player.getUUID(), exhaustion); + } + } } @ProtocolHandler.ReloadServer diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/ChatImageProtocol.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/ChatImageProtocol.java index 364922e9..0bb760bd 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/ChatImageProtocol.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/ChatImageProtocol.java @@ -7,7 +7,6 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; -import org.dreeam.leaf.config.modules.network.ProtocolSupport; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.leavesmc.leaves.protocol.chatimage.ChatImageIndex; @@ -36,7 +35,7 @@ public class ChatImageProtocol { } public record FileInfoChannelPacket( - String message) implements LeavesCustomPayload { + String message) implements LeavesCustomPayload { private static final ResourceLocation FILE_INFO = ChatImageProtocol.id("file_info"); @New @@ -56,7 +55,7 @@ public class ChatImageProtocol { } public record DownloadFileChannelPacket( - String message) implements LeavesCustomPayload { + String message) implements LeavesCustomPayload { private static final ResourceLocation DOWNLOAD_FILE_CHANNEL = ChatImageProtocol.id("download_file_channel"); @New @@ -77,7 +76,7 @@ public class ChatImageProtocol { } public record FileChannelPacket( - String message) implements LeavesCustomPayload { + String message) implements LeavesCustomPayload { private static final ResourceLocation FILE_CHANNEL = ChatImageProtocol.id("file_channel"); @New diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocolManager.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocolManager.java index 89cc2bc4..c72b096c 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocolManager.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocolManager.java @@ -315,7 +315,8 @@ public class LeavesProtocolManager { } } - public record ErrorPayload(ResourceLocation id, String[] protocolID, String[] packetID) implements LeavesCustomPayload { + public record ErrorPayload(ResourceLocation id, String[] protocolID, + String[] packetID) implements LeavesCustomPayload { @Override public void write(@NotNull FriendlyByteBuf buf) { } @@ -333,7 +334,8 @@ public class LeavesProtocolManager { } } - public record LeavesPayload(FriendlyByteBuf data, ResourceLocation id) implements LeavesCustomPayload { + public record LeavesPayload(FriendlyByteBuf data, + ResourceLocation id) implements LeavesCustomPayload { @New public LeavesPayload(ResourceLocation location, FriendlyByteBuf buf) { @@ -347,7 +349,7 @@ public class LeavesProtocolManager { } public record FabricRegisterPayload( - Set channels) implements LeavesCustomPayload { + Set channels) implements LeavesCustomPayload { public static final ResourceLocation CHANNEL = ResourceLocation.withDefaultNamespace("register"); diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java index a7d9bd32..f7371f2b 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java @@ -154,8 +154,8 @@ public class JadeProtocol { try { shearableBlocks = Collections.unmodifiableList(LootTableMineableCollector.execute( - MinecraftServer.getServer().reloadableRegistries().lookup().lookupOrThrow(Registries.LOOT_TABLE), - Items.SHEARS.getDefaultInstance() + MinecraftServer.getServer().reloadableRegistries().lookup().lookupOrThrow(Registries.LOOT_TABLE), + Items.SHEARS.getDefaultInstance() )); } catch (Throwable ignore) { shearableBlocks = List.of(); diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessor.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessor.java index 12d689ca..90724515 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessor.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessor.java @@ -46,5 +46,4 @@ public interface BlockAccessor extends Accessor { BlockAccessor build(); } - } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessorImpl.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessorImpl.java index 9e4a321b..126b86db 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessorImpl.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/BlockAccessorImpl.java @@ -134,15 +134,15 @@ public class BlockAccessorImpl extends AccessorImpl implements B public record SyncData(boolean showDetails, BlockHitResult hit, BlockState blockState, ItemStack fakeBlock) { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.BOOL, - SyncData::showDetails, - StreamCodec.of(FriendlyByteBuf::writeBlockHitResult, FriendlyByteBuf::readBlockHitResult), - SyncData::hit, - ByteBufCodecs.idMapper(Block.BLOCK_STATE_REGISTRY), - SyncData::blockState, - ItemStack.OPTIONAL_STREAM_CODEC, - SyncData::fakeBlock, - SyncData::new + ByteBufCodecs.BOOL, + SyncData::showDetails, + StreamCodec.of(FriendlyByteBuf::writeBlockHitResult, FriendlyByteBuf::readBlockHitResult), + SyncData::hit, + ByteBufCodecs.idMapper(Block.BLOCK_STATE_REGISTRY), + SyncData::blockState, + ItemStack.OPTIONAL_STREAM_CODEC, + SyncData::fakeBlock, + SyncData::new ); public BlockAccessor unpack(ServerPlayer player) { @@ -151,13 +151,13 @@ public class BlockAccessorImpl extends AccessorImpl implements B blockEntity = Suppliers.memoize(() -> player.level().getBlockEntity(hit.getBlockPos())); } return new Builder() - .level(player.level()) - .player(player) - .showDetails(showDetails) - .hit(hit) - .blockState(blockState) - .blockEntity(blockEntity) - .build(); + .level(player.level()) + .player(player) + .showDetails(showDetails) + .hit(hit) + .blockState(blockState) + .blockEntity(blockEntity) + .build(); } } } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessor.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessor.java index 454360d5..02b453ea 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessor.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessor.java @@ -41,4 +41,4 @@ public interface EntityAccessor extends Accessor { EntityAccessor build(); } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessorImpl.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessorImpl.java index 65d16c00..3d42bce0 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessorImpl.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/accessor/EntityAccessorImpl.java @@ -98,26 +98,26 @@ public class EntityAccessorImpl extends AccessorImpl implements public record SyncData(boolean showDetails, int id, int partIndex, Vec3 hitVec) { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.BOOL, - SyncData::showDetails, - ByteBufCodecs.VAR_INT, - SyncData::id, - ByteBufCodecs.VAR_INT, - SyncData::partIndex, - ByteBufCodecs.VECTOR3F.map(Vec3::new, Vec3::toVector3f), - SyncData::hitVec, - SyncData::new + ByteBufCodecs.BOOL, + SyncData::showDetails, + ByteBufCodecs.VAR_INT, + SyncData::id, + ByteBufCodecs.VAR_INT, + SyncData::partIndex, + ByteBufCodecs.VECTOR3F.map(Vec3::new, Vec3::toVector3f), + SyncData::hitVec, + SyncData::new ); public EntityAccessor unpack(ServerPlayer player) { Supplier entity = Suppliers.memoize(() -> CommonUtil.getPartEntity(player.level().getEntity(id), partIndex)); return new EntityAccessorImpl.Builder() - .level(player.level()) - .player(player) - .showDetails(showDetails) - .entity(entity) - .hit(Suppliers.memoize(() -> new EntityHitResult(entity.get(), hitVec))) - .build(); + .level(player.level()) + .player(player) + .showDetails(showDetails) + .entity(entity) + .hit(Suppliers.memoize(() -> new EntityHitResult(entity.get(), hitVec))) + .build(); } } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/RequestEntityPayload.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/RequestEntityPayload.java index 395138d4..3ac45267 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/RequestEntityPayload.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/RequestEntityPayload.java @@ -20,19 +20,20 @@ import java.util.Objects; import static org.leavesmc.leaves.protocol.jade.JadeProtocol.entityDataProviders; -public record RequestEntityPayload(EntityAccessorImpl.SyncData data, List<@Nullable IServerDataProvider> dataProviders) implements LeavesCustomPayload { +public record RequestEntityPayload(EntityAccessorImpl.SyncData data, + List<@Nullable IServerDataProvider> dataProviders) implements LeavesCustomPayload { private static final ResourceLocation PACKET_REQUEST_ENTITY = JadeProtocol.id("request_entity"); private static final StreamCodec CODEC = StreamCodec.composite( - EntityAccessorImpl.SyncData.STREAM_CODEC, - RequestEntityPayload::data, - ByteBufCodecs.>list() - .apply(ByteBufCodecs.idMapper( - $ -> Objects.requireNonNull(entityDataProviders.idMapper()).byId($), - $ -> Objects.requireNonNull(entityDataProviders.idMapper()).getIdOrThrow($) - )), - RequestEntityPayload::dataProviders, - RequestEntityPayload::new); + EntityAccessorImpl.SyncData.STREAM_CODEC, + RequestEntityPayload::data, + ByteBufCodecs.>list() + .apply(ByteBufCodecs.idMapper( + $ -> Objects.requireNonNull(entityDataProviders.idMapper()).byId($), + $ -> Objects.requireNonNull(entityDataProviders.idMapper()).getIdOrThrow($) + )), + RequestEntityPayload::dataProviders, + RequestEntityPayload::new); @Override @@ -50,4 +51,4 @@ public record RequestEntityPayload(EntityAccessorImpl.SyncData data, List<@Nulla public ResourceLocation id() { return PACKET_REQUEST_ENTITY; } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPingPayload.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPingPayload.java index f4419962..fbb3e81c 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPingPayload.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPingPayload.java @@ -19,22 +19,23 @@ import java.util.Map; import static org.leavesmc.leaves.protocol.jade.util.JadeCodec.PRIMITIVE_STREAM_CODEC; public record ServerPingPayload( - Map serverConfig, - List shearableBlocks, - List blockProviderIds, - List entityProviderIds) implements LeavesCustomPayload { + + Map serverConfig, + List shearableBlocks, + List blockProviderIds, + List entityProviderIds) implements LeavesCustomPayload { private static final ResourceLocation PACKET_SERVER_HANDSHAKE = JadeProtocol.id("server_ping_v1"); private static final StreamCodec CODEC = StreamCodec.composite( - ByteBufCodecs.map(Maps::newHashMapWithExpectedSize, ResourceLocation.STREAM_CODEC, PRIMITIVE_STREAM_CODEC), - ServerPingPayload::serverConfig, - ByteBufCodecs.registry(Registries.BLOCK).apply(ByteBufCodecs.list()), - ServerPingPayload::shearableBlocks, - ByteBufCodecs.list().apply(ResourceLocation.STREAM_CODEC), - ServerPingPayload::blockProviderIds, - ByteBufCodecs.list().apply(ResourceLocation.STREAM_CODEC), - ServerPingPayload::entityProviderIds, - ServerPingPayload::new); + ByteBufCodecs.map(Maps::newHashMapWithExpectedSize, ResourceLocation.STREAM_CODEC, PRIMITIVE_STREAM_CODEC), + ServerPingPayload::serverConfig, + ByteBufCodecs.registry(Registries.BLOCK).apply(ByteBufCodecs.list()), + ServerPingPayload::shearableBlocks, + ByteBufCodecs.list().apply(ResourceLocation.STREAM_CODEC), + ServerPingPayload::blockProviderIds, + ByteBufCodecs.list().apply(ResourceLocation.STREAM_CODEC), + ServerPingPayload::entityProviderIds, + ServerPingPayload::new); @Override public void write(FriendlyByteBuf buf) { @@ -46,4 +47,3 @@ public record ServerPingPayload( return PACKET_SERVER_HANDSHAKE; } } - diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageExtensionProvider.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageExtensionProvider.java index 3efa3ceb..c9e00e50 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageExtensionProvider.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageExtensionProvider.java @@ -123,7 +123,7 @@ public enum ItemStorageExtensionProvider implements IServerExtensionProvider accessor) { Object target = accessor.getTarget(); if (target == null && accessor instanceof BlockAccessor blockAccessor && - blockAccessor.getBlock() instanceof WorldlyContainerHolder holder) { + blockAccessor.getBlock() instanceof WorldlyContainerHolder holder) { return holder.getContainer(blockAccessor.getBlockState(), accessor.getLevel(), blockAccessor.getPosition()); } else if (target instanceof Container container) { return container; diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageProvider.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageProvider.java index 8289b5c4..6657c493 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageProvider.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/ItemStorageProvider.java @@ -25,7 +25,7 @@ import java.util.Map; public abstract class ItemStorageProvider> implements IServerDataProvider { private static final StreamCodec>>> STREAM_CODEC = ViewGroup.listCodec( - ItemStack.OPTIONAL_STREAM_CODEC); + ItemStack.OPTIONAL_STREAM_CODEC); private static final ResourceLocation UNIVERSAL_ITEM_STORAGE = JadeProtocol.mc_id("item_storage"); @@ -85,4 +85,4 @@ public abstract class ItemStorageProvider> implements ISer public int getDefaultPriority() { return 9999; } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/BeehiveProvider.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/BeehiveProvider.java index ee92d79b..708fc5fc 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/BeehiveProvider.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/BeehiveProvider.java @@ -31,4 +31,4 @@ public enum BeehiveProvider implements StreamServerDataProvider STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.VAR_INT, - Data::fuel, - ByteBufCodecs.VAR_INT, - Data::time, - Data::new); + ByteBufCodecs.VAR_INT, + Data::fuel, + ByteBufCodecs.VAR_INT, + Data::time, + Data::new); } } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/FurnaceProvider.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/FurnaceProvider.java index 090e6a35..c820cd58 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/FurnaceProvider.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/FurnaceProvider.java @@ -32,9 +32,9 @@ public enum FurnaceProvider implements StreamServerDataProvider inventory) { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.VAR_INT, - Data::progress, - ByteBufCodecs.VAR_INT, - Data::total, - ItemStack.OPTIONAL_LIST_STREAM_CODEC, - Data::inventory, - Data::new); + ByteBufCodecs.VAR_INT, + Data::progress, + ByteBufCodecs.VAR_INT, + Data::total, + ItemStack.OPTIONAL_LIST_STREAM_CODEC, + Data::inventory, + Data::new); } } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/HopperLockProvider.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/HopperLockProvider.java index a3937081..139b9539 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/HopperLockProvider.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/provider/block/HopperLockProvider.java @@ -29,4 +29,4 @@ public enum HopperLockProvider implements StreamServerDataProvider> { INSTANCE; - private static final StreamCodec> STREAM_CODEC = ByteBufCodecs.list() - .apply(MobEffectInstance.STREAM_CODEC); + .apply(MobEffectInstance.STREAM_CODEC); private static final ResourceLocation MC_POTION_EFFECTS = JadeProtocol.mc_id("potion_effects"); @Override @Nullable public List streamData(@NotNull EntityAccessor accessor) { List effects = ((LivingEntity) accessor.getEntity()).getActiveEffects() - .stream() - .filter(MobEffectInstance::isVisible) - .toList(); + .stream() + .filter(MobEffectInstance::isVisible) + .toList(); return effects.isEmpty() ? null : effects; } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/tool/ToolHandler.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/tool/ToolHandler.java index 18f11e70..ba7a3925 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/tool/ToolHandler.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/tool/ToolHandler.java @@ -10,8 +10,8 @@ import java.util.List; public interface ToolHandler extends IJadeProvider { - ItemStack test(BlockState state, Level world, BlockPos pos); + ItemStack test(BlockState state, Level world, BlockPos pos); - List getTools(); + List getTools(); } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/CommonUtil.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/CommonUtil.java index a0a85361..47701b17 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/CommonUtil.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/CommonUtil.java @@ -60,8 +60,8 @@ public class CommonUtil { public static Map.Entry>> getServerExtensionData( - Accessor accessor, - WrappedHierarchyLookup> lookup) { + Accessor accessor, + WrappedHierarchyLookup> lookup) { for (var provider : lookup.wrappedGet(accessor)) { List> groups; try { diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/HierarchyLookup.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/HierarchyLookup.java index 0070fd22..153d944d 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/HierarchyLookup.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/HierarchyLookup.java @@ -26,6 +26,7 @@ import java.util.concurrent.ExecutionException; import java.util.stream.Stream; public class HierarchyLookup implements IHierarchyLookup { + private final Class baseClass; private final Cache, List> resultCache = CacheBuilder.newBuilder().build(); private final boolean singleton; @@ -117,9 +118,9 @@ public class HierarchyLookup implements IHierarchyLooku for (T provider : list) { if (set.contains(provider.getUid())) { throw new IllegalStateException("Duplicate UID: %s for %s".formatted(provider.getUid(), list.stream() - .filter(p -> p.getUid().equals(provider.getUid())) - .map(p -> p.getClass().getName()) - .toList() + .filter(p -> p.getUid().equals(provider.getUid())) + .map(p -> p.getClass().getName()) + .toList() )); } set.add(provider.getUid()); @@ -127,13 +128,13 @@ public class HierarchyLookup implements IHierarchyLooku }); objects = ImmutableListMultimap., T>builder() - .orderValuesBy(Comparator.comparingInt(priorityStore::byValue)) - .putAll(objects) - .build(); + .orderValuesBy(Comparator.comparingInt(priorityStore::byValue)) + .putAll(objects) + .build(); if (idMapped) { idMapper = createIdMapper(); } } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/IHierarchyLookup.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/IHierarchyLookup.java index 0536309c..25824249 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/IHierarchyLookup.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/IHierarchyLookup.java @@ -13,6 +13,7 @@ import java.util.Objects; import java.util.stream.Stream; public interface IHierarchyLookup { + default IHierarchyLookup cast() { return this; } @@ -24,8 +25,8 @@ public interface IHierarchyLookup { default List mappedIds() { return Streams.stream(Objects.requireNonNull(idMapper())) - .map(IJadeProvider::getUid) - .toList(); + .map(IJadeProvider::getUid) + .toList(); } void register(Class clazz, T provider); diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemCollector.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemCollector.java index 408c81a0..e8467927 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemCollector.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemCollector.java @@ -15,6 +15,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Predicate; public class ItemCollector { + public static final int MAX_SIZE = 54; public static final ItemCollector EMPTY = new ItemCollector<>(null); private static final Predicate NON_EMPTY = stack -> { @@ -75,7 +76,7 @@ public class ItemCollector { updateCollectingProgress(mergedResult.getFirst()); return mergedResult; } - List partialResult = items.object2IntEntrySet().stream().limit(MAX_SIZE ).map(entry -> { + List partialResult = items.object2IntEntrySet().stream().limit(MAX_SIZE).map(entry -> { ItemDefinition def = entry.getKey(); return def.toStack(entry.getIntValue()); }).toList(); diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemIterator.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemIterator.java index 4d65e9a8..9ea5cdb4 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemIterator.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ItemIterator.java @@ -10,6 +10,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; public abstract class ItemIterator { + public static final AtomicLong version = new AtomicLong(); protected final Function containerFinder; protected final int fromIndex; diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/JadeCodec.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/JadeCodec.java index a046ae4e..895af9b2 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/JadeCodec.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/JadeCodec.java @@ -6,6 +6,7 @@ import net.minecraft.network.codec.StreamCodec; import org.jetbrains.annotations.NotNull; public class JadeCodec { + public static final StreamCodec PRIMITIVE_STREAM_CODEC = new StreamCodec<>() { @Override public @NotNull Object decode(@NotNull ByteBuf buf) { @@ -52,7 +53,8 @@ public class JadeCodec { ByteBufCodecs.STRING_UTF8.encode(buf, anEnum.name()); } case null -> throw new NullPointerException(); - default -> throw new IllegalArgumentException("Unknown primitive type: %s (%s)".formatted(o, o.getClass())); + default -> + throw new IllegalArgumentException("Unknown primitive type: %s (%s)".formatted(o, o.getClass())); } } }; diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/PairHierarchyLookup.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/PairHierarchyLookup.java index cb5c8201..da1a60ff 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/PairHierarchyLookup.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/PairHierarchyLookup.java @@ -21,6 +21,7 @@ import java.util.concurrent.ExecutionException; import java.util.stream.Stream; public class PairHierarchyLookup implements IHierarchyLookup { + public final IHierarchyLookup first; public final IHierarchyLookup second; private final Cache, Class>, List> mergedCache = CacheBuilder.newBuilder().build(); @@ -47,8 +48,8 @@ public class PairHierarchyLookup implements IHierarchyL return firstList; } return ImmutableList.sortedCopyOf( - Comparator.comparingInt(JadeProtocol.priorities::byValue), - Iterables.concat(firstList, secondList) + Comparator.comparingInt(JadeProtocol.priorities::byValue), + Iterables.concat(firstList, secondList) ); }); } catch (ExecutionException e) { @@ -117,4 +118,4 @@ public class PairHierarchyLookup implements IHierarchyL idMapper = createIdMapper(); } } -} \ No newline at end of file +} diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ViewGroup.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ViewGroup.java index 520eadbf..92e1f0df 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ViewGroup.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/ViewGroup.java @@ -12,24 +12,25 @@ import java.util.Map; import java.util.Optional; public class ViewGroup { + public static StreamCodec> codec(StreamCodec viewCodec) { return StreamCodec.composite( - ByteBufCodecs.list().apply(viewCodec), - $ -> $.views, - ByteBufCodecs.optional(ByteBufCodecs.STRING_UTF8), - $ -> Optional.ofNullable($.id), - ByteBufCodecs.optional(ByteBufCodecs.COMPOUND_TAG), - $ -> Optional.ofNullable($.extraData), - ViewGroup::new); + ByteBufCodecs.list().apply(viewCodec), + $ -> $.views, + ByteBufCodecs.optional(ByteBufCodecs.STRING_UTF8), + $ -> Optional.ofNullable($.id), + ByteBufCodecs.optional(ByteBufCodecs.COMPOUND_TAG), + $ -> Optional.ofNullable($.extraData), + ViewGroup::new); } public static StreamCodec>>> listCodec(StreamCodec viewCodec) { return StreamCodec.composite( - ResourceLocation.STREAM_CODEC, - Map.Entry::getKey, - ByteBufCodecs.>list().apply(codec(viewCodec)), - Map.Entry::getValue, - Map::entry); + ResourceLocation.STREAM_CODEC, + Map.Entry::getKey, + ByteBufCodecs.>list().apply(codec(viewCodec)), + Map.Entry::getValue, + Map::entry); } public List views; diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/WrappedHierarchyLookup.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/WrappedHierarchyLookup.java index 9b49efd3..e8d29645 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/WrappedHierarchyLookup.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/jade/util/WrappedHierarchyLookup.java @@ -17,6 +17,7 @@ import java.util.function.Function; import java.util.stream.Stream; public class WrappedHierarchyLookup extends HierarchyLookup { + public final List, Function, @Nullable Object>>> overrides = Lists.newArrayList(); private boolean empty = true; @@ -28,12 +29,12 @@ public class WrappedHierarchyLookup extends HierarchyLo public static WrappedHierarchyLookup forAccessor() { WrappedHierarchyLookup lookup = new WrappedHierarchyLookup<>(); lookup.overrides.add(Pair.of( - new HierarchyLookup<>(Block.class), accessor -> { - if (accessor instanceof BlockAccessor blockAccessor) { - return blockAccessor.getBlock(); - } - return null; - })); + new HierarchyLookup<>(Block.class), accessor -> { + if (accessor instanceof BlockAccessor blockAccessor) { + return blockAccessor.getBlock(); + } + return null; + })); return lookup; } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java index c0397652..4853c2d9 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; import org.jetbrains.annotations.NotNull; import org.leavesmc.leaves.protocol.core.LeavesProtocol; -import org.leavesmc.leaves.protocol.core.LeavesProtocolManager; import org.leavesmc.leaves.protocol.core.ProtocolHandler; import org.leavesmc.leaves.protocol.syncmatica.exchange.DownloadExchange; import org.leavesmc.leaves.protocol.syncmatica.exchange.Exchange; diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/FileStorage.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/FileStorage.java index 9139394e..a630b123 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/FileStorage.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/FileStorage.java @@ -28,7 +28,7 @@ public class FileStorage { } private boolean isDownloading(final ServerPlacement placement) { - return SyncmaticaProtocol.getCommunicationManager().getDownloadState(placement); + return CommunicationManager.getDownloadState(placement); } public File getLocalLitematic(final ServerPlacement placement) { diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/PlayerIdentifierProvider.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/PlayerIdentifierProvider.java index df2254ed..4a6248fc 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/PlayerIdentifierProvider.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/PlayerIdentifierProvider.java @@ -18,7 +18,7 @@ public class PlayerIdentifierProvider { } public PlayerIdentifier createOrGet(final ExchangeTarget exchangeTarget) { - return createOrGet(SyncmaticaProtocol.getCommunicationManager().getGameProfile(exchangeTarget)); + return createOrGet(CommunicationManager.getGameProfile(exchangeTarget)); } public PlayerIdentifier createOrGet(final @NotNull GameProfile gameProfile) { diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/AbstractExchange.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/AbstractExchange.java index b06ffeac..da152f02 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/AbstractExchange.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/AbstractExchange.java @@ -1,8 +1,6 @@ package org.leavesmc.leaves.protocol.syncmatica.exchange; import net.minecraft.network.FriendlyByteBuf; -import org.leavesmc.leaves.protocol.syncmatica.CommunicationManager; -import org.leavesmc.leaves.protocol.syncmatica.SyncmaticaProtocol; import java.util.UUID; @@ -41,10 +39,6 @@ public abstract class AbstractExchange implements Exchange { } } - public CommunicationManager getManager() { - return SyncmaticaProtocol.getCommunicationManager(); - } - protected void sendCancelPacket() { } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/DownloadExchange.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/DownloadExchange.java index b0463dc8..08ab1fe6 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/DownloadExchange.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/DownloadExchange.java @@ -4,6 +4,7 @@ import io.netty.buffer.Unpooled; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; +import org.leavesmc.leaves.protocol.syncmatica.CommunicationManager; import org.leavesmc.leaves.protocol.syncmatica.MessageType; import org.leavesmc.leaves.protocol.syncmatica.PacketType; import org.leavesmc.leaves.protocol.syncmatica.ServerPlacement; @@ -101,7 +102,7 @@ public class DownloadExchange extends AbstractExchange { @Override protected void onClose() { - getManager().setDownloadState(toDownload, false); + CommunicationManager.setDownloadState(toDownload, false); try { outputStream.close(); } catch (final IOException e) { diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/Exchange.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/Exchange.java index 0f45ef7f..856daf28 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/Exchange.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/Exchange.java @@ -4,6 +4,7 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; public interface Exchange { + ExchangeTarget getPartner(); boolean checkPacket(ResourceLocation id, FriendlyByteBuf packetBuf); diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/ModifyExchangeServer.java b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/ModifyExchangeServer.java index c691201f..f7f423c7 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/ModifyExchangeServer.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/exchange/ModifyExchangeServer.java @@ -4,6 +4,7 @@ import io.netty.buffer.Unpooled; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; +import org.leavesmc.leaves.protocol.syncmatica.CommunicationManager; import org.leavesmc.leaves.protocol.syncmatica.PacketType; import org.leavesmc.leaves.protocol.syncmatica.PlayerIdentifier; import org.leavesmc.leaves.protocol.syncmatica.ServerPlacement; @@ -31,7 +32,7 @@ public class ModifyExchangeServer extends AbstractExchange { public void handle(final @NotNull ResourceLocation id, final @NotNull FriendlyByteBuf packetBuf) { packetBuf.readUUID(); if (id.equals(PacketType.MODIFY_FINISH.identifier)) { - SyncmaticaProtocol.getCommunicationManager().receivePositionData(placement, packetBuf, getPartner()); + CommunicationManager.receivePositionData(placement, packetBuf, getPartner()); final PlayerIdentifier identifier = SyncmaticaProtocol.getPlayerIdentifierProvider().createOrGet( getPartner() ); @@ -43,7 +44,7 @@ public class ModifyExchangeServer extends AbstractExchange { @Override public void init() { - if (getPlacement() == null || SyncmaticaProtocol.getCommunicationManager().getModifier(placement) != null) { + if (getPlacement() == null || CommunicationManager.getModifier(placement) != null) { close(true); } else { if (SyncmaticaProtocol.getPlayerIdentifierProvider().createOrGet(this.getPartner()).uuid.equals(placement.getOwner().uuid)) { @@ -58,7 +59,7 @@ public class ModifyExchangeServer extends AbstractExchange { final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); buf.writeUUID(placement.getId()); getPartner().sendPacket(PacketType.MODIFY_REQUEST_ACCEPT.identifier, buf); - SyncmaticaProtocol.getCommunicationManager().setModifier(placement, this); + CommunicationManager.setModifier(placement, this); } @Override @@ -74,8 +75,8 @@ public class ModifyExchangeServer extends AbstractExchange { @Override protected void onClose() { - if (SyncmaticaProtocol.getCommunicationManager().getModifier(placement) == this) { - SyncmaticaProtocol.getCommunicationManager().setModifier(placement, null); + if (CommunicationManager.getModifier(placement) == this) { + CommunicationManager.setModifier(placement, null); } } } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java b/leaf-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java index d1fb2f08..d8ea3495 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java @@ -112,14 +112,14 @@ public class Recorder extends Connection { this.savePacket(new ClientboundSelectKnownPacks(knownPackslist), ConnectionProtocol.CONFIGURATION); server.getServerResourcePack().ifPresent((info) -> this.savePacket(new ClientboundResourcePackPushPacket( - info.id(), info.url(), info.hash(), info.isRequired(), Optional.ofNullable(info.prompt()) + info.id(), info.url(), info.hash(), info.isRequired(), Optional.ofNullable(info.prompt()) ))); LayeredRegistryAccess layeredregistryaccess = server.registries(); DynamicOps dynamicOps = layeredregistryaccess.compositeAccess().createSerializationContext(NbtOps.INSTANCE); RegistrySynchronization.packRegistries(dynamicOps, layeredregistryaccess.getAccessFrom(RegistryLayer.WORLDGEN), Set.copyOf(knownPackslist), - (key, entries) -> - this.savePacket(new ClientboundRegistryDataPacket(key, entries), ConnectionProtocol.CONFIGURATION) + (key, entries) -> + this.savePacket(new ClientboundRegistryDataPacket(key, entries), ConnectionProtocol.CONFIGURATION) ); this.savePacket(new ClientboundUpdateTagsPacket(TagNetworkSerialization.serializeTagsToNetwork(layeredregistryaccess)), ConnectionProtocol.CONFIGURATION); diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java b/leaf-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java index e1c32a60..370ec32d 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java @@ -46,7 +46,7 @@ public class RecorderOption { private final List> packets; - private RecordWeather(Packet... packets) { + RecordWeather(Packet... packets) { this.packets = List.of(packets); } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java b/leaf-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java index c6bb5431..8d96445f 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java @@ -75,10 +75,10 @@ public class ReplayFile { this.packetStream = new DataOutputStream(new DigestOutputStream(new BufferedOutputStream(new FileOutputStream(packetFile)), crc32)); this.protocols = Map.of( - ConnectionProtocol.STATUS, StatusProtocols.CLIENTBOUND, - ConnectionProtocol.LOGIN, LoginProtocols.CLIENTBOUND, - ConnectionProtocol.CONFIGURATION, ConfigurationProtocols.CLIENTBOUND, - ConnectionProtocol.PLAY, GameProtocols.CLIENTBOUND_TEMPLATE.bind(RegistryFriendlyByteBuf.decorator(MinecraftServer.getServer().registryAccess())) + ConnectionProtocol.STATUS, StatusProtocols.CLIENTBOUND, + ConnectionProtocol.LOGIN, LoginProtocols.CLIENTBOUND, + ConnectionProtocol.CONFIGURATION, ConfigurationProtocols.CLIENTBOUND, + ConnectionProtocol.PLAY, GameProtocols.CLIENTBOUND_TEMPLATE.bind(RegistryFriendlyByteBuf.decorator(MinecraftServer.getServer().registryAccess())) ); } diff --git a/leaf-server/src/main/java/org/leavesmc/leaves/util/UUIDSerializer.java b/leaf-server/src/main/java/org/leavesmc/leaves/util/UUIDSerializer.java index b0834f4b..ae8e4e2a 100644 --- a/leaf-server/src/main/java/org/leavesmc/leaves/util/UUIDSerializer.java +++ b/leaf-server/src/main/java/org/leavesmc/leaves/util/UUIDSerializer.java @@ -10,6 +10,7 @@ import java.lang.reflect.Type; import java.util.UUID; public class UUIDSerializer implements JsonSerializer { + @Override public JsonElement serialize(@NotNull UUID src, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(src.toString()); diff --git a/leaf-server/src/main/java/org/purpurmc/purpur/command/AFKCommand.java b/leaf-server/src/main/java/org/purpurmc/purpur/command/AFKCommand.java index 1b8eee9c..458f06f0 100644 --- a/leaf-server/src/main/java/org/purpurmc/purpur/command/AFKCommand.java +++ b/leaf-server/src/main/java/org/purpurmc/purpur/command/AFKCommand.java @@ -12,20 +12,20 @@ import java.util.Collections; public class AFKCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("afk") - .requires((listener) -> listener.hasPermission(2, "bukkit.command.afk")) - .executes((context) -> execute(context.getSource(), Collections.singleton(context.getSource().getPlayerOrException()))) - .then(Commands.argument("targets", EntityArgument.players()) - .requires(listener -> listener.hasPermission(2, "bukkit.command.afk.other")) - .executes((context) -> execute(context.getSource(), EntityArgument.getPlayers(context, "targets"))) - ) + .requires((listener) -> listener.hasPermission(2, "bukkit.command.afk")) + .executes((context) -> execute(context.getSource(), Collections.singleton(context.getSource().getPlayerOrException()))) + .then(Commands.argument("targets", EntityArgument.players()) + .requires(listener -> listener.hasPermission(2, "bukkit.command.afk.other")) + .executes((context) -> execute(context.getSource(), EntityArgument.getPlayers(context, "targets"))) + ) ); } private static int execute(CommandSourceStack sender, Collection targets) { for (ServerPlayer player : targets) { boolean afk = player.isCommandAfk - ? !player.commandAfkStatus - : !player.isAfk(); + ? !player.commandAfkStatus + : !player.isAfk(); if (afk) player.setAfk(true); diff --git a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/EnumRegionFileExtension.java b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/EnumRegionFileExtension.java index 8eba172b..8b2f7c02 100644 --- a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/EnumRegionFileExtension.java +++ b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/EnumRegionFileExtension.java @@ -23,10 +23,6 @@ public enum EnumRegionFileExtension { @Contract(pure = true) public static EnumRegionFileExtension fromName(@NotNull String name) { switch (name.toUpperCase(Locale.ROOT)) { - default -> { - return UNKNOWN; - } - case "MCA" -> { return MCA; } @@ -34,6 +30,10 @@ public enum EnumRegionFileExtension { case "LINEAR" -> { return LINEAR; } + default -> { + return UNKNOWN; + } + } } diff --git a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFile.java b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFile.java index 6a9b8178..e5d3e8d5 100644 --- a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFile.java +++ b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFile.java @@ -11,19 +11,30 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.ChunkPos; public interface IRegionFile extends AutoCloseable, ChunkSystemRegionFile { + Path getPath(); + void flush() throws IOException; + void clear(ChunkPos pos) throws IOException; + void close() throws IOException; + void setOversized(int x, int z, boolean b) throws IOException; + void write(ChunkPos pos, ByteBuffer buffer) throws IOException; boolean hasChunk(ChunkPos pos); + boolean doesChunkExist(ChunkPos pos) throws Exception; + boolean isOversized(int x, int z); + boolean recalculateHeader() throws IOException; DataOutputStream getChunkDataOutputStream(ChunkPos pos) throws IOException; + DataInputStream getChunkDataInputStream(ChunkPos pos) throws IOException; + CompoundTag getOversizedData(int x, int z) throws IOException; } diff --git a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFileFactory.java b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFileFactory.java index 70552d63..fcb5f24c 100644 --- a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFileFactory.java +++ b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/IRegionFileFactory.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; public class IRegionFileFactory { + @Contract("_, _, _, _ -> new") public static @NotNull IRegionFile getAbstractRegionFile(RegionStorageInfo storageKey, Path directory, Path path, boolean dsync) throws IOException { return getAbstractRegionFile(storageKey, directory, path, RegionFileVersion.getCompressionFormat(), dsync); diff --git a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/LinearRegionFile.java b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/LinearRegionFile.java index 94a84a38..428e507e 100644 --- a/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/LinearRegionFile.java +++ b/leaf-server/src/main/java/org/stupidcraft/linearpaper/region/LinearRegionFile.java @@ -34,6 +34,7 @@ import org.dreeam.leaf.config.modules.misc.RegionFormatConfig; import org.slf4j.Logger; public class LinearRegionFile implements IRegionFile { + private static final long SUPERBLOCK = -4323716122432332390L; private static final byte VERSION = 2; private static final int HEADER_SIZE = 32; @@ -226,7 +227,7 @@ public class LinearRegionFile implements IRegionFile { } @Override - public MoonriseRegionFileIO.RegionDataController.WriteData moonrise$startWrite(CompoundTag data, ChunkPos pos) throws IOException { + public MoonriseRegionFileIO.RegionDataController.WriteData moonrise$startWrite(CompoundTag data, ChunkPos pos) { final DataOutputStream out = this.getChunkDataOutputStream(pos); return new ca.spottedleaf.moonrise.patches.chunk_system.io.MoonriseRegionFileIO.RegionDataController.WriteData( diff --git a/leaf-server/src/main/java/su/plo/matter/Globals.java b/leaf-server/src/main/java/su/plo/matter/Globals.java index d325d161..22e86741 100644 --- a/leaf-server/src/main/java/su/plo/matter/Globals.java +++ b/leaf-server/src/main/java/su/plo/matter/Globals.java @@ -8,6 +8,7 @@ import java.security.SecureRandom; import java.util.Optional; public class Globals { + public static final int WORLD_SEED_LONGS = 16; public static final int WORLD_SEED_BITS = WORLD_SEED_LONGS * 64; diff --git a/leaf-server/src/main/java/su/plo/matter/Hashing.java b/leaf-server/src/main/java/su/plo/matter/Hashing.java index ec7a57c6..7f6d886f 100644 --- a/leaf-server/src/main/java/su/plo/matter/Hashing.java +++ b/leaf-server/src/main/java/su/plo/matter/Hashing.java @@ -1,28 +1,29 @@ package su.plo.matter; public class Hashing { + // https://en.wikipedia.org/wiki/BLAKE_(hash_function) // https://github.com/bcgit/bc-java/blob/master/core/src/main/java/org/bouncycastle/crypto/digests/Blake2bDigest.java private final static long[] blake2b_IV = { - 0x6a09e667f3bcc908L, 0xbb67ae8584caa73bL, 0x3c6ef372fe94f82bL, - 0xa54ff53a5f1d36f1L, 0x510e527fade682d1L, 0x9b05688c2b3e6c1fL, - 0x1f83d9abfb41bd6bL, 0x5be0cd19137e2179L + 0x6a09e667f3bcc908L, 0xbb67ae8584caa73bL, 0x3c6ef372fe94f82bL, + 0xa54ff53a5f1d36f1L, 0x510e527fade682d1L, 0x9b05688c2b3e6c1fL, + 0x1f83d9abfb41bd6bL, 0x5be0cd19137e2179L }; private final static byte[][] blake2b_sigma = { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, - {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, - {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, - {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, - {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, - {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, - {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, - {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, - {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3} + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, + {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, + {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, + {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, + {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, + {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, + {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, + {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, + {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3} }; public static long[] hashWorldSeed(long[] worldSeed) { diff --git a/leaf-server/src/main/java/su/plo/matter/WorldgenCryptoRandom.java b/leaf-server/src/main/java/su/plo/matter/WorldgenCryptoRandom.java index 42f4ca3f..17f1829a 100644 --- a/leaf-server/src/main/java/su/plo/matter/WorldgenCryptoRandom.java +++ b/leaf-server/src/main/java/su/plo/matter/WorldgenCryptoRandom.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Arrays; public class WorldgenCryptoRandom extends WorldgenRandom { + // hash the world seed to guard against badly chosen world seeds private static final long[] HASHED_ZERO_SEED = Hashing.hashWorldSeed(new long[Globals.WORLD_SEED_LONGS]); private static final ThreadLocal LAST_SEEN_WORLD_SEED = ThreadLocal.withInitial(() -> new long[Globals.WORLD_SEED_LONGS]); @@ -33,7 +34,7 @@ public class WorldgenCryptoRandom extends WorldgenRandom { public void setSecureSeed(int x, int z, Globals.Salt typeSalt, long salt) { System.arraycopy(Globals.worldSeed, 0, this.worldSeed, 0, Globals.WORLD_SEED_LONGS); message[0] = ((long) x << 32) | ((long) z & 0xffffffffL); - message[1] = ((long) Globals.dimension.get() << 32) | ((long) salt & 0xffffffffL); + message[1] = ((long) Globals.dimension.get() << 32) | (salt & 0xffffffffL); message[2] = typeSalt.ordinal(); message[3] = counter = 0; randomBitIndex = MAX_RANDOM_BIT_INDEX;